snowflake-cloud-data-platform - 雪花任务可以触发 python 脚本吗?
问题描述
从雪管到着陆区的数据加载完成后,我需要执行一系列操作,并希望它自己运行。如果没有任务,请建议您是否在此处看到任何其他选项。
解决方案
可以,但不能直接。您可能想查看外部函数。
Snowflake 支持 可以调用云 API 的外部函数,因此可以运行您能够通过支持的 API 公开的任何代码。
超链接文章提供了创建外部函数的演练,您可以根据自己的需要进行调整:
此演练特定于 AWS,但有适用于 Azure 和 GCP 的选项
支持调用外部函数的平台 一般来说,可以在任何 Snowflake 支持的云平台上的 Snowflake 账户调用外部函数:
- 亚马逊网络服务 (AWS)
- 微软天青
- 谷歌云平台 (GCP)
您必须采取的确保适当安全性的步骤不适合此处:但总的来说,您执行以下操作:
- 创建 AWS IAM 服务角色以执行所有 Lambda 函数
- 为我们的示例创建 AWS Lambda 函数
- 创建 AWS API 网关以将 Lambda 函数公开给 Snowflake
- 创建 AWS IAM 角色以访问 API 网关并将其配置为访问 API 网关和 Snowflake API 集成对象
- 在 Snowflake 中创建和测试一些外部函数对象
示例代码
CREATE OR REPLACE external function external_functions.lambda.sum(filename varchar, rowcount number)
returns variant
api_integration = aws_lambda
as '<https://xxxxxxxxxx.execute-api.eu-west-2.amazonaws.com/snowflake-external-function-stage/snowflake-sum>'
如果您决定利用外部函数:
您可以创建一个运行存储过程的任务。
此存储过程可以从您的加载历史记录中读取:
SELECT
*
FROM
(
select * from table(information_schema.copy_history(table_name=>'abc.mytable', start_time=> dateadd(hours, -1, current_timestamp())))
) q
WHERE q.PIPE_NAME ilike 'mypipe'
;
并使用复制历史的输出来调用您的外部函数。
此外部函数可以触发您可以在云提供商上编程的任何操作。这将是一个“无服务器”选项。
如果您在本地/云虚拟机上运行。您可以编写一个在气流/cron 中运行的 python 脚本,该脚本处理您的复制历史并运行下一组操作。