Skip to content

feat: DH-21493: pushdown support for sorted regions#7955

Open
lbooker42 wants to merge 49 commits intodeephaven:mainfrom
lbooker42:nightly/DH-21493-sorted-pushdown
Open

feat: DH-21493: pushdown support for sorted regions#7955
lbooker42 wants to merge 49 commits intodeephaven:mainfrom
lbooker42:nightly/DH-21493-sorted-pushdown

Conversation

@lbooker42
Copy link
Copy Markdown
Contributor

This adds support for match and range filters to push down into binary search over sorted regions.

…delegate to the ColumnRegion for predicate pushdown.
…nderneath Unioned table to activate Column Region optimizations.
lbooker42 added 16 commits April 7, 2026 09:58
…ation' into nightly/DH-21522-parquettablelocation

# Conflicts:
#	engine/table/src/main/java/io/deephaven/engine/table/impl/PushdownResult.java
…lumnSourceManager to store table definition instead of List<ColumnDefinition>
…ation' into nightly/DH-21493-sorted-pushdown

# Conflicts:
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/RegionedPushdownFilterLocationContext.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionByte.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionChar.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionDouble.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionFloat.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionInt.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionLong.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionObject.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionShort.java
# Conflicts:
#	engine/table/src/main/java/io/deephaven/engine/table/impl/BasePushdownFilterContext.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/BasePushdownFilterContextImpl.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/PushdownFilterMatcher.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/dataindex/DataIndexPushdownManager.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/locations/impl/AbstractTableLocation.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/UnionSourceManager.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegion.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionByte.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionChar.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionDouble.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionFloat.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionInt.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionLong.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionObject.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/ColumnRegionShort.java
#	engine/table/src/main/java/io/deephaven/engine/table/impl/sources/regioned/RegionedPushdownAction.java
#	engine/table/src/test/java/io/deephaven/engine/table/impl/TestPartitionAwareSourceTableNoMocks.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/location/ParquetTableLocation.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionByte.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionChar.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionDouble.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionFloat.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionInt.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionLong.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionObject.java
#	extensions/parquet/table/src/main/java/io/deephaven/parquet/table/region/ParquetColumnRegionShort.java
#	extensions/parquet/table/src/test/java/io/deephaven/parquet/table/ParquetTableFilterTest.java
#	extensions/parquet/table/src/test/java/io/deephaven/parquet/table/ParquetTableReadWriteTest.java
@lbooker42 lbooker42 self-assigned this Apr 27, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 27, 2026

No docs changes detected for d8abd52


executedFilterCost = 0;
// Extract the effective filter and use it for populating the context.
final WhereFilter effectiveFilter = WhereFilterDelegating.maybeUnwrapFilter(filter);
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.

This change is pretty significant, allowing wrapped/delegating filters to still be processed efficiently. Unfortunately, this means RowCapturingFilters row tracking is also often getting bypassed so a lot of tests had to be updated to show this.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

Copilot reviewed 39 out of 39 changed files in this pull request and generated 20 comments.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@lbooker42
Copy link
Copy Markdown
Contributor Author

An earlier PR (#7666) merged a change to the Page Stores that forces pushdown to the sub-regions of the store. This is good in many scenarios (e.g. dictionary) but not ideal for this scenario. It results in each sorted sub-region being searched even though they might have been skipped if we looked at the page store overall.

Do we need a hint (maybe in the RegionedPushDownAction.Region) about whether we should apply the pushdown to sub-regions or to the top-level page-store. This might be the only case and it might not matter too much. We might someday have sorted subregions as part of a unsorted page-store so might this is over-optimizing?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants