雪花任务可以触发python脚本吗?

时间:2021-07-09 14:34:51

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

从snowpipe到着陆区的数据加载完成后,我需要执行一系列动作,想让它自己运行。如果您在此处看到任何其他选项(如果不是任务),请提出建议。

1 个答案:

答案 0 :(得分:0)

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

Snowflake 支持 external functions,它可以调用云 API 并因此运行您能够通过支持的 API 公开的任何代码。

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

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

支持调用外部函数的平台 一般情况下,Snowflake 支持的任何云平台上的 Snowflake 账户都可以调用外部函数:

  • 亚马逊网络服务 (AWS)
  • 微软 Azure
  • Google 云平台 (GCP)

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

  1. 创建一个 AWS IAM 服务角色来执行所有 Lambda 功能
  2. 为我们的示例创建 AWS Lambda 函数
  3. 创建 AWS 将 Lambda 函数公开给 Snowflake 的 API 网关
  4. 创建一个 用于访问 API 网关并将其配置为访问的 AWS IAM 角色 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'
;

并使用复制历史记录的输出来调用您的外部函数。

external function 可以触发您可以在云提供商上编程的任何操作。这将是一个“无服务器”选项。

如果您在本地/云虚拟机上运行。您可以编写一个在气流/cron 中运行的 Python 脚本,用于处理您的复制历史并运行下一组操作。

Sample Output from Copy History