使用 Airflow PUT 命令将 S3 文件移动到 Snowflake 阶段

Posted

技术标签:

【中文标题】使用 Airflow PUT 命令将 S3 文件移动到 Snowflake 阶段【英文标题】:Move S3 files to Snowflake stage using Airflow PUT command 【发布时间】:2020-08-28 18:03:01 【问题描述】:

我正在尝试使用 Airflow 将文件从 S3 存储桶移动到 Snowflake 内部阶段(不是直接表)的解决方案,但当前的 Snowflake 运算符似乎不支持 PUT 命令。

我知道还有其他选项,例如 Snowpipe,但我想展示 Airflow 的功能。 COPY INTO 也是一种替代解决方案,但我想从文件中加载 DDL 语句,而不是在 Snowflake 中手动运行它们。

这是我能找到的最接近的,但它使用 COPY INTO 表:

https://artemiorimando.com/2019/05/01/data-engineering-using-python-airflow/

还有:How to call snowsql client from python

有没有办法通过Airflow+Python+Snowsql将文件从S3 bucket移动到Snowflake内部阶段?

谢谢!

【问题讨论】:

这是一个不寻常的请求。为什么您试图将文件从 S3 移动到内部阶段而不打算将它们加载到 Snowflake 中? @MikeWalton 我确实有这个意图,但我想分两步完成:1. 使用 PUT 将文件移动到舞台 2. 复制到我知道事情可以轻松完成,但这里的关键是展示气流编排。 【参考方案1】:

我建议您在 Airflow 中执行 COPY INTO 命令,直接从 S3 加载文件。没有一种很好的方法可以在不将文件跳转到另一台机器(如 Airflow 机器)的情况下将文件从 S3 获取到内部阶段。您将使用 SnowSQL 将 GET 从 S3 到本地,并将 PUT 从本地到 S3。对 Internal Stage 执行PUT 的唯一方法是通过 SnowSQL。

【讨论】:

感谢@MikeWalton,您是否还知道是否可以运行包含创建语句的 DDL?例如,而不是手动复制 webui 中的代码。 是的,您可以在 COPY INTO 语句之前从 python 连接器执行 CREATE TABLE 语句(在您的情况下通过 Airflow)。 迈克的回答是我也会做的。甚至还有一个由气流提供的 SnowflakeOperator,可让您轻松执行 COPY INTO 命令。

以上是关于使用 Airflow PUT 命令将 S3 文件移动到 Snowflake 阶段的主要内容,如果未能解决你的问题,请参考以下文章

将 RedShift 文件以 CSV 格式移至 S3

使用 Airflow 将数据从 Redshift 卸载到 S3

使用从 S3 事件调用的 AWS Lambda 触发 Airflow DAG

AWS S3权限 - put-bucket-acl出错

使用 HTTP PUT 将文件上传到 Amazon S3

尝试使用 PUT 将 PDF 作为 blob 上传到 S3 存储桶时被禁止 403