我正在尝试让 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)")
它有效,尽管我不确定这是否与我最初的问题相关。
httpfs 扩展的文档暗示仅 s3 支持 globbing。请参阅https://duckdb.org/docs/extensions/httpfs/overview.html