Skip to content
Opensource internals
  • Posts

Datafusion

Cooperative Budgets: How DataFusion Stops One Operator From Starving the Whole Runtime

Oct 21, 2026 14 min read Jay Hubbert

Every batch costs one unit of Tokio task budget. Operators yield when the budget runs out, exchanges gate their channels, and blocking IO goes to spawn_blocking.

DatafusionMemoryPerformanceInternals

Read more →

The Perfect Hash Join: Turning a Hash Table Into a Plain Array When the Keys Are Dense Integers

Oct 21, 2026 9 min read Jay Hubbert

DataFusion’s perfect hash join replaces the build side’s hash table with a flat array indexed by the key value, turning the probe into one array load with no hashing at all.

DatafusionJoinsPerfect hash joinPerformanceInternals

Read more →

How DataFusion Turns a Hash Join's Build Side into a Filter the Probe Side Can Execute

Oct 21, 2026 9 min read Jay Hubbert

A DataFusion hash join publishes its build side as a dynamic filter: a small build becomes an IN list, a large build becomes a hash-table membership test, and every build …

DatafusionJoinsDynamic filtersPerformanceInternals

Read more →

DataFusion's Interval Analysis: How `BETWEEN` Becomes a Scalar Range and a Selectivity Number

Oct 21, 2026 12 min read Jay Hubbert

DataFusion desugars BETWEEN into two comparisons, propagates the implied range through an interval DAG, and estimates selectivity from the ratio of interval cardinalities.

DatafusionPlanningPerformanceInternals

Read more →

From SQL WHERE to Parquet Row Filter: How DataFusion Decides What It Can Push Down (and What It Must Keep)

Oct 21, 2026 9 min read Jay Hubbert

A SQL predicate is not one thing to DataFusion: it is simultaneously a candidate for statistics pruning and a candidate for decoder-level evaluation, and each has its own support …

DatafusionParquetPerformanceInternals

Read more →

← Newer Page 2 of 15 Older →

© 2026 Jay Hubbert · Built with Hugo 0.168.0

RSS ·