You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DuckDB针对S3中Parquet文件的谓词下推及分区查询问题

DuckDB在S3上查询Parquet的两个问题解答

1. 非分区Parquet文件的谓词下推支持

DuckDB在S3场景下完全支持Parquet的谓词下推,不会把整个文件读入内存再过滤。

Parquet文件的元数据中会存储行组的列统计信息(比如每个行组内colA、colB的最小值、最大值),DuckDB查询时会先读取这些元数据(无需下载整个文件),再根据colA=1 and colB=2的过滤条件,跳过那些统计信息显示不可能包含目标数据的行组,只下载和读取满足条件的行组内容。这和本地文件系统的行为完全一致,核心依赖Parquet的元数据特性,以及DuckDB对S3对象存储的高效访问实现。

2. 分区Parquet文件夹的分区裁剪支持

DuckDB在S3上同样支持分区自动裁剪,逻辑和本地场景一致。

如果你的Parquet文件采用Hive风格分区存储(比如路径为s3://bucket/data/colA=1/colB=2/file.parquet),DuckDB会自动识别分区列和对应的分区值。执行类似select * from read_parquet('s3://bucket/data/**/*.parquet') where colA=1 and colB=2的查询时,它会直接定位到colA=1和colB=2对应的分区路径,只扫描该路径下的Parquet文件,不会遍历其他无关分区的内容。

代码参考

如果访问的是非公开S3桶,可先配置访问凭证再执行查询:

-- 配置S3访问凭证(按需设置)
SET s3_access_key_id='your-access-key';
SET s3_secret_access_key='your-secret-key';

-- 查询非分区Parquet文件
SELECT * FROM read_parquet('s3://your-bucket/non-partitioned/file.parquet') WHERE colA=1 AND colB=2;

-- 查询分区Parquet文件夹(用glob匹配所有子文件)
SELECT * FROM read_parquet('s3://your-bucket/partitioned-data/**/*.parquet') WHERE colA=1 AND colB=2;

内容的提问来源于stack exchange,提问作者Srinivas K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:47:14