29 de abril de 2026

DuckDB httpfs pushdown para Parquet en S3

DuckDB puede empujar proyección de columnas y filtros hacia lecturas Parquet en S3, pero solo si las estadísticas del archivo son válidas.

Cuando lees archivos Parquet desde S3 con httpfs en DuckDB, DuckDB puede empujar la proyección de columnas y los filtros por row group directamente hacia HTTP range requests. Es decir: descarga solo los bytes que realmente necesita.

Mueve los controles de abajo y observa cómo las estadísticas, el tamaño de row-group, la selectividad y la proyección de columnas cambian cuántos datos cruzan realmente la red:

interactivo · simulador de pushdown

Estadísticas de columna en el footer
Full scan (todas las columnas, todos los row groups)100%
Bytes que DuckDB lee realmente2%

98% I/O ahorrado

Stats válidas → DuckDB salta row groups y lee solo las columnas seleccionadas. 98% menos de datos por la red.

El modelo asume que la columna del predicado está clustered. Row groups grandes hacen el skipping más grueso, así que grupos pequeños + stats válidas ganan.

INSTALL httpfs;
LOAD httpfs;
 
SET s3_region = 'eu-west-1';
 
-- Lee solo las columnas ts y value
-- Row groups con ts < '2026-01-01' se saltan completos si las estadísticas son válidas
SELECT ts, value
FROM read_parquet('s3://my-bucket/events/*.parquet')
WHERE ts >= '2026-01-01'
  AND value > 100
LIMIT 1000;

El matiz: el pushdown funciona bien solo si:

  1. El footer del archivo Parquet incluye column statistics
  2. El tamaño del row group es razonable; row groups enormes reducen mucho la eficiencia
  3. La columna usada en el predicado tiene algo de selectividad

Puedes comprobar las estadísticas así:

import pyarrow.parquet as pq
 
pf = pq.ParquetFile("events.parquet")
print(pf.metadata.row_group(0).column(0).statistics)
# => <pyarrow._parquet.Statistics object>
#    has_min_max: True, min: 2026-01-01, max: 2026-01-31

Si has_min_max == False, tu WHERE probablemente no evitará un full scan.

Discusión

¿Te resultó útil este post?

Inicia sesión para dar like y comentar.

Tu nombre y avatar del proveedor elegido se guardan en la base de datos propia del sitio para mostrar tu actividad.