perf(query): skip Parquet row groups that bloom filters rule out - #204
Conversation
* New Features * Added `row_groups_pruned_bloom_filter` and `bloom_filter_read_errors` to the Iceberg scan in `EXPLAIN ANALYZE`; an unreadable bloom filter keeps its row group and is counted as a read error. * Performance * Improved Iceberg reads with `=` or `IN` filters on bloom filter columns (`trace_id`, `span_id`) by skipping row groups whose bloom filters prove the value absent, with unchanged query results. * Chores * Bumped the `iceberg` fork dependencies to a revision with bloom filter support.
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Advanced Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (8)
Included review availability: This review used your included allowance. Your plan provides up to 1 included review per hour; 0 remain after this review. WalkthroughThe Iceberg scan now enables bloom-filter row-group pruning and reports reader metrics through DataFusion. New unit and Flight SQL integration tests check metric transfer, query results, pruning counts, and read errors. ChangesIceberg bloom-filter scan
Priority: ⬇️ Low Estimated code review effort: 3 (Moderate) | ~25 minutes Change: Feature Sequence Diagram(s)sequenceDiagram
participant FlightSQLTest
participant IcebergScan
participant IcebergReader
participant DataFusionMetrics
FlightSQLTest->>IcebergScan: Run predicate query
IcebergScan->>IcebergReader: Read planned files with bloom-filter pruning
IcebergReader-->>IcebergScan: Return batches and ScanMetrics
IcebergScan->>DataFusionMetrics: Record output and bloom-filter counters
IcebergScan-->>FlightSQLTest: Return query results and EXPLAIN ANALYZE metrics
Suggested reviewers: Merge Risk: ⚪ Minimal · up to The changed scan preserves query behavior and has coverage for pruning and unreadable-filter fallback. It is ready to merge after normal checks. Security Architecture ReviewSecurity architecture risk: 🟡 Moderate · up to Bloom-filter pruning can affect which log rows a query sees. The available tests support correct results for the covered filters and show that an unreadable filter does not discard its row group. No security failure was established, but the reader dependency change leaves some data-visibility behavior unverified. Retained concerns Security review detailsSecurity Blast Radius
Trust Boundaries and Controls
Resilience and Maintainability Implications
Hardening Proposals
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
row_groups_pruned_bloom_filterandbloom_filter_read_errorsto the Iceberg scan inEXPLAIN ANALYZE; an unreadable bloom filter keeps its row group and is counted as a read error.=orINfilters on bloom filter columns (trace_id,span_id) by skipping row groups whose bloom filters prove the value absent, with unchanged query results.icebergfork dependencies to a revision with bloom filter support.Summary by CodeRabbit
IN, and combined trace/span ID conditions.