【问题标题】:Snowflake S3 Stage/External table and S3 versioning duplicates雪花 S3 阶段/外部表和 S3 版本控制重复
【发布时间】:2021-02-14 18:36:44
【问题描述】:

我想使用 AWS S3 作为外部存储,并使用 Snowflake 外部表来查询数据。 为了不丢失/覆盖任何数据,我在 S3 存储桶上启用了versioning。当一个文件存在多个版本时,它们将在 Snowflake 中显示为重复,我可以找到一个选项将它们从外部阶段/外部表中隐藏。

LIST @my_stage; -- shows duplicate files

SELECT $1, $2, $3 FROM @my_stage; -- returns duplicate records

CREATE OR REPLACE EXTERNAL TABLE my_external_table (
    Name STRING AS (value:c1::STRING),
)
with location = @my_stage;
SELECT * FROM my_external_table; -- shows duplicate records

SELECT DISTINCT row1, row2, row3 from my_external_table; -- manually hide duplicates

有没有什么方法可以只从文件的最新版本中选择行而不需要使用DISTINCT? 提前致谢

【问题讨论】:

  • 我不太了解 S3 版本控制,但是您是否能够通过文件名引用文件的每个版本,或者您是否必须利用文件名 + 文件 ID 来获取特定文件?我问的原因是因为您可以创建一个存储过程,从外部表的元数据中删除旧文件版本,如果您可以通过文件名直接引用它们。
  • 事实证明,S3 上确实存在重复文件,因为其中一些文件的名称中有一个额外的空格,这很难发现:stackoverflow.com/questions/66198840/…
  • 啊,有道理。我不认为 Snowflake 可以引用旧版本的文件,但不确定。很高兴知道。

标签: amazon-s3 snowflake-cloud-data-platform external-tables


【解决方案1】:

我发现在 S3 上确实存在重复文件,它们的名称完全相同,只是文件名末尾附加了一个空格。我无法在 AWS 控制台或通过 AWS S3 CLI 中轻松看到这一点,但此命令显示了带有 " 的文件名:

aws s3api list-objects --bucket my_bucket

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2021-04-02
    • 1970-01-01
    • 2021-04-11
    • 2021-02-27
    相关资源
    最近更新 更多