首页 > 解决方案 > 雪花任务可以触发 python 脚本吗?

问题描述

从雪管到着陆区的数据加载完成后,我需要执行一系列操作,并希望它自己运行。如果没有任务,请建议您是否在此处看到任何其他选项。

标签: snowflake-cloud-data-platformsnowflake-schema

解决方案


可以,但不能直接。您可能想查看外部函数。

Snowflake 支持 可以调用云 API 的外部函数,因此可以运行您能够通过支持的 API 公开的任何代码。

超链接文章提供了创建外部函数的演练,您可以根据自己的需要进行调整:

此演练特定于 AWS,但有适用于 Azure 和 GCP 的选项

支持调用外部函数的平台 一般来说,可以在任何 Snowflake 支持的云平台上的 Snowflake 账户调用外部函数:

  • 亚马逊网络服务 (AWS)
  • 微软天青
  • 谷歌云平台 (GCP)

您必须采取的确保适当安全性的步骤不适合此处:但总的来说,您执行以下操作:

  1. 创建 AWS IAM 服务角色以执行所有 Lambda 函数
  2. 为我们的示例创建 AWS Lambda 函数
  3. 创建 AWS API 网关以将 Lambda 函数公开给 Snowflake
  4. 创建 AWS IAM 角色以访问 API 网关并将其配置为访问 API 网关和 Snowflake API 集成对象
  5. 在 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 脚本,该脚本处理您的复制历史并运行下一组操作。

复制历史的示例输出


推荐阅读