【问题标题】:How do I resolve a Stream Not Found error in Snowflake that only appears for Task Runs?如何解决 Snowflake 中仅针对任务运行出现的 Stream Not Found 错误?
【发布时间】: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。

我的尝试

  1. 可以查询流

我已通过使用此角色和查询确认任务所有者有权访问流。

SELECT * FROM my_stream LIMIT 5; -- Works.

这证实了流确实存在。

  1. 执行 UPDATE 命令确实会使 SYSTEM$STREAM_HAS_DATA 返回带有所有行的 TRUE(而不仅仅是这个命令的差异)。

  2. 我可以运行任务本身的 SQL。进入历史页面,我可以复制并粘贴查询并运行它。

这确认查询本身有效。

  1. 随后的更改实际上由任务处理。

我需要帮助的地方

  • 我需要在没有人工干预和执行的情况下处理流的任务,以使流看起来存在

我假设通过手动执行查询,幕后发生了一些事情,使得该流可以访问。 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-cloud-data-platform


【解决方案1】:

Snowflake 支持已确认这是一个错误。他们已经在内部开了一张票来解决这个问题。

将在解决后尝试在此处发布更新。

2021 年 4 月 30 日更新

Snowflake 已包含适用于 >= 5.15 版本的修复程序。 您可以通过查询SELECT CURRENT_VERSION(); 来检查您的版本,除非有任何回滚,否则这应该适用于所有人。

更新已为我修复了代码为091111Stream not found 错误。但是,在对源表进行新更改之前,它还没有修复 SYSTEM$STREAM_HAS_DATA 返回 False。

2021 年 5 月 26 日更新

已针对 >= 5.20 的版本修复了 SYSTEM$STREAM_HAS_DATA 对初始行返回 False 的问题

【讨论】:

    猜你喜欢
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    相关资源
    最近更新 更多