从 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 复制到雪花,同时包含函数的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 从 Azure Blob 复制到 AWS S3

将dynamoDB表复制到另一个没有S3的aws帐户

将数据从 AWS S3 复制到 Aurora Postgres

AWS s3 同步从 s3 复制到 EMR 很慢

将文件从AWS S3复制到Azure存储存档层

从 AWS S3 复制到 Snowflake 需要比平时更多的时间