Skip to content

chore: Update to arrow/parquet 60.1.0 - #26867

Merged
alamb merged 12 commits into
apache:mainfrom
alamb:alamb/arrow_60.1.0
Nov 1, 2026
Merged

alamb merged 12 commits into
apache:mainfrom
alamb:alamb/arrow_60.1.0

Conversation

@alamb

@alamb alamb commented Oct 28, 2026 •

Copy link
Copy Markdown
Contributor

Which issue does this PR close?

Rationale for this change

Update to the latest arrow/parquet release, 60.1.0. See the upstream CHANGELOG for details.

What changes are included in this PR?

  1. Update to arrow/parquet 60.1.0
  2. Adjust code for upstream API differences (see inline comments)
  3. Update test expectations for upstream behavior changes

What is the testing strategy for this PR?

Existing CI. This release candidate was also tested in #26543.

Are there any user-facing changes?

New dependency versions.


fn value_offsets(&self, row: usize) -> (i64, i64) {
let start = self.value_offset(row) as i64;
let start = self.value_offset_at(row) as 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.

// while spill_file_count remains 1 (since we're writing to the same file)
in_progress_file.append_batch(&batch1)?;
verify_metrics(&in_progress_file, 1, 440, 3)?;
verify_metrics(&in_progress_file, 1, 424, 3)?;

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.

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.

size is smaller 🎉

.map(|row| (input * rows_per_input + row) % dictionary_len),
);
take(&dictionary, &indices, None)
let taken = take(&dictionary, &indices, None)?;

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.

@alamb
alamb force-pushed the alamb/arrow_60.1.0 branch from ce310c5 to 5a12062 Compare October 29, 2026 16:42
@github-actions github-actions Bot added sqllogictest SQL Logic Tests (.slt) physical-plan Changes to the physical-plan crate labels Oct 29, 2026
## all. Every route into a named zone -- a column cast, `AT TIME ZONE`, a
## string literal, or `::timestamptz` under a session zone -- fails with an
## error, where PostgreSQL resolves the value.
## Casting a naive timestamp into a named zone resolves an ambiguous or

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.

01)ProjectionExec: expr=[count(Int64(1))@0 as count(*)], metrics=[<slt:ignore>]
02)--AggregateExec: mode=Single, gby=[], aggr=[count(Int64(1))], metrics=[<slt:ignore>]
03)----NestedLoopJoinExec: join_type=RightSemi, filter=threshold@0 > k@1, projection=[], metrics=[output_rows=128, <slt:ignore> spill_count=2, <slt:ignore> input_batches=8, input_rows=516, <slt:ignore>]
03)----NestedLoopJoinExec: join_type=RightSemi, filter=threshold@0 > k@1, projection=[], metrics=[output_rows=128, <slt:ignore> spill_count=2, <slt:ignore> input_batches=6, input_rows=387, <slt:ignore>]

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.

Due to

The right side is replayed once per left chunk. Spilled batches are now read back without validity buffers for null-free columns, so they take less memory and the build side fits in three chunks instead of four.

SELECT approx_distinct(c14) AS a, approx_distinct(c15) AS b, approx_distinct(arrow_cast(c15, 'Date64')), approx_distinct(arrow_cast(c15, 'Time32(Second)')) as c, approx_distinct(arrow_cast(c15, 'Time64(Nanosecond)')) AS d FROM aggregate_test_100
----
18 60 60 60 60
18 60 7 60 60

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.

Due to

Casting a Timestamp to Date64 now truncates to whole days (previously it kept the time of day), so only 7 distinct dates remain.

FROM (VALUES (arrow_cast(9223372036854775807, 'Timestamp(Second, None)')), (NULL)) AS t(ts)
----
NULL NULL NULL NULL
7 NULL NULL NULL

@alamb alamb Oct 29, 2026 •

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.

Due to

second is now computed directly from the stored value for timestamps without a timezone,

i64::MAX seconds yields 7 (i64::MAX % 60) instead of overflowing to NULL.

The sub-second parts still go through chrono and remain NULL. The nullability reproducer further down now uses millisecond so it still produces a NULL from a non-null input.

/// Arrays that each hold views into one shared dictionary buffer, as the
/// Parquet reader produces for a dictionary-encoded column, combined the
/// way a sort combines its input batches. Each output row cycles through
/// way a sort combines its input batches: the combined array lists the

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 test code

@alamb
alamb marked this pull request as ready for review October 29, 2026 17:33
/// Parquet reader produces for a dictionary-encoded column, combined the
/// way a sort combines its input batches. Each output row cycles through
/// Parquet reader produces for a dictionary-encoded column, combined with
/// `concat` as a sort combines its buffered batches. The rows cycle through

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.

interleave no longer duplicates the buffers

Comment thread datafusion-testing Resolved
@kumarUjjawal

Copy link
Copy Markdown
Contributor

@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Nov 1, 2026
@alamb

alamb commented Nov 1, 2026 •

Copy link
Copy Markdown
Contributor Author

@alamb
alamb added this pull request to the merge queue Nov 1, 2026
@alamb

alamb commented Nov 1, 2026

Copy link
Copy Markdown
Contributor Author

Ok,let's get this in

Merged via the queue into apache:main with commit 6a9a129 Nov 1, 2026
45 of 46 checks passed
@alamb
alamb deleted the alamb/arrow_60.1.0 branch November 1, 2026 13:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation physical-plan Changes to the physical-plan crate sqllogictest SQL Logic Tests (.slt) v56.0.0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants