Search Shortcut cmd + k | ctrl + k

Accelerate multi-join queries with adaptive predicate transfer

Maintainer(s): YimingQiao

Compatibility Matrix

This table covers all DuckDB releases that have not reached end-of-life, including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.

Platform 1.4.4 1.4.5 1.5.5 1.5.6 2.0.0
Linux AMD64
Linux ARM64
macOS AMD64
macOS ARM64
Windows AMD64
Windows ARM64
WebAssembly

Installing and Loading

INSTALL bloom FROM community;
LOAD bloom;

Example

LOAD bloom;
SELECT current_setting('enable_bloom'); -- true

About bloom

Bloom is an optimizer extension for analytical queries that join multiple tables. It extends robust predicate transfer (RPT), combining sampling with execution feedback to reduce the data processed by joins. Loading Bloom enables the optimizer automatically; existing SQL and query results stay the same.

This release targets DuckDB v2.0.0. See the README for benchmarks and configuration and logging for usage details.

Added Functions

function_name function_type description comment examples
__internal_bloom_rpt_filter scalar NULL NULL  
bloom_preload_samples table NULL NULL  

Overloaded Functions

This extension does not add any function overloads.

Added Types

This extension does not add any types.

Added Settings

name description input_type scope aliases typed_value
bloom_excitation_mode Repeated-transfer information criterion: 'table_size' or exact 'join_key_ndv' equality domains VARCHAR GLOBAL [] table_size
bloom_excitation_threshold Re-excite below this fraction of the preceding cardinality DOUBLE GLOBAL [] 1.0
bloom_instant_access Native-storage instant access policy: 'scattered' (resident data) or 'block' (cold data) VARCHAR GLOBAL [] scattered
bloom_instant_access_points Stratified access points used by scattered instant sampling UBIGINT GLOBAL [] 256
bloom_instant_block_windows Block-aligned windows used by cold instant sampling UBIGINT GLOBAL [] 16
bloom_instant_parquet_row_groups Stratified Parquet row groups sampled per table UBIGINT GLOBAL [] 8
bloom_instant_rows_per_access Contiguous rows decoded at each scattered access point UBIGINT GLOBAL [] 32
bloom_instant_snapshot Use the active transaction snapshot for native instant samples instead of direct base-storage reads BOOLEAN GLOBAL [] false
bloom_late_materialize Experimental: materialize transfer keys and row IDs, then filter the original table scan BOOLEAN GLOBAL [] false
bloom_log_transfer_steps Log the transfer plan to stderr for debugging BOOLEAN GLOBAL [] false
bloom_memory_limit Maximum in-memory budget for optimizer-time Bloom work ('auto' uses 25% of available operator memory) VARCHAR GLOBAL [] auto
bloom_sample_cache_dir Prepared-sample cache directory ('auto' stores it beside the database) VARCHAR GLOBAL [] auto
bloom_sample_memory_cache Cache prepared samples in the process object cache to skip disk reloads across queries (advanced) BOOLEAN GLOBAL [] true
bloom_sample_mode Base-table sampling mode: 'prepared' or 'instant' VARCHAR GLOBAL [] prepared
bloom_sample_rate Chunk-sampling fraction for estimating cardinalities of already-materialized intermediate data DOUBLE GLOBAL [] 0.01
bloom_sample_seed Reproducible base-table sample seed UBIGINT GLOBAL [] 2
bloom_sample_size Target rows for prepared, block, and Parquet sampling UBIGINT GLOBAL [] 10000
enable_bloom Enable the Bloom optimizer BOOLEAN GLOBAL [] true
temp_directory Set the directory to which temporary files are written. VARCHAR GLOBAL [] post.db.tmp
© 2026 DuckDB Foundation, Amsterdam NL
DuckDB Home Code of Conduct Trademark Use Blog