Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
36d2785
Establish the high level API for sort pushdown and the optimizer rule…
zhuqi-lucas Dec 3, 2025
85bfd74
fix
zhuqi-lucas Dec 3, 2025
df4f042
Add topk test
zhuqi-lucas Dec 3, 2025
b9b889d
fix format for tree
zhuqi-lucas Dec 3, 2025
595f159
Update datafusion/execution/src/config.rs
zhuqi-lucas Dec 4, 2025
84e4d70
Update datafusion/proto/src/logical_plan/file_formats.rs
zhuqi-lucas Dec 4, 2025
dcfa3a6
Update datafusion/proto-common/src/to_proto/mod.rs
zhuqi-lucas Dec 4, 2025
235dcdb
Update datafusion/proto-common/src/from_proto/mod.rs
zhuqi-lucas Dec 4, 2025
0fe1d77
Update datafusion/common/src/config.rs
zhuqi-lucas Dec 4, 2025
6be3d74
Update datafusion/proto/src/logical_plan/file_formats.rs
zhuqi-lucas Dec 4, 2025
068151a
Address comments and add row selection support
zhuqi-lucas Dec 4, 2025
982451c
Merge remote-tracking branch 'upstream/main' into issue_19059
zhuqi-lucas Dec 4, 2025
0c7900d
fix
zhuqi-lucas Dec 4, 2025
9fddf57
fix
zhuqi-lucas Dec 4, 2025
2a972d9
Merge upstream/main into issue_19059
adriangb Dec 11, 2025
2dff981
rework APIs and optimizer rule
adriangb Dec 11, 2025
eb39e54
Address comments
zhuqi-lucas Dec 12, 2025
1a01cce
Merge branch 'main' into issue_19059
zhuqi-lucas Dec 12, 2025
e3c1735
Add more than one partition case
zhuqi-lucas Dec 12, 2025
d4b6e22
Address new comments
zhuqi-lucas Dec 14, 2025
270ba1c
Merge branch 'main' into issue_19059
zhuqi-lucas Dec 14, 2025
9f0b21a
fix docs
zhuqi-lucas Dec 14, 2025
3b51690
Merge remote-tracking branch 'upstream/main' into issue_19059
zhuqi-lucas Dec 15, 2025
2eabfa0
Add todo issue
zhuqi-lucas Dec 15, 2025
a8d55bd
make datasource to use try_reverse_output
zhuqi-lucas Dec 15, 2025
5145c05
factor function
zhuqi-lucas Dec 15, 2025
8266d60
fix doc
zhuqi-lucas Dec 15, 2025
87d091e
Change parquet option to optimizer option
zhuqi-lucas Dec 15, 2025
369eef1
Merge branch 'main' into issue_19059
zhuqi-lucas Dec 15, 2025
6f69094
introduce PreparedAccessPlan to make code clear
zhuqi-lucas Dec 15, 2025
1e3d07c
fix comments
zhuqi-lucas Dec 16, 2025
bb0ef19
Merge branch 'main' into issue_19059
zhuqi-lucas Dec 16, 2025
43a2280
Merge branch 'main' into issue_19059
zhuqi-lucas Dec 17, 2025
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
17 changes: 17 additions & 0 deletions datafusion/common/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -831,6 +831,23 @@ config_namespace! {
/// writing out already in-memory data, such as from a cached
/// data frame.
pub maximum_buffered_record_batches_per_stream: usize, default = 2

/// Enable sort pushdown optimization for Parquet files.
Comment thread
zhuqi-lucas marked this conversation as resolved.
Outdated
///
/// When enabled, optimizes queries with ORDER BY:
/// - Reordering files based on statistics
/// - Reversing row group read order when beneficial
///
/// Returns **inexact ordering**: Sort operator is kept for correctness,
/// but can terminate early for TopK queries (ORDER BY ... LIMIT N),
/// providing huge speedup.
///
/// Memory: No additional overhead (only changes read order).
///
/// Future TODO: Will add option to support detect perfectly sorted data and eliminate Sort completely.
///
/// Default: true
pub enable_sort_pushdown: bool, default = true
Comment thread
zhuqi-lucas marked this conversation as resolved.
Outdated
}
}

Expand Down
3 changes: 3 additions & 0 deletions datafusion/common/src/file_options/parquet_writer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,7 @@ impl ParquetOptions {
coerce_int96: _, // not used for writer props
skip_arrow_metadata: _,
max_predicate_cache_size: _,
enable_sort_pushdown: _,
} = self;

let mut builder = WriterProperties::builder()
Expand Down Expand Up @@ -472,6 +473,7 @@ mod tests {
skip_arrow_metadata: defaults.skip_arrow_metadata,
coerce_int96: None,
max_predicate_cache_size: defaults.max_predicate_cache_size,
enable_sort_pushdown: true,
}
}

Expand Down Expand Up @@ -585,6 +587,7 @@ mod tests {
binary_as_string: global_options_defaults.binary_as_string,
skip_arrow_metadata: global_options_defaults.skip_arrow_metadata,
coerce_int96: None,
enable_sort_pushdown: true,
},
column_specific_options,
key_value_metadata,
Expand Down
1 change: 1 addition & 0 deletions datafusion/core/tests/physical_optimizer/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ mod limit_pushdown;
mod limited_distinct_aggregation;
mod partition_statistics;
mod projection_pushdown;
mod pushdown_sort;
mod replace_with_order_preserving_variants;
mod sanity_checker;
#[expect(clippy::needless_pass_by_value)]
Expand Down
Loading
Loading