Redshift中INTERSECT查询报错,求获取缺失表列表的解决方法
解决Redshift中INTERSECT报错并获取缺失表列表
Redshift的系统视图(如svv_all_columns)在使用INTERSECT这类集合操作时,可能因底层实现限制触发报错。以下是替代方案,同时满足你获取缺失表列表的需求:
方法1:使用NOT IN子查询获取缺失表
适用于简单场景,注意如果子查询返回NULL值,此方法可能无结果:
SELECT DISTINCT source_table_name AS missing_table FROM ctrl_stg_cdr_rules WHERE source_table_name NOT IN ( SELECT table_name FROM svv_all_columns WHERE database_name = 'singh_sandbox' AND schema_name = 'new_sources' ) ORDER BY missing_table;
方法2:使用LEFT JOIN(更安全,避免NULL值问题)
此方法能正确处理NULL情况,是更可靠的方式:
SELECT DISTINCT cr.source_table_name AS missing_table FROM ctrl_stg_cdr_rules cr LEFT JOIN svv_all_columns ac ON cr.source_table_name = ac.table_name AND ac.database_name = 'singh_sandbox' AND ac.schema_name = 'new_sources' WHERE ac.table_name IS NULL ORDER BY missing_table;
为什么原INTERSECT语句报错?
Redshift的系统目录视图(如svv_all_columns)并非普通用户表,其底层涉及跨节点元数据聚合,部分集合操作(如INTERSECT)未被官方支持,改用子查询或JOIN的方式可绕过这类限制。
内容的提问来源于stack exchange,提问作者Kartikeya Singh
相关产品推荐
相关产品推荐

