1

我有一个指向公共文件的 S3 URL,类似于以下 URL 示例:s3://test-public/new/solution/file.csv (这不是实际链接。只是我正在使用的一个接近示例)

我可以在 python 脚本中使用s3fs模块读取文件,而无需放置任何 AWS 密钥 ID 或 AWS 密钥,如下所示:

with fs.open('test-public/new/solution/file.csv'):

但是,当我尝试从 S3 到 Snowflake 阶段或从Table -> Load table读取相同的文件时,Snowlake 报告缺少 AWS 密钥 ID 和 AWS 密钥,尽管这些字段是可选的

在此处输入图像描述

有没有一种方法可以在没有任何 AWS 凭证的情况下将 S3 中的公共文件读取到雪花表中(与 s3fs 一样)?

4

2 回答 2

1

STORAGE_INTEGRATIONCREDENTIALS仅当存储位置是私有的而不是公共存储桶时才需要。

确保您已正确定义存储桶策略。

{
    "Version": "2012-10-17",
    "Id": "Policy16361",
    "Statement": [
        {
            "Sid": "Pub Bucket Policy",
            "Effect": "Allow",
            "Principal": "*",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::pubucket",
                "arn:aws:s3:::pubucket/*"
            ]
        }
    ]
}

为 S3 存储桶定义上述策略后,您可以创建阶段或直接加载到表中:

--create stage, list files, view file content
create or replace stage my_s3_stage url='s3://pubucket/test.csv';
ls @my_s3_stage;
select $1 from @my_s3_stage;

--or even load directly from file
create or replace table mytable (cola varchar);
copy into mytable from 's3://pubucket/test.csv';
select * from mytable;
于 2021-11-05T18:07:34.107 回答
0

这种方法可以将 S3 中的数据导入雪花表:

COPY INTO SNOW_SCHEMA.table_name  FROM  's3://test-public/new/solution/file.csv'
于 2021-11-04T18:43:25.253 回答