You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 21:51:03