如何通过Snowflake的SHOW TABLES命令仅返回cluster_by列(dbt宏场景)
问题
需要在dbt宏中通过Snowflake执行查询,仅返回SHOW TABLES命令结果里的cluster_by列,以此判断对应模型(目标关系)是否具备聚类属性。当前代码会返回完整结果集,需修改实现仅获取该列数据。现有代码如下:
DECLARE res RESULTSET DEFAULT (execute immediate 'show tables like ''obj_name'''); BEGIN return table(res); END
解决方案
可以通过直接查询结果集的指定列来实现需求,修改后的代码有两种写法:
写法一(简化版)
无需DECLARE块,直接利用RESULT_SCAN获取最近查询的结果并提取目标列:
EXECUTE IMMEDIATE 'SHOW TABLES LIKE ''obj_name'''; SELECT cluster_by FROM TABLE(RESULT_SCAN(LAST_QUERY_ID()));
写法二(基于原有代码调整)
在原有DECLARE逻辑基础上,通过SELECT语句仅返回cluster_by列:
DECLARE res RESULTSET DEFAULT (EXECUTE IMMEDIATE 'SHOW TABLES LIKE ''obj_name'''); BEGIN SELECT cluster_by FROM TABLE(res); END
说明
Snowflake的SHOW类命令返回的结果集可以通过TABLE()函数转换为可查询的关系表,直接指定cluster_by列即可筛选出所需数据,返回结果仅包含该列内容,可用于判断目标表是否配置了聚类属性。
内容的提问来源于stack exchange,提问作者Phil Baines
相关产品推荐
相关产品推荐

