AWS Redshift如何在不创建存储过程的情况下查询表/视图中除指定列外的所有列
AWS Redshift如何在不创建存储过程的情况下查询表/视图中除指定列外的所有列
嘿,这个需求太常见了!在Redshift里完全不用写存储过程就能搞定,给你两个最实用的方案:
1. 最直接:用Redshift原生的* EXCEPT语法
Redshift专门扩展了SQL语法,支持直接排除指定列,这是最简单的方式,不用手动列所有需要的列。
比如你要查询public.my_table,排除col1和col2,直接写:
SELECT * EXCEPT (col1, col2) FROM public.my_table;
如果是视图的话用法完全一样:
SELECT * EXCEPT (exclude_col1, exclude_col2) FROM public.my_view;
要是列名包含特殊字符(比如空格、大写),记得给列名加双引号:
SELECT * EXCEPT ("User ID", "Order Date") FROM public.sales_data;
另外还可以搭配REPLACE来替换列,比如把old_col换成计算后的新列:
SELECT * EXCEPT (old_col) REPLACE (old_col * 1.1 AS new_col) FROM public.my_table;
2. 灵活方案:用系统视图生成查询语句
如果遇到一些不支持* EXCEPT的场景(比如某些旧版本的客户端兼容问题),或者需要生成可复用的查询语句,可以利用Redshift的系统视图information_schema.columns来自动拼接列名。
比如要排除col1、col2,查询public.my_table:
SELECT 'SELECT ' || STRING_AGG('"' || column_name || '"', ', ') || ' FROM public.my_table;' AS generated_query FROM information_schema.columns WHERE table_schema = 'public' AND table_name = 'my_table' AND column_name NOT IN ('col1', 'col2');
执行这个语句后,会得到一个完整的SELECT语句,里面自动列好了除指定列外的所有字段,你把生成的结果复制出来直接执行就行。
这个方法的好处是可以批量处理,或者把生成的语句保存下来,适合需要频繁调整排除列的场景。
备注:内容来源于stack exchange,提问作者AIViz
相关产品推荐
相关产品推荐

