Skip to content

Update to arrow-rs main (arrow 60 pre-release testing) - #24366

Draft
alamb wants to merge 2 commits into
apache:mainfrom
alamb:alamb/update_arrow_60
Draft

Update to arrow-rs main (arrow 60 pre-release testing)#24366
alamb wants to merge 2 commits into
apache:mainfrom
alamb:alamb/update_arrow_60

Conversation

@alamb

@alamb alamb commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Test DataFusion against the latest arrow-rs main ahead of the arrow 60.0.0 release, so we can find and fix any issues before the release is published.

What changes are included in this PR?

  • Pin all arrow/parquet crates to upstream arrow
  • Rename the arrow-flight flight-sql-experimental feature to flight-sql (renamed upstream)
  • Update object_store to 0.14.1 (required by parquet on arrow-rs main)

We will comment inline where upstream changes required updates.

Are these changes tested?

By CI

Are there any user-facing changes?

No

@github-actions github-actions Bot added sql SQL Planner logical-expr Logical plan and expressions physical-expr Changes to the physical-expr crates optimizer Optimizer rules core Core DataFusion crate sqllogictest SQL Logic Tests (.slt) catalog Related to the catalog crate common Related to common crate execution Related to the execution crate proto Related to proto crate functions Changes to functions implementation datasource Changes to the datasource crate ffi Changes to the ffi crate physical-plan Changes to the physical-plan crate labels Aug 14, 2026
@codecov-commenter

codecov-commenter commented Aug 14, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 80.68966% with 28 lines in your changes missing coverage. Please review.
✅ Project coverage is 81.18%. Comparing base (ec110ce) to head (70bd16a).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
datafusion/common/src/metadata.rs 67.74% 10 Missing ⚠️
datafusion/proto-common/src/from_proto/mod.rs 0.00% 4 Missing and 1 partial ⚠️
datafusion/common/src/dfschema.rs 50.00% 3 Missing ⚠️
datafusion/common/src/heap_size.rs 57.14% 2 Missing and 1 partial ⚠️
datafusion/datasource-arrow/src/file_format.rs 0.00% 2 Missing and 1 partial ⚠️
datafusion/datasource-arrow/src/source.rs 25.00% 2 Missing and 1 partial ⚠️
datafusion/sql/src/statement.rs 0.00% 0 Missing and 1 partial ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #24366      +/-   ##
==========================================
- Coverage   81.19%   81.18%   -0.02%     
==========================================
  Files        1110     1110              
  Lines      388618   388612       -6     
  Branches   388618   388612       -6     
==========================================
- Hits       315531   315487      -44     
- Misses      54507    54534      +27     
- Partials    18580    18591      +11     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

use arrow::{
array::AsArray,
datatypes::{DataType, Field},
datatypes::{DataType, Field, Metadata},

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread Cargo.toml
arrow-data = { version = "59.2.0", default-features = false }
arrow-flight = { version = "59.2.0", features = [
"flight-sql-experimental",
"flight-sql",

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The flight-sql-experimental feature was renamed to flight-sql and the old alias has now been removed:

Comment thread Cargo.toml
memchr = "2.8.1"
num-traits = { version = "0.2" }
object_store = { version = "0.13.2", default-features = false }
object_store = { version = "0.14.1", default-features = false }

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

parquet on arrow-rs main now requires object_store 0.14:

};
use arrow::ipc::{
convert::fb_to_schema,
convert::try_fb_to_schema,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fb_to_schema is deprecated in favor of the fallible try_fb_to_schema (same for the datasource-arrow changes):

where
T: ArrowPrimitiveType,
StandardUniform: Distribution<T::Native>,
T: ArrowPrimitiveType<Native = i64>,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Arrow 60 upgraded to rand 0.10, so bench_util's StandardUniform bounds can no longer be stated from DataFusion's rand 0.9:

Plan with Metrics
01)SortExec: TopK(fetch=1), expr=[b@1 DESC], preserve_partitioning=[false], filter=[b@1 IS NULL OR b@1 > bd], metrics=[output_rows=1, output_batches=1, row_replacements=1]
02)--DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/push_down_filter_parquet/topk_single_col.parquet]]}, projection=[a, b, c], file_type=parquet, predicate=DynamicFilter [ b@1 IS NULL OR b@1 > bd ], sort_order_for_reorder=[b@1 DESC], reverse_row_groups=true, dynamic_rg_pruning=eligible, pruning_predicate=b_null_count@0 > 0 OR b_null_count@0 != row_count@2 AND b_max@1 > bd, required_guarantees=[], metrics=[output_rows=4, output_batches=1, files_ranges_pruned_statistics=1 total → 1 matched, row_groups_pruned_statistics=1 total → 1 matched, row_groups_pruned_bloom_filter=1 total → 1 matched, page_index_pages_pruned=0 total → 0 matched, page_index_rows_pruned=0 total → 0 matched, limit_pruned_row_groups=0 total → 0 matched, batches_split=0, file_open_errors=0, file_scan_errors=0, files_opened=1, files_processed=1, num_predicate_creation_errors=0, predicate_evaluation_errors=0, pushdown_rows_matched=4, pushdown_rows_pruned=0, predicate_cache_inner_records=4, predicate_cache_records=4, scan_efficiency_ratio=21.62% (222/1.03 K)]
02)--DataSourceExec: file_groups={1 group: [[WORKSPACE_ROOT/datafusion/sqllogictest/test_files/scratch/push_down_filter_parquet/topk_single_col.parquet]]}, projection=[a, b, c], file_type=parquet, predicate=DynamicFilter [ b@1 IS NULL OR b@1 > bd ], sort_order_for_reorder=[b@1 DESC], reverse_row_groups=true, dynamic_rg_pruning=eligible, pruning_predicate=b_null_count@0 > 0 OR b_null_count@0 != row_count@2 AND b_max@1 > bd, required_guarantees=[], metrics=[output_rows=4, output_batches=1, files_ranges_pruned_statistics=1 total → 1 matched, row_groups_pruned_statistics=1 total → 1 matched, row_groups_pruned_bloom_filter=1 total → 1 matched, page_index_pages_pruned=0 total → 0 matched, page_index_rows_pruned=0 total → 0 matched, limit_pruned_row_groups=0 total → 0 matched, batches_split=0, file_open_errors=0, file_scan_errors=0, files_opened=1, files_processed=1, num_predicate_creation_errors=0, predicate_evaluation_errors=0, pushdown_rows_matched=4, pushdown_rows_pruned=0, predicate_cache_inner_records=4, predicate_cache_records=4, scan_efficiency_ratio=21.94% (222/1.01 K)]

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The scan_efficiency_ratio denominators shifted because the parquet files written by this test got ~15 bytes smaller: since apache/arrow-rs#9619 float/double statistics use IEEE 754 total order, which is not backwards compatible with old readers' signed comparison, so the writer no longer duplicates min/max into the deprecated Statistics min/max fields for floating point columns.

Verified by writing the same table with arrow 59.2 vs the pinned rev: 1027 bytes (footer thrift 686) vs 1012 bytes (footer thrift 668).

}

impl DFHeapSize for Metadata {
fn heap_size(&self, ctx: &mut DFHeapSizeCtx) -> usize {

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could be simpler with nicer upstream API. Filed a ticket to track:

.into_iter()
.collect(),
),
Field::new("with_metadata", DataType::UInt64, true)

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the new Metadata api is nicer to work with I think 😍

match &mut intersected {
None => {
intersected = Some(metadata.clone());
intersected = Some(

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+---------------------+-----------+-----------------+------+------+
| 212 | 0.parquet | 3642 | 0 | 2 |
| 212 | 1.parquet | 3642 | 1 | 2 |
| 216 | 0.parquet | 3620 | "0" | 2 |

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/// Note this is not a `HashMap` because `HashMap` does not provide
/// implementations for traits like `Debug` and `Hash`.
inner: Arc<BTreeMap<String, String>>,
inner: Metadata,

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed the inner field to be Metadata (as it is now the same representation after apache/arrow-rs#10075)

alamb and others added 2 commits August 14, 2026 13:00
Pin arrow/parquet crates to arrow-rs rev 901e69f913bb8a1738009218898959e8f4cd7ec8
via [patch.crates-io] until arrow 60.0.0 is released.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…tore 0.14, etc)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@alamb
alamb force-pushed the alamb/update_arrow_60 branch from fd4a74f to 70bd16a Compare August 14, 2026 17:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

catalog Related to the catalog crate common Related to common crate core Core DataFusion crate datasource Changes to the datasource crate execution Related to the execution crate ffi Changes to the ffi crate functions Changes to functions implementation logical-expr Logical plan and expressions optimizer Optimizer rules physical-expr Changes to the physical-expr crates physical-plan Changes to the physical-plan crate proto Related to proto crate sql SQL Planner sqllogictest SQL Logic Tests (.slt)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants