从 AWS S3 复制到雪花,同时包含函数
Posted
技术标签:
【中文标题】从 AWS S3 复制到雪花,同时包含函数【英文标题】:Snowflake COPY INTO from AWS S3 while including functions 【发布时间】:2020-04-16 13:56:18 【问题描述】:我正在考虑一些方法来做到这一点,但想了解一些有关有效选项的意见。这里的问题是这样的。我需要使用 COPY INTO 对我为快照设置的数据库执行一些 ETL 操作。这被定义为过去的一天。这里的阶段是一个 AWS S3 存储桶。要捕获最新的文件,我需要在 from 语句或模式中实现文件路径。
CREATE OR REPLACE TASK ETL_1
WAREHOUSE = W1
SCHEDULE = 'USING CRON 30 */4 * * * America/Los_Angeles'
AS
copy into DB.SCHEMA.TABLE1
from @STAGE/TABLE1
pattern='.*/.*/.*[.]csv'
on_error = 'continue'
file_format = csv_etl;
使用这样的东西我得到了我需要的文件路径
CREATE OR REPLACE FUNCTION CURRENT_DATE_FILEPATH()
returns string
as
as REPLACE(CURRENT_DATE(), '-', '/')
;
这将返回像“2020/04/15”这样的日期格式,然后我想以某种方式在舞台格式中使用它 像@STAGE/TABLE1/2020/04/15/*
有没有办法将它包含在我的 copy into statement 中?
我当然可以在使用 Snowflake 的 javascript 功能的过程中执行此操作,但除非我为每个过程创建一个任务,否则我将失去能够监控加载到每个表中的数据的粒度。
因为它确实只需要一个程序循环遍历我的表来执行此操作。但这些表每天都可能相当庞大。
这是最好的方法吗?
【问题讨论】:
不是您想要的答案,但我们通过我们自己的 ELT(我们加载到 SF,然后在 SF 中加载 T)工具有效地完成了您的要求。因此它知道已经加载了哪些数据,并且加载了几天直到它到达今天(UTC),然后完成了几个小时。我们必须在存储过程和任务之前走这条路,但实际上这些似乎在调试/进程的监控/统计,我们在 AWS 中运行的编排应用程序的负载并不重,所以坐在其他应用程序旁边.. 所以有效的零成本.. 不错的主意!我确实为此用 Javascript 编写了一个大型程序,当我有它可以展示时我会发布它。 【参考方案1】:我最终只是把它变成了一个庞大的 JavaScript 程序。不理想,但我有足够的错误处理,它似乎可以按我的预期工作。
【讨论】:
以上是关于从 AWS S3 复制到雪花,同时包含函数的主要内容,如果未能解决你的问题,请参考以下文章