【问题标题】:Unloading Snowflake data to S3 Location directly with Canned ACL使用预制 ACL 直接将雪花数据卸载到 S3 位置
【发布时间】:2020-05-09 17:34:15
【问题描述】:

我正在尝试将 Snowflake 中特定查询的结果直接卸载到 S3 位置。

copy into 's3://bucket-name/folder/text.csv' 
from <Some SQL Query>
file_format = (type = CSV file_extension = '.csv' field_optionally_enclosed_by = NONE empty_field_as_null = false) 
max_file_size = 5000000000 
storage_integration = aws 
single = true;

这个问题是在写入成功后,bucket owner 无法从 S3 读取新文件,因为 ACL。 那么,如何在从 Snowflake 写入 S3 时添加“Bucket-Owner-Full-Control”的预设 ACL?而且我对 Google Cloud Storage 不太了解,GCS 存储桶中的场景会是什么??

【问题讨论】:

  • 有点猜想,但是:当您运行copy into &lt;location&gt; 命令时,您必须指定要使用的用户/存储集成。文件将以该用户身份卸载,这可能是导致权限问题的原因。
  • @SimonD 是的,这就是问题所在。 Snowflake 使用专门为一个特定 Snowflake 账户创建的 AWS 用户(在他们的 AWS 账户中),我们将其作为可信实体添加到我们为 Snowflake 用户创建的角色中以承担。因此,在写入该位置时应该有一些配置来指定 ACL。我们可以为此目的使用 Canned ACL,但不确定如何使用雪花。docs.snowflake.net/manuals/user-guide/…
  • 我认为 Snowflake 使用了您在您使用的凭据/存储集成对象中指定的用户,而不是他们自己的?
  • @SimonD 是的,但无论使用哪种凭据,如果没有标准 ACL,存储桶所有者仍然没有足够的权限访问对象。存储桶所有者可能与写入存储桶的实体不同。
  • 您是否尝试过在舞台设置中使用身份验证信息将 s3 位置创建为舞台?

标签: amazon-web-services amazon-s3 snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

您可能无法将预设 ACL 添加到 COPY INTO 语句,但您可以将所需的参数添加到存储集成。

当您创建存储集成或必须对其进行更新时,请将其添加到声明中。 STORAGE_AWS_OBJECT_ACL = 'bucket-owner-full-control'

这应该确保您从 Snowflake 卸载到存储桶的任何数据都将让存储桶所有者完全控制该对象。

https://docs.snowflake.com/en/user-guide/data-unload-s3.html#configuring-support-for-amazon-s3-access-control-lists-optional

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-21
    • 2021-12-24
    • 2020-11-13
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-10
    相关资源
    最近更新 更多