如何解决 Snowflake 中仅针对任务运行出现的 Stream Not Found 错误?
Posted
技术标签:
【中文标题】如何解决 Snowflake 中仅针对任务运行出现的 Stream Not Found 错误?【英文标题】:How do I resolve a Stream Not Found error in Snowflake that only appears for Task Runs? 【发布时间】:2021-04-07 17:03:47 【问题描述】:当任务正在执行使用流的查询时,我收到错误消息。错误仅在通过任务执行查询时出现。
在查询information_schema.task_history
时,我可以看到任务状态为FAILED
,错误代码为091111
。我无法找到任何有关错误代码的文档,所以我主要依靠错误消息
Stream my_stream not found.
创建流时将SHOW_INITIAL_ROWS
参数设置为TRUE
。这是因为源表已经存在了很长一段时间,我希望该任务除了处理传入数据之外还处理过去的数据。
我注意到了什么
SYSTEM$STREAM_HAS_DATA
返回 False,直到出现新的 CDC。由于SHOW_INITIAL_ROWS
设置为TRUE
,当我查询流时,我得到的行数与查询表本身时相同。但是,SYSTEM$STREAM_HAS_DATA
仍然返回 False。
我的尝试
-
可以查询流
我已通过使用此角色和查询确认任务所有者有权访问流。
SELECT * FROM my_stream LIMIT 5; -- Works.
这证实了流确实存在。
执行 UPDATE 命令确实会使 SYSTEM$STREAM_HAS_DATA
返回带有所有行的 TRUE
(而不仅仅是这个命令的差异)。
我可以运行任务本身的 SQL。进入历史页面,我可以复制并粘贴查询并运行它。
这确认查询本身有效。
-
随后的更改实际上由任务处理。
我需要帮助的地方
我需要在没有人工干预和执行的情况下处理流的任务,以使流看起来存在我假设通过手动执行查询,幕后发生了一些事情,使得该流可以访问。 An example of this would be a stream being created on at able by its owner enables change tracking on that table. 但是,我一直无法找到导致在查询之前无法找到流的情况的原因。
更新:重现错误的分步说明
遇到了更容易查看发生了什么的错误。从那里,能够提出逐步说明来重现错误。
首先,没有 show_initial_rows
use database stream_database;
use schema stream_schema;
create table test_table (a integer);
create stream test_stream on table test_table;
select * from test_stream; -- Works
select * from stream_database.stream_schema.test_stream; -- Works
use database different_database; -- Use a different database
select * from stream_database.stream_schema.test_stream; -- Still works
现在,show_initial_rows 设置为 TRUE
use database stream_database;
use schema stream_schema;
create table test_table (a integer);
create stream test_stream on table test_table **show_initial_rows** = true;
select * from test_stream; -- Works
select * from stream_database.stream_schema.test_stream; -- Works
use database different_database;
select * from stream_database.stream_schema.test_stream; -- Error is raised!
select * from stream_database.stream_schema.test_table; -- Works, so there is still access to the table.
(假定)预期行为:在流上启用 show_initial_rows 不应更改流可访问的范围。
【问题讨论】:
根据您今天的更新和您提供的代码示例,您似乎遇到了我昨天发布的类似问题 Snowflake - “Stream not found” when accessing using fully-qualified name from different schema @LukaszSzozda 这似乎是同一个问题。我也刚刚收到 Snowflake 的回复——他们说修复正在等待部署,所以希望它很快就会修复 【参考方案1】:Snowflake 支持已确认这是一个错误。他们已经在内部开了一张票来解决这个问题。
将在解决后尝试在此处发布更新。
2021 年 4 月 30 日更新
Snowflake 已包含适用于 >= 5.15 版本的修复程序。
您可以通过查询SELECT CURRENT_VERSION();
来检查您的版本,除非有任何回滚,否则这应该适用于所有人。
更新已为我修复了代码为091111
的Stream not found
错误。但是,在对源表进行新更改之前,它还没有修复 SYSTEM$STREAM_HAS_DATA 返回 False。
2021 年 5 月 26 日更新
已针对 >= 5.20 的版本修复了 SYSTEM$STREAM_HAS_DATA 对初始行返回 False 的问题
【讨论】:
以上是关于如何解决 Snowflake 中仅针对任务运行出现的 Stream Not Found 错误?的主要内容,如果未能解决你的问题,请参考以下文章
数据推送到 Snowflake 阶段时触发 Snowflake 任务