0

我想在我的 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 似乎过于局限。

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

4

2 回答 2

0

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

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

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

于 2021-03-27T19:23:58.050 回答
0

如果您没有在设定的保留期内对数据进行任何处理,Snowflake Streams 只会变得陈旧。只要您有一个任务来处理流中的数据(更改记录),当它们出现时,您应该没问题。因此,如果您在 6 个月内没有看到流中出现更改,那么只要您在数据保留期内(例如 14 天)处理该更改记录就可以了。

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

于 2020-08-13T14:40:17.783 回答