【发布时间】: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