Skip to main content

YXDB reader and writer for Python, backed by a Rust core.

Project description

sigilyx

YXDB reader and writer for Python.

PyPI Python License: Apache-2.0

YXDB is the native binary format used by Alteryx Designer. sigilyx reads and writes .yxdb files using Polars DataFrames, PyArrow Tables, or Pandas DataFrames.

The core is written in Rust. No native Alteryx Designer installation is required.

Format scope: sigilyx has full read/write support for the E1 (original engine) YXDB layout. Experimental read support for E2 (AMP engine) is included - 13 field types have been verified against real E2 files; 4 rare types (Blob, SpatialObj, Time, WString) have speculative decoders behind an opt-in flag. E2 writing is not yet supported. See SPECIFICATION-E2.md for details.

Installation

pip install sigilyx                     # Polars only (default)
pip install "sigilyx[arrow]"            # + PyArrow
pip install "sigilyx[pandas]"           # + Pandas + PyArrow
pip install "sigilyx[all]"              # all extras

Requires Python 3.9+. Pre-built wheels for Windows, macOS, and Linux (x64 and ARM).

Quick Start

import polars as pl
import sigilyx  # importing registers pl.read_yxdb(), df.yxdb, etc.

# Read
df = pl.read_yxdb("data.yxdb")

# Write
df.yxdb.write("output.yxdb")

API

Polars Integration

Importing sigilyx registers official Polars namespace plugins and top-level IO aliases. No extra calls needed - just import sigilyx.

import polars as pl
import sigilyx

# Top-level IO (mirrors pl.read_parquet / pl.scan_parquet style)
df = pl.read_yxdb("data.yxdb")           # returns pl.DataFrame
lf = pl.scan_yxdb("data.yxdb")           # returns pl.LazyFrame (IO plugin)

# Namespace API on DataFrame / LazyFrame
df.yxdb.write("output.yxdb")             # pl.DataFrame → .yxdb file
lf.yxdb.sink("output.yxdb")              # pl.LazyFrame → .yxdb file (streaming)

Reading

import sigilyx as yx

# Polars DataFrame - fastest, zero-copy via Arrow C Data Interface
df = yx.read_yxdb("data.yxdb")

# PyArrow Table
table = yx.read_yxdb_arrow("data.yxdb")

# Pandas DataFrame (via PyArrow)
pdf = yx.read_yxdb_pandas("data.yxdb")

Writing

import sigilyx as yx

# Polars DataFrame
yx.write_yxdb("output.yxdb", df)

# PyArrow Table
yx.write_yxdb_arrow("output.yxdb", table)

# Pandas DataFrame
yx.write_yxdb_pandas("output.yxdb", pdf)

Streaming / Batched Read

Iterate over large files with constant memory usage:

import sigilyx as yx

# Basic iteration - each batch is a Polars DataFrame
for batch in yx.read_yxdb_batches("data.yxdb", batch_size=100_000):
    process(batch)

# Column projection - only materialise the columns you need
for batch in yx.read_yxdb_batches("data.yxdb", columns=["Id", "Name", "Amount"]):
    process(batch)

# Row limit - stop after N total rows
for batch in yx.read_yxdb_batches("data.yxdb", n_rows=5_000):
    process(batch)

Lazy Scan

import polars as pl
import sigilyx as yx

# Returns a Polars LazyFrame backed by a native Rust streaming reader.
# Only the YXDB header is read on construction; data streams on .collect().
lf = yx.scan("data.yxdb")

result = lf.filter(pl.col("amount") > 100).collect()

# Projection pushdown - only selected columns are materialised in Rust
top10 = lf.select("id", "name").head(10).collect()

Pushdown support: projection (select / with_columns) and row-limit (n_rows / .head()) are pushed down to the Rust reader. Predicate pushdown is not possible - YXDB rows are LZF-compressed with no block-level statistics, so .filter() is applied after the scan.

Metadata

import sigilyx as yx

# Inspect schema without reading any row data
fields = yx.read_yxdb_fields("data.yxdb")
for f in fields:
    print(f.name, f.field_type, f.size)

# Record count from the file header - no data read
n = yx.record_count("data.yxdb")

Field Types

YXDB Type Polars / Arrow Type Notes
Bool Boolean
Byte Int16 Unsigned byte stored as Int16
Int16 Int16
Int32 Int32
Int64 Int64
Float Float32
Double Float64
FixedDecimal Decimal Precision and scale preserved
String String / Utf8 Fixed-width, ASCII/Latin-1
WString String / Utf8 Fixed-width, UTF-16 decoded
V_String String / LargeUtf8 Variable-length, ASCII/Latin-1
V_WString String / LargeUtf8 Variable-length, UTF-16 decoded
Date Date Days since Unix epoch
DateTime Datetime(us) Microsecond precision
Time Time Nanosecond precision
Blob Binary / LargeBinary Variable-length binary
SpatialObj Binary / LargeBinary Geometry as ISO WKB or raw SHP bytes

Links

License

Apache License 2.0.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sigilyx-0.3.1.tar.gz (141.8 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

sigilyx-0.3.1-cp39-abi3-win_amd64.whl (7.1 MB view details)

Uploaded CPython 3.9+Windows x86-64

sigilyx-0.3.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.6 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

sigilyx-0.3.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (6.0 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

sigilyx-0.3.1-cp39-abi3-macosx_11_0_arm64.whl (5.8 MB view details)

Uploaded CPython 3.9+macOS 11.0+ ARM64

File details

Details for the file sigilyx-0.3.1.tar.gz.

File metadata

  • Download URL: sigilyx-0.3.1.tar.gz
  • Upload date:
  • Size: 141.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sigilyx-0.3.1.tar.gz
Algorithm Hash digest
SHA256 5d9fea4838cfaa12d04f1d199218133a8212f378e855a1f0b4e3c57a209f7598
MD5 9734fd3175a99d75682aec7858d03dee
BLAKE2b-256 cbb19772bb45b4b25f1f0f1ae3e623b1a7691452b8bcd1c89511be235fc5dabd

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigilyx-0.3.1.tar.gz:

Publisher: publish-pypi.yml on Sigilweaver/SigilYX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sigilyx-0.3.1-cp39-abi3-win_amd64.whl.

File metadata

  • Download URL: sigilyx-0.3.1-cp39-abi3-win_amd64.whl
  • Upload date:
  • Size: 7.1 MB
  • Tags: CPython 3.9+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for sigilyx-0.3.1-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 492fd324d4d4b6b00fc1e25ae7b7d176babbe6e536d060de503cb1403470c143
MD5 870097f5f33ac42c6840f29c1b2235c7
BLAKE2b-256 4c74cabd0ba511e90bb812bbb3740789e0d0e04cac0f85e4c366c2ce1f1933e9

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigilyx-0.3.1-cp39-abi3-win_amd64.whl:

Publisher: publish-pypi.yml on Sigilweaver/SigilYX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sigilyx-0.3.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for sigilyx-0.3.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8ad11486bcce95b856d571101c1fdae64d8f19f177ff254b71e2397b3ced238d
MD5 0f0c1536dccd702636c87617ada7789c
BLAKE2b-256 a5433ef342ef6fb8cb9292b2726e3d8d434e49873567ede2d4266fb456090fe8

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigilyx-0.3.1-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish-pypi.yml on Sigilweaver/SigilYX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sigilyx-0.3.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for sigilyx-0.3.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4c449c81895572a31810aa412c6ab93db0f26cd2bd307dc1251cfa6da71194d3
MD5 5ff60e095a64c0b0ffc48b4bb370b210
BLAKE2b-256 10ed1be682de644fa96418d4159c6c8740f60314e05b41c2f2b0573805c78ad5

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigilyx-0.3.1-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: publish-pypi.yml on Sigilweaver/SigilYX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sigilyx-0.3.1-cp39-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sigilyx-0.3.1-cp39-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bd89f1b9d5e0b7046ad3f406fad0c5894ac4773951fe9f2a786452a7346d3418
MD5 2d6c115ed83109f0cb36e790368ee2ce
BLAKE2b-256 db6abb405df5caf0044399130d52590c5caee27abb8069a4cf67cb452d6ccfdd

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigilyx-0.3.1-cp39-abi3-macosx_11_0_arm64.whl:

Publisher: publish-pypi.yml on Sigilweaver/SigilYX

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page