雪花任务条件:当表中有数据时

时间:2020-08-13 13:34:46

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

我想在Snowflake任务中包含一个条件,以便仅在指定表中包含数据的情况下运行。这将类似于任务条件:

WHEN SYSTEM$STREAM_HAS_DATA('my_schema.my_table')

除了我不希望使用流。在某些情况下使用流的问题在于流可能会过时。我的ELT流程中有一些表,可能在几周或几个月内都没有收到更新。甚至可能是几年。

我曾经想到的是在任务条件下使用UDF:

WHEN PUBLIC.TABLE_HAS_DATA('my_schema.my_table')

如果我可以在其中扔一个SELECT CAST(COUNT(1) AS BOOLEAN) FROM "my_schema"."my_table",那就太好了。但是,SQL UDF不能使用作为参数传递的表名执行任何操作。而且,在查询表时,Javascript UDF似乎过于局限。

诚然,我不是Java语言程序员。我也不太熟悉Snowflake的Javascript UDF功能。我可以在JavaScript存储过程中执行所需的查询。但是,这些似乎并没有转化为UDF。

2 个答案:

答案 0 :(得分:0)

仅当您在设置的保留期内不对数据执行任何操作时,雪花流才应过时。只要您有一个任务来处理流中的数据(更改记录)在它们出现时就可以了。因此,如果您6个月内未在Stream中看到任何更改,那很好,只要您在数据保留期内(例如14天)处理该更改记录。

如果您的任务具有STREAM_HAS_DATA条件,并且流在14天内没有获取数据,则该流将过时,因为仅在查询流时才更新其偏移量。您可以通过消除条件并让任务更频繁地运行来解决此问题。

答案 1 :(得分:0)

SYSTEM$STREAM_HAS_DATA 适用于流 https://docs.snowflake.com/en/sql-reference/functions/system_stream_has_data.html

由于流可能会过时,我们可以检查(自 2021 年 1 月发布的 Snowflake 5.1.x 以来)stale_after 命令返回的 SHOW STREAMS 时间戳属性,以便我们可以及时重新创建即将过时的流。

此处提供了一种检索陈旧流的解决方案:Snowflake - How can I query the stream's metadata and save to table