Skip to content
Opensource internals
  • Posts

Posts

All posts published on this site.

Everything published here, newest first.

DataFusion's Branchless IN Filter: Why x IN (10, 20, 30) Is Faster Than Building a Hash Table

Oct 21, 2026 12 min read Jay Hubbert

DataFusion’s IN-list evaluation picks a filter by list size and type: a branchless comparison chain for short lists, a bitmap for narrow types, a hash set for wide ones.

DatafusionArrowSimdPerformanceInternals

Read more →

Once Per Batch: How DataFusion's ColumnarValue API Killed the Per-Row UDF Call

Oct 21, 2026 11 min read Jay Hubbert

Scalar UDFs receive whole Arrow arrays per batch, not one ScalarValue per row — ColumnarValue is the currency that makes that possible.

DatafusionFunctionsPerformanceInternals

Read more →

Top K per Partition: How DataFusion Replaces a Full Sort with N Small Heaps

Oct 21, 2026 8 min read Jay Hubbert

DataFusion’s PartitionedTopK keeps one bounded heap per partition key, sharing a single row converter, memory reservation and row store, so a per-partition top-k costs O(N) instead …

DatafusionWindow functionsTopkPerformanceInternals

Read more →

Late Materialization in DataFusion's Parquet Reader: Decode the Filter Columns First, Then the Rest

Oct 21, 2026 9 min read Jay Hubbert

DataFusion pushes row filters into the Parquet decoder itself: the filter’s columns are decoded first, the surviving rows are known before the wide columns are touched, and …

DatafusionParquetPerformanceInternals

Read more →

How DataFusion Knows the Optimizer Has Stopped Improving: A Hash, a Node Count, and a Set of Previous Plans

Oct 21, 2026 7 min read Jay Hubbert

DataFusion’s optimizer detects that it has reached a fixed point by hashing each pass’s plan into a signature of node count plus content hash and checking a set of previous …

DatafusionOptimizerRustPerformanceInternals

Read more →

← Newer Page 39 of 83 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·