DuckDB 用于读取 s3 上的多个 parquet 文件

问题描述 投票:0回答:2

我正在尝试使用具有 HTTPFS 扩展的 DuckDB 从具有相似密钥的 s3 存储桶中查询大约 1000 个具有相同架构的 parquet 文件。

当我使用 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()

但是,当我使用文件通配符时,正如文档(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 权限问题,但我已经授予了对整个存储桶的列表和读取访问权限,所以据我所知,事实并非如此。

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

amazon-s3 parquet duckdb
2个回答
0
投票

以下是我们在 CI/CD 中运行的用于测试 S3 通配的测试。我没有发现您的语法有任何问题,所以也许这是某种配置或访问问题?

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


0
投票

我遇到了同样的问题。会话令牌对我有用。在查询中设置以下内容,而不是

key_id
和密钥。

SET s3_session_token='{aws_session_token}';
© www.soinside.com 2019 - 2024. All rights reserved.