RedShift是否支持SELECT * EXCEPT (col1, col2, ...) 语法?
Redshift 目前没有原生支持和 BigQuery SELECT * EXCEPT 完全等价的语法,不过可以通过以下两种可行方案实现相同的字段排除效果:
方案1:通过系统表查询生成筛选后的列名(推荐用于生产环境、大数据量查询场景)
你可以先通过information_schema.columns系统表查询出排除指定字段后的列清单,再把结果复制到你的查询语句中使用,示例如下:-- 替换schema名、表名、要排除的字段名即可 SELECT LISTAGG(quote_ident(column_name), ', ') FROM information_schema.columns WHERE table_schema = '你的schema名' AND table_name = '你的表名' AND column_name NOT IN ('要排除的字段1', '要排除的字段2');该方案的优势是性能和原生写列名完全一致,没有额外性能损耗,缺点是需要额外执行一次查询获取列名,表结构发生变更时需要同步更新查询里的列清单。
方案2:通过JSON函数实现动态字段排除(推荐用于多层嵌套子查询、临时复杂查询场景)
你可以借助Redshift的JSON序列化/反序列化能力,动态剔除不需要的字段,无需提前查询列名,使用体验最接近BigQuery的EXCEPT语法,示例如下:-- 示例:排除t1表的col1、col2两个字段 SELECT json_populate_record(null::t1, json_object_agg(key, value)).* FROM t1, json_each(row_to_json(t1)) WHERE key NOT IN ('col1', 'col2') GROUP BY t1.ctid, t1.*该方案的优势是可以直接嵌入到多层嵌套子查询逻辑中,不需要提前获取表的列信息,开发效率更高,缺点是JSON序列化会带来额外性能开销,超大数据量的查询场景建议提前做性能验证。
内容的提问来源于stack exchange,提问作者goose
相关产品推荐
相关产品推荐

