Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d455777
Return Serde errors for corrupt RLE and RunEnd metadata (#10852)
ump45nose Nov 11, 2026
b2d08cc
perf(scan): merge narrow splits at boundaries only some fields of a s…
ChristopherWirt Nov 11, 2026
5dac460
Link the vortex.dev FAQ from the docs (#11385)
lwwmanning Nov 11, 2026
7c1972b
fix(spark): release native read resources deterministically (#11367)
ChristopherWirt Nov 11, 2026
e9e55db
Compute integer statistics in one hand-written pass per need (#10346)
joseph-isaacs Nov 11, 2026
83e1e0f
perf: avoid indirect fn in decimal between_unpack (#11387)
MassivePizza Nov 11, 2026
e1ecf3c
Give each file_stats_reader test its own session (#11381)
robert3005 Nov 11, 2026
bc3d422
Preserve raw field names in serialized expressions (#11391)
gatesn Nov 11, 2026
51972eb
fix(compressor): copy constant string and binary values out of the so…
jackylee-ch Nov 11, 2026
bd3240b
feat(compressor): compress boolean arrays and embedded validity (#11158)
gatesn Nov 11, 2026
b6cc108
Add TPC-H SF=1 lineitem, orders, and partsupp to the compression benc…
lwwmanning Nov 11, 2026
c3b7be8
Keep statpopgen's per-sample lists aligned when a sample drops fields…
mprammer Nov 12, 2026
bb1b744
build(java): run the Spark compat tests on Spark 4.3 (#11405)
jackylee-ch Nov 12, 2026
dcada48
feat(jni): let Java and Spark writers use the compact strategy (#11406)
jackylee-ch Nov 12, 2026
959f234
Fix Dict rewrites over unreferenced values (#11169)
blaginin Nov 12, 2026
3f55648
Try reduce_parent rules after execute_parent rewrites the current nod…
robert3005 Nov 12, 2026
2c57a4c
Benchmark case-folded string filters in PolarSignals (#11409)
asubiotto Nov 12, 2026
2428666
Execute lower and strpos inputs through execute_step (#11407)
asubiotto Nov 12, 2026
824c922
Propagate extension metadata errors when serializing scalars (#11397)
ump45nose Nov 12, 2026
ed564f6
Use checked arithmetic when decoding row-encoding options metadata (#…
ump45nose Nov 12, 2026
0734d99
Add TinyStories to string-bench (#11306)
robert3005 Nov 12, 2026
d77b8f7
Make #[array_slots] accessors borrow for the ArrayView lifetime (#11418)
robert3005 Nov 12, 2026
605e4dd
docs: write the Java quickstart guide (#11416)
robert3005 Nov 12, 2026
94babf7
Rename validity slots to validity_child instead of renaming their acc…
robert3005 Nov 12, 2026
df153c0
Reduce monomorphization in sequence and run-end take (#11102)
robert3005 Nov 12, 2026
d81bd4c
Compare primitive values through the shared RowFn executor (#10676)
connortsui20 Nov 12, 2026
9b88b67
Merge upstream develop into QC develop (2026-11-13)
ChristopherWirt Nov 13, 2026
69fa74f
fix(layout): restore segment future import in struct reader tests
ChristopherWirt Nov 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion benchmarks/compress-bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ ratios. Parquet provides the established reference for a compressed columnar rep

The suite covers NYC taxi data and several
[Public BI](https://github.com/cwida/public_bi_benchmark) tables (Arade, Bimbo,
CMSprovider, Euro2016, Food, HashTags), TPC-H `l_comment` variants, and synthetic nested
CMSprovider, Euro2016, Food, HashTags), TPC-H `l_comment` variants, the TPC-H `lineitem`,
`orders`, and `partsupp` tables at scale factor 1 (`TPC-H SF1 <table>`), and synthetic nested
data. This is the workload behind the `Compression` PR comment.

See [`src/main.rs`](./src/main.rs) for the dataset list and CLI flags (`--formats`,
Expand Down
2 changes: 2 additions & 0 deletions benchmarks/compress-bench/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ use vortex_bench::datasets::struct_list_of_ints::StructListOfInts;
use vortex_bench::datasets::taxi_data::TaxiData;
use vortex_bench::datasets::tpch_l_comment::TPCHLCommentCanonical;
use vortex_bench::datasets::tpch_l_comment::TPCHLCommentChunked;
use vortex_bench::datasets::tpch_sf1::TpchSf1Table;
use vortex_bench::display::DisplayFormat;
use vortex_bench::display::print_measurements_json;
use vortex_bench::display::render_table;
Expand Down Expand Up @@ -325,6 +326,7 @@ async fn run_compress(
&DownloadableDataset::AirQuality,
]
.into_iter()
.chain(TpchSf1Table::ALL.iter().map(|d| d as &dyn Dataset))
.chain(structlistofints.iter().map(|d| d as &dyn Dataset))
.chain(sparse_wide.iter().map(|d| d as &dyn Dataset))
.collect();
Expand Down
5 changes: 4 additions & 1 deletion benchmarks/string-bench/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,11 +78,14 @@ The current input catalog is:
| `news/headlines` | "A Million News Headlines" (ABC News), `headline_text` | 1.23M |
| `twitter/sentiment140` | Sentiment140 tweets, train split, `text` | 1.36M |
| `fineweb/text` | FineWeb `sample/10BT/001_00000.parquet`, `text` | first 10k |
| `tinystories/text` | TinyStories, train split, `text` | first 33,121 |

The Amazon, news, and tweet inputs are four of the five datasets the
[OnPair paper](https://arxiv.org/abs/2508.02280) evaluates on. The fifth,
OpenWebText URLs, has no public parquet mirror; ClickBench `URL` covers that
shape. FineWeb adds long web documents.
shape. FineWeb adds long web documents. TinyStories adds short
stories with a small vocabulary; 33,121 rows is one file of the NeMo Curator text IO
benchmark.

On first use, the selected ClickBench shard is downloaded through
`vortex-bench`'s shared idempotent downloader. TPC-H SF1 is generated
Expand Down
11 changes: 10 additions & 1 deletion benchmarks/string-bench/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,7 +359,8 @@ pub struct HfColumn {

/// The datasets the OnPair paper (Gargiulo & Venturini, "OnPair: Short Strings
/// Compression for Fast Random Access", arXiv:2508.02280) evaluates on, from
/// public parquet mirrors, plus a slice of FineWeb as long-document web text.
/// public parquet mirrors, plus a slice of FineWeb as long-document web text and
/// a slice of TinyStories as short-story text.
///
/// The paper's fifth dataset, OpenWebText URLs, has no parquet mirror; the
/// ClickBench `URL` column covers that shape.
Expand Down Expand Up @@ -401,6 +402,14 @@ pub const HF_COLUMNS: &[HfColumn] = &[
column: "text",
max_rows: Some(10_000),
},
// TinyStories story text: the first 33,121 stories (about 28 MiB), the
// size of one file that the NeMo Curator text IO benchmark writes.
HfColumn {
name: "tinystories/text",
url: "hf://datasets/roneneldan/TinyStories@37346026e81060382814d5a773f3c34799e118e7/default/train/0000.parquet",
column: "text",
max_rows: Some(33_121),
},
];

/// Reader for a remote parquet file, used only to fill the local input cache.
Expand Down
2 changes: 2 additions & 0 deletions docs/_ext/vortex_site_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ def _llms(app: Sphinx) -> str:
"",
"- [Benchmark summaries](https://bench.vortex.dev/llms.txt): every benchmark group's rankings and methods",
"- [Vortex homepage](https://vortex.dev/llms.txt): what Vortex is, how to install it, and its results",
"- [Questions and answers](https://vortex.dev/faq): how Vortex compares to Parquet and Lance, "
"who uses it, and how it is governed",
"",
"## Optional",
"",
Expand Down
1 change: 1 addition & 0 deletions docs/_theme/vortex/layout.html
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@
<img class="vx-footer-mark" src="{{ pathto('_static/lf_white.svg', 1) }}" width="1000" height="60" alt="The Linux Foundation" loading="lazy" />
<p class="vx-footer-text">Copyright © Vortex a Series of LF Projects, LLC. For web site terms of use, trademark policy and other project policies please see <a class="vx-link" href="https://lfprojects.org/policies">lfprojects.org/policies</a>. <span class="vx-footer-credit">Donated by <a class="vx-link" href="https://spiraldb.com">Spiral</a>.</span></p>
<nav class="vx-footer-nav" aria-label="{{ _('Project') }}">
<a class="vx-label-sm vx-nav-link" href="{{ site }}/faq">{{ _('FAQ') }}</a>
<a class="vx-label-sm vx-nav-link" href="{{ site }}/charter.pdf">{{ _('Charter') }}</a>
<a class="vx-label-sm vx-nav-link" href="https://lfprojects.org/policies/code-of-conduct/">{{ _('Code of conduct') }}</a>
<a class="vx-label-sm vx-nav-link" href="{{ github }}/blob/develop/SECURITY.md">{{ _('Security') }}</a>
Expand Down
11 changes: 7 additions & 4 deletions docs/api/java/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ The Vortex Java API provides bindings for the Vortex library, enabling Java appl
The API is split into two main components:

* **Vortex JNI**: Core JNI bindings for Vortex functionality
* **Vortex Spark**: Apache Spark integration for reading Vortex files
* **Vortex Spark**: Apache Spark integration for reading and writing Vortex files

.. raw:: html

Expand All @@ -21,7 +21,10 @@ The API is split into two main components:
Installation
------------

The Java API can be included in your project using Gradle or Maven. Please refer to the main documentation for detailed installation instructions.
The Java API can be included in your project using Gradle or Maven. See the
:doc:`Java quickstart </getting-started/java>` for the dependency setup and for examples that
write, read, filter, and project Vortex files, and the :doc:`Spark user guide </user-guide/spark>`
for the Spark connector.


Compatibility
Expand All @@ -36,7 +39,7 @@ The Java bindings are supported on the following architectures:

They support any Linux distribution with a GLIBC version >= 2.31. This includes

* Amazon Linux 2022 or newer
* Amazon Linux 2023 or newer
* Ubuntu 20.04 or newer


Expand All @@ -61,7 +64,7 @@ Here's a basic example of using the Vortex Java API to read a Vortex file:
Session session = Session.create();
DataSource source = DataSource.open(session, "path/to/file.vortex");

// A scan yields one partition per chunk of the file.
// A scan yields partitions; each partition is read as a stream of Arrow batches.
Scan scan = source.scan(ScanOptions.of());
while (scan.hasNext()) {
Partition partition = scan.next();
Expand Down
18 changes: 17 additions & 1 deletion docs/developer-guide/integrations/spark.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,11 @@

The `vortex-spark` connector is built on Spark's file-source DataSource V2 framework. Shared
sources compile into Spark 3.5/Scala 2.12, Spark 3.5/Scala 2.13, and Spark 4.0/Scala 2.13
artifacts; the Spark 4 artifact is also tested on Spark 4.1.
artifacts; the Spark 4 artifact is also tested on Spark 4.1, 4.2, and 4.3.

The connector uses the public `vortex-jni` API: `Session`, `DataSource`, `Scan`, and
`VortexWriter`, with the `NativeReadable` and `NativeWritable` I/O interfaces. The
[Java quickstart](../../getting-started/java.md) describes that API.

## File-source integration

Expand Down Expand Up @@ -30,6 +34,18 @@ connector sees the same schemes and credentials as Spark's file index and commit
Native arrays cross into Spark through the Arrow C Data Interface. Each partition reader owns its
native scan, Arrow allocator, and exported batches and closes them at task completion.

All readers and writers in a JVM share one native Vortex `Session`, held by
`VortexSparkSession`. The session lives for the lifetime of the JVM. The `vortex.session.provider`
option names a `VortexSessionProvider` class, so that the driver and the executors can use a
custom session.

## Writes

`VortexFileFormat` and `VortexWrite` give Spark a `VortexOutputWriterFactory`, which creates a
`VortexOutputWriter` for each file that Spark opens. Each writer converts its rows to Arrow batches and writes them to one Vortex file through
a `VortexWriter` over a `HadoopWritable`. Spark's commit protocol names the files, opens one
file for each partition directory that a task writes to, and commits or aborts the job.

## Pushdown and statistics

Schema inference merges every footer, so the dataset schema is the union of the top-level fields its
Expand Down
11 changes: 5 additions & 6 deletions docs/developer-guide/internals/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,11 @@ Language bindings expose Vortex to non-Rust environments.

Query engine integrations allow Vortex files to be queried through existing analytics engines.

| Crate / Directory | Engine | Notes |
|----------------------------------| ---------- |----------------------------------------------|
| `vortex-datafusion/` | DataFusion | `TableProvider` and `FileFormat` integration |
| `vortex-duckdb/` | DuckDB | Table function integration |
| `java/vortex-spark/` | Spark | Versioned Spark file-source connector via JNI |
| `java/vortex-trino/` | Trino | Trino connector (in development) |
| Crate / Directory | Engine | Notes |
|----------------------|------------|-----------------------------------------------|
| `vortex-datafusion/` | DataFusion | `TableProvider` and `FileFormat` integration |
| `vortex-duckdb/` | DuckDB | Table function integration |
| `java/vortex-spark/` | Spark | Versioned Spark file-source connector via JNI |

## Other Crates

Expand Down
18 changes: 9 additions & 9 deletions docs/developer-guide/language-bindings.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,13 +67,13 @@ layout plugins, and extension DTypes.

## Per-Language Status

| Language | Current Tier | Technology |
|---------------|--------------|------------|
| Rust | 3 | Native |
| Python | ~2 | PyO3 |
| C | ~1 | cbindgen |
| C++ | ~1 | C API |
| Java (JNI) | ~1 | JNI |
| Language | Current Tier | Technology |
|------------|--------------|------------|
| Rust | 3 | Native |
| Python | ~2 | PyO3 |
| C | ~1 | cbindgen |
| C++ | ~1 | C API |
| Java (JNI) | ~1 | JNI |

### Rust

Expand All @@ -98,5 +98,5 @@ inspection, compute execution, and stabilized error handling and memory ownershi
### Java (JNI)

Java JNI bindings provide Tier ~1 capabilities today (Arrow I/O and basic scan). JNI will remain
at Tier 1 for broad JDK compatibility. This is the current integration point for Spark and Trino
connectors.
at Tier 1 for broad JDK compatibility. This is the current integration point for the Spark
connector.
Loading
Loading