现在,我们的 MERGE/COPY 命令指向一个 s3 文件夹。只要 S3 文件夹中有多个 csv 文件,Snowflake 就会引发“重复行”错误。我每天早上手动移动 s3 文件,以便 s3 文件夹中只有一个文件。如何告诉雪花只合并/复制文件夹中最新的 csv 文件?(注意:日期/时间是我们对这些 csv 文件的命名约定的一部分)
问问题
1182 次
1 回答
0
假设您使用 Dell Boomi 执行您的 COPY INTO 命令,多个文件是在同一负载中进入您的 S3 存储桶还是增量加载?
如果它们正在增量加载,我会在您的 COPY INTO 语句中设置 PURGE = TRUE ,这样一旦文件被正确复制,它就会从您的 S3 存储桶中删除,并且当下一个文件进入时,复制到您的阶段表时不会发生冲突. PURGE = TRUE 要求您确保正确设置权限以允许 Snowflake 从您的 S3 中删除。
https://docs.snowflake.com/en/sql-reference/sql/copy-into-table.html#purging-files-after-loading
如果您想尝试变得非常聪明,也可以查询尝试执行以下操作:
COPY INTO YourTable
(
RAW_FILE_NAME
, RAW_FILE_ROW_NUMBER
, ColPK
, ColVal
, ColVal2
)
FROM (WITH CTE AS (SELECT ROW_NUMBER() OVER(ORDER BY metadata$filename DESC) AS rnk, metadata$filename, metadata$file_row_number, t.$1,t.$2,t.$3
FROM @YourStage/YourDirectory/
AS t) SELECT metadata$filename, metadata$file_row_number, $1,$2,$3 FROM CTE WHERE rnk = 1);
于 2020-07-17T19:31:00.040 回答