Snowflake中IDENTIFIER结合DB/SCHEMA使用失效问题咨询
Snowflake中IDENTIFIER与库/模式结合使用的解决办法
你单独使用IDENTIFIER传递表名的代码可以正常运行:
SET TABLE_NM='NAME_RPT'; SELECT * FROM IDENTIFIER($TABLE_NM);
但尝试给IDENTIFIER加上数据库和模式前缀时却无法运行:
SELECT * FROM DB.SCHEMA.IDENTIFIER($TABLE_NM); -- 运行失败
这是因为Snowflake的语法不支持在点分隔的对象路径中间插入IDENTIFIER调用,IDENTIFIER函数需要接收完整的标识符字符串(可以是库.模式.表、模式.表或单独的表名)。你可以通过以下两种方式解决:
将库、模式、表名拼接成完整标识符存入变量
直接把完整的三部分路径拼成字符串变量,再用IDENTIFIER引用:-- 直接赋值完整路径 SET FULL_TABLE_NM = 'DB.SCHEMA.NAME_RPT'; SELECT * FROM IDENTIFIER($FULL_TABLE_NM); -- 或者拆分变量后动态拼接 SET DB_NM = 'DB'; SET SCHEMA_NM = 'SCHEMA'; SET TABLE_NM = 'NAME_RPT'; SET FULL_TABLE_NM = CONCAT($DB_NM, '.', $SCHEMA_NM, '.', $TABLE_NM); SELECT * FROM IDENTIFIER($FULL_TABLE_NM);先切换到目标库和模式,再引用表名变量
先通过USE SCHEMA指定当前库和模式,之后直接用IDENTIFIER引用表名变量即可:SET TABLE_NM = 'NAME_RPT'; USE SCHEMA DB.SCHEMA; SELECT * FROM IDENTIFIER($TABLE_NM);
内容的提问来源于stack exchange,提问作者Veera V
相关产品推荐
相关产品推荐

