amazon-s3 - 雪花:在 MERGE 或 COPY 命令(来自外部阶段)中,我可以指定只合并/复制最新的 csv 文件吗?
问题描述
现在,我们的 MERGE/COPY 命令指向一个 s3 文件夹。只要 S3 文件夹中有多个 csv 文件,Snowflake 就会引发“重复行”错误。我每天早上手动移动 s3 文件,以便 s3 文件夹中只有一个文件。如何告诉雪花只合并/复制文件夹中最新的 csv 文件?(注意:日期/时间是我们对这些 csv 文件的命名约定的一部分)
解决方案
假设您使用 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);
推荐阅读
- android - 即使在 Android 10 (API 29) 中卸载应用程序后,如何保持应用程序的存储数据仍然存在
- python - 如何在 R 中使用 Python 代码和包 reticulate 构建一个 lapply 样式的函数?
- java - 如何通过单击对话框[NOT DIALOG FRAGMENT](由fragment1调用)的按钮从fragment2替换fragment1
- java - 如何获取 javafx webview url
- python - 约瑟夫斯算法在Python中返回None的递归函数
- python - Django:'collections.OrderedDict'对象不可调用
- python - Python将鼠标点击发送到最小化的游戏窗口(DirectX)
- reactjs - 我可以在不安装 Node.js 的情况下在 Javascript 中使用 React 和 JSX 吗?
- asp.net-mvc - 如何使用应用程序洞察力跟踪每个用户的页面停留时间
- r - 将一个值与列中的下一个值进行比较