Repository navigation
Upgrade to DataFusion 55.1 and Arrow 59.3 - #14612
Merged
Merged
Conversation
Moves every fork to its DataFusion 55 line: arrow-rs 59.3.0, DataFusion 55.1.0, Ballista (upstream main on DataFusion 55), federation, table-providers, iceberg-rust 0.10.1, duckdb-rs 1.4.4 on arrow 59, ADBC 24, snowflake-rs, spark-connect-rs, spice-rs and spicebench on arrow 59. datafusion-functions-json comes from crates.io (0.55.6); delta-kernel stays on 0.27.1 with its default engine split into delta_kernel_default_engine. docs/dev/fork_patches.md is re-audited against the new lines; the pins stay marked TEMPORARY until the fork pull requests merge.
- Statistics flow through DataFusion 55's StatisticsContext. The deprecated partition_statistics returns Absent for built-in plans on 55, so every wrapper implements child_stats_requests / statistics_from_inputs and the optimizer rules, join sizing and Flight batch sizing read real statistics again. - ExecutionPlan / TableProvider wrappers implement the new required and defaulted methods explicitly (apply_expressions, replace_children, try_to_proto, merge_into, ...), forwarding where they wrap. - Arrow 59 refuses a MAP whose entries field is nullable: Flight SQL reads replace the declared schema before decoding and normalize the map afterwards, and legacy IPC maps decode as a list (arrow_tools map_entries). - Delta Lake refuses Void and interval columns with a structured error instead of mis-reading them. - Ballista 55: Vcores, the protocol-version handshake, task-id based cancellation and the append-only task-info model. - Vortex 0.86 and the remaining API moves (TableReference, TableScanBuilder, TableSchema builder, codec proto converter, WriteOp::MergeInto).
…tches The DataFusion 55 line of the fork is spiceai-55-patches.
… evaluates it DataFusion 55 (apache/datafusion#24239) makes regexp_count propagate NULL, as PostgreSQL does. The DuckDB rendering still wrapped the count in coalesce(.., 0) to match the old kernel, so a DuckDB-accelerated dataset answered 0 where local evaluation answers NULL, and a WHERE on the count kept rows local evaluation drops. Render it as len(regexp_extract_all(..)), which is NULL for a NULL input or pattern.
DataFusion 55 compares floats in SQL by IEEE 754 value, so float_val = 0.0 matches the -0.0 row too (4 rows, not 3). A MemTable in the same session returns the same rows, so this is the expectation, not Cayenne.
- Ballista 8bf37ad0: the executor poll loop accepts a vcore semaphore with no permits yet. Upstream's assert panicked the loop at startup, so no Spice executor registered and every cluster query failed. - DataFusion d98ae645 (MSRV-clean unparser), federation 9ca84a39, table-providers 661d16d1, iceberg 575d81a1: their own tests now run against the Spice DataFusion (and, for table-providers, ADBC) forks. - Guard tests for the unparser rescope, eager aggregation through StatisticsContext, SchemaCastScanExec statistics forwarding and Ballista TaskInfo fields 11/12; the ledger names them and records the Ballista fix. - The distributed EXPLAIN snapshot now reads Ballista 55's UnknownPartitioning(1) where it printed None.
The DataFusion 55 lines of arrow-rs, datafusion, datafusion-ballista, datafusion-federation, datafusion-table-providers, duckdb-rs, snowflake-rs and spark-connect-rs are reviewed on new spiceai-*-patches-2 branches, leaving the earlier spiceai-*-patches branches untouched. Same revisions; only the branch names in the pin comments, the fork-patch ledger and the table-providers pin check change.
Contributor
✅ Pull with Spice PassedPassing checks:
|
This was referenced Sep 30, 2026
lukekim
previously approved these changes
Oct 5, 2026
lukekim
enabled auto-merge
October 5, 2026 19:08
github-merge-queue
Bot
removed this pull request from the merge queue due to failed status checks
Oct 5, 2026
sgrebnov
approved these changes
Oct 5, 2026
2 tasks
This was referenced Oct 6, 2026
Merged
8 tasks done
This was referenced Oct 6, 2026
Glue: TPC-H queries fail with 'Parquet files are at least 8 bytes long, but file length is 0'
#14816
Closed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


📝 Summary
Upgrades Spice to DataFusion 55.1 and Arrow 59.3. Every forked dependency moves to its DataFusion 55 / Arrow 59 line, and each fork is pinned at the commit its PR merged into its version branch (fork PRs below).
StatisticsContext. On 55, the deprecatedpartition_statisticsreturns no statistics for built-in plans, so wrappers, optimizer rules, join sizing and Flight batch sizing are migrated to keep seeing real row counts.MAPwhoseentriesfield is declared nullable. Flight SQL reads repair the declared schema before decoding, via a new arrow-rs fork API, and legacy IPC data decodes the map as a list and restores it.regexp_countno longer coalesces NULL to 0, so accelerated and local evaluation agree under DataFusion 55's NULL-propagatingregexp_count.55.0.0-rc1): vcores, the protocol-version handshake, task-id based cancellation and the append-only task-info model.SUM(col)over an inner or outer join was answered from statistics with the whole input table's sum. DataFusion 55'sAggregateStatisticsread join statistics that carried the input sums through. Fixed in the DataFusion fork (fix(physical-plan): drop input sums from inner and outer join statistics datafusion#239).X'ff') was read as text, returning the wrong rows. Such filters now stay local.datafusion-spark55: trunk's collision table (Spark functions are registered over DataFusion built-ins via a deny-list: 7 live collisions, factorial unusable and concat silently Spark's #14361) decidespow/power,atan2andconcat_wsasKeep::BuiltIn, so each answers as it did on 54.hypot,monthname,quoteandweekdayare not registered, because they would be new SQL surface.repartition_file_min_sizefrom 10 MiB to 1 MiB (feat: lower repartition_file_min_size default from 10 MiB to 1 MiB apache/datafusion#22439), which split 1–10 MiB dimension tables intotarget_partitionsranges, each paying a Vortex footer open. The main scan now opts out below 10 MiB, as its internal scans already do below 256 MiB. Parquet listing scans keep the new default.🔗 Related
🚨 Breaking Changes
These come from DataFusion 55 semantics, not from new Spice behavior:
regexp_countreturns NULL for a NULL input or pattern (it returned 0), locally and on DuckDB acceleration.roundon an integer argument returns the integer type (it returnedFloat64); fix: Preserve integer values in round() for large Int64 and UInt64 inputs apache/datafusion#22697.=on floats compares by IEEE value, so-0.0 = 0.0is true.EXPLAINtext changes. For example, decimal literals print asDecimal128(123.45,10,2).TaskCancelInfodropspartition_id.👀 Notes for Reviewers
docs/dev/fork_patches.mdrecords every pin as landed. duckdb-rs is the one exception. Move duckdb-rs 1.4.4 to Arrow 59 duckdb-rs#49 was squash-merged, so it stays at8ee43073, the head of the protectedspiceai-1.4.4-patches-2branch. datafusion-table-providers pins exactly that revision, so the two move tospiceai-1.4.4together in a follow-up, which also brings duckdb-rs User friendly: restructure directory #50 and Get Brew PR ready #51.spiceai-54. No sqllogictest record returns different rows. The unit-test failures that remain are the onesspiceai-54already has: Spice patches changing plan or SQL text, and a backtrace-feature artifact.