Snowflake中GET_DDL函数获取流DDL时表路径缺失问题
解决Snowflake GET_DDL返回流DDL时跨模式表未显示完全限定名的问题
这是Snowflake GET_DDL函数的已知行为:当流与源表处于不同模式时,生成的DDL仅保留源表名,不会自动带上模式/数据库的完全限定名。要获取包含正确表路径的流DDL,可以通过查询系统视图手动构造。
具体解决步骤
通过关联INFORMATION_SCHEMA.STREAMS和INFORMATION_SCHEMA.TABLES视图,提取流和对应源表的完整标识,拼接生成符合预期的DDL:
SELECT 'CREATE OR REPLACE STREAM ' || s.database_name || '.' || s.schema_name || '.' || s.name || ' ON TABLE ' || t.database_name || '.' || t.schema_name || '.' || t.name || CASE WHEN s.stream_type = 'CHANGE_TRACKING' THEN ' CHANGE_TRACKING = TRUE' ELSE '' END || CASE WHEN s.insert_only THEN ' INSERT_ONLY = TRUE' ELSE '' END || CASE WHEN s.start_at IS NOT NULL THEN ' START_AT = ''' || s.start_at || '''' ELSE '' END || ';' AS correct_stream_ddl FROM INFORMATION_SCHEMA.STREAMS s JOIN INFORMATION_SCHEMA.TABLES t ON s.table_catalog = t.table_catalog AND s.table_schema = t.table_schema AND s.table_name = t.table_name WHERE s.name = 'STREAM_2' AND s.schema_name = 'SCHEMA_2' AND s.database_name = 'DB_NAME';
补充说明
- 如果你的流包含额外属性(如
WAREHOUSE、COMMENT等),可以从STREAMS视图中提取对应的字段,补充到拼接语句中。 - 该方法适用于所有跨模式/跨数据库的流,能确保生成的DDL包含源表的完全限定名,避免执行DDL时因找不到表而报错。
内容的提问来源于stack exchange,提问作者Aliaksandr
相关产品推荐
相关产品推荐

