在Python中使用DuckDB查询指定的目标Parquet文件
在DuckDB中精准读取指定Parquet文件列表的方法
你可以通过以下两种实用方式,让DuckDB直接读取你在Python中筛选好的文件列表,避免通配符读取多余文件的开销:
方法1:参数化查询(推荐,安全且简洁)
DuckDB的Python API支持直接将文件列表作为参数传入read_parquet函数,无需手动拼接字符串:
import duckdb # 假设你已筛选完成的目标文件列表 filenames = [ "/db/2024/table2024-04-28.parquet", "/db/2024/table2024-04-29.parquet", "/db/2024/table2024-04-30.parquet", "/db/2024/table2024-05-01.parquet", "/db/2024/table2024-05-02.parquet", "/db/2024/table2024-05-03.parquet", "/db/2024/table2024-05-04.parquet" ] # 连接DuckDB并执行精准查询 con = duckdb.connect() count_result = con.execute(""" SELECT count(*) as count FROM read_parquet(?) """, [filenames]).fetchone() print(f"统计结果:{count_result[0]}") con.close()
方法2:手动拼接文件路径字符串(简单场景适用)
如果偏好直接拼接SQL语句,可以将文件列表转换为DuckDB可识别的数组格式字符串:
import duckdb filenames = [ "/db/2024/table2024-04-28.parquet", # ... 其余目标文件 ] # 将列表转为SQL数组格式的字符串 file_path_str = ", ".join([f"'{path}'" for path in filenames]) con = duckdb.connect() count_result = con.execute(f""" SELECT count(*) as count FROM read_parquet([{file_path_str}]) """).fetchone() print(f"统计结果:{count_result[0]}") con.close()
注意:如果文件路径中包含单引号等特殊字符,需要先对字符进行转义,否则会导致SQL语法错误,因此更推荐使用参数化查询的方式。
内容的提问来源于stack exchange,提问作者Wai Yip Tung
相关产品推荐
相关产品推荐

