使用 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 阶段的主要内容,如果未能解决你的问题,请参考以下文章
使用 Airflow 将数据从 Redshift 卸载到 S3