用于在s3上读取多个镶木地板文件的DuckDB



我正在尝试使用带有HTTPFS扩展名的DuckDB,从具有类似密钥的s3 bucket中查询大约1000个具有相同模式的镶木地板文件。

当我用duckdb查询单个文件时,我可以获得表

import duckdb
import pandas as pd
cursor = duckdb.connect()
df = cursor.execute(f"""
INSTALL httpfs;
LOAD httpfs;
SET s3_region='{s3_region}';
SET s3_access_key_id='{access_key_id}';
SET s3_secret_access_key='{secret_access_key}';

SELECT *
FROM parquet_scan(['s3:://bucket/folder/fname.parquet'],
FILENAME = 1);
""").df()

但是,当我使用文件globbing时,正如文档所解释的那样(https://duckdb.org/docs/extensions/httpfs),我得到一个duckdb.Error: Invalid Error: HTTP GET error,它是一个HTTP 403(拒绝访问(。

SELECT *
FROM parquet_scan(['s3:://bucket/folder/*.parquet'],
FILENAME = 1);

我以为这只是AWS IAM权限问题,但我已经授予了对整个bucket的列表和读取访问权限,所以据我所知,事实并非如此。

导致此错误的原因是什么?

以下是我们在CI/CD中运行的测试S3 globbing。我看不出你的语法有任何问题,所以可能是某种配置或访问问题?

https://github.com/duckdb/duckdb/blob/4a24d71edecc7c0018eb3860d2e104cfe90462b6/test/sql/copy/parquet/parquet_glob_s3.test

相关内容

最新更新