如何使用duckdb和python从gcp存储桶读取多个parquet文件

问题描述 投票:0回答:1
  • Python版本:Python 3.12.3
  • duckdb 版本:“1.1.3”

我正在尝试让 duckdb 使用 glob 模式从存储桶目录中读取多个 parquet 文件。

我可以使用以下命令加载单个文件:

# works
duckdb.register_filesystem(filesystem("gcs"))
test_file = "gcs:///some_bucket/some_dir/some_file.parquet"
data = duckdb.sql(f"SELECT * FROM read_parquet('{test_file}')")

基于https://duckdb.org/docs/data/multiple_files/overview.html我希望能够使用以下内容,但它失败了:

# fail
duckdb.register_filesystem(filesystem("gcs"))
test_file = "gcs:///some_bucket/some_dir/*.parquet"
data = duckdb.sql(f"SELECT * FROM read_parquet('{test_file}')")

出现错误:

duckdb.duckdb.IOException: IO Error: No files found that match the pattern "gcs:///some_bucket/some_dir/*.parquet"

我知道有is一个 parquet 文件可以与该 glob 相匹配,基于初始(工作)版本,该版本明确指出了要查询的文件。

通过列表加载多个

注意,当我尝试以下操作时:

 a = "gs://some_bucket/some_dir/a.parquet"
 b = "gs://some_bucket/some_dir/b.parquet"
 data = duckdb.sql(f"SELECT * FROM read_parquet(['{a}', '{b}'], union_by_name=true)")

它有效,尽管我不确定这是否与我最初的问题相关。

python duckdb
1个回答
0
投票

httpfs 扩展的文档暗示仅 s3 支持 globbing。请参阅https://duckdb.org/docs/extensions/httpfs/overview.html

© www.soinside.com 2019 - 2024. All rights reserved.