如何解决Snowflake任务运行时仅出现的Stream Not Found报错
Snowflake 开启SHOW_INITIAL_ROWS的Stream访问异常问题
报错现象
由Snowflake Task执行消费Stream的查询时,仅在任务运行场景下会触发报错:
- 查询
information_schema.task_history可查看任务状态为FAILED - 错误码为
091111 - 报错提示为
Stream my_stream not found
该Stream在创建时设置了SHOW_INITIAL_ROWS=TRUE参数,初衷是让任务能够处理存在较长时间的源表的存量历史数据,以及后续新增的变更数据。
问题观察
- 未产生新的CDC变更前,
SYSTEM$STREAM_HAS_DATA函数返回False - 虽然因
SHOW_INITIAL_ROWS设为TRUE,直接查询Stream可返回与源表一致的行数,但SYSTEM$STREAM_HAS_DATA仍返回False
已完成排查操作
- 权限与存在性校验:使用任务所有者角色执行
SELECT * FROM my_stream LIMIT 5;可正常返回结果,确认流对象真实存在、任务角色拥有对应访问权限 - 变更触发验证:执行UPDATE命令后,
SYSTEM$STREAM_HAS_DATA会返回TRUE,且返回的数据包含全部存量行,而非仅该UPDATE操作产生的变更差异 - 查询逻辑校验:从任务历史页面复制对应SQL语句手动执行可正常运行,确认查询逻辑本身无问题
- 手动触发验证:手动执行一次流查询后,任务可正常处理后续的数据变更
核心待解决问题
需要让任务无需手动执行流查询的前置操作,即可正常识别并访问流对象。初步推断手动执行查询时触发了流的某些后台初始化逻辑(类似创建Stream时会自动为源表开启变更追踪的机制),但暂未定位到为何开启SHOW_INITIAL_ROWS=TRUE的Stream会在首次被手动查询前,出现“未找到”的识别异常。
问题复现路径
未设置show_initial_rows参数的Stream测试
依次执行以下命令完成环境搭建:
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;、使用全限定名执行select * from stream_database.stream_schema.test_stream;,还是切换到其他数据库(use database different_database;)后执行全限定名查询,均可正常访问流对象。
设置show_initial_rows=TRUE参数的Stream测试
依次执行以下命令完成环境搭建:
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;
完成环境搭建后验证访问效果:
- 在当前库下执行上述流查询均可正常运行
- 切换到其他数据库后使用全限定名查询Stream会触发报错,而同库下的源表使用全限定名查询可正常访问,与“开启show_initial_rows不应改变流的可访问范围”的预期行为不符
内容的提问来源于stack exchange,提问作者MTK
相关产品推荐
相关产品推荐

