Snowflake - 安排 Script.sql- 包含多个指令(插入、删除、创建视图、创建 table 等)

Snowflake - Schedule a Script.sql- with multiple instructions (insert, delete, create view, create table, etc)

我来自制作一个 script.sql 来填充和创建数据库表。 (10000 行代码)

脚本很大,因为我必须应用一些逻辑才能填充一些表,所以所有的指令都是这样的(BY EXEMPLE):

也就是说,我的脚本由许多指令组成,当我在 WorkSheet 中 运行 时,一切正常。

我的问题是,如何将我所有的脚本逻辑放入一个任务中?在我开始考虑疯狂的选择之前有什么架构建议吗?

举例

--- 1 条声明 创建或替换 TABLE TEST.AFFAIRES.CLIENT .....;

--- 2 条语句 下降 TABLE TEST.AFF.CLIENT;

--- 3 条语句 创建或替换视图 TEST.AFF.PROVIDER .........;

--- 100 条语句等......

谢谢你的建议

您可以将它们写入存储过程,以便 运行 它们全部来自一个任务。如果您不想编写自己的存储过程,我写了一个将读取写入 table 和 运行 的 SQL 语句,一次一个。这样,您所要做的就是将语句存储在 table 中,并使用带编号的顺序列来告诉它顺序。它包括简单的变量替换。

我打算将它移到 Snowflake Labs(我写这篇文章时它还不存在),如果你有兴趣或者只是想看看它是如何工作的,你现在可以在这里抓住它来尝试一些东西类似:

https://github.com/GregPavlik/snowflake_script_runner

Greg 的回答是正确的:存储过程可以 运行 在一个任务中完成所有这些语句。

作为替代方案,您可以使用 Snowflake 的流和任务,您可以在其中使用单个 SQL 语句定义任务,但一旦此根任务完成,其他任务就会自动执行。这可以像您描述的那样启动一条链:

root_task -> create_task -> drop_task -> view_task

例如,3 个连接的任务:

create or replace task mytask_minute
  warehouse = test_small
  schedule = '1 MINUTE'
  when SYSTEM$STREAM_HAS_DATA('just_timestamps_stream')
as
delete from just_timestamps_stream_table;

create or replace task mytask_minute_child1
  warehouse = test_small
  after mytask_minute
as
insert into just_timestamps values(current_timestamp, 'child1');

create or replace task mytask_minute_child2
  warehouse = test_small
  after mytask_minute
as
insert into just_timestamps values(current_timestamp, 'child2');

完整示例在这里:

https://github.com/fhoffa/snowflake_snippets/blob/main/stream_and_tasks/minimal.sql