Impala中如何不指定表全部列即可排除1个或多个列查询
Impala 排除指定列查询实现说明
原生Impala不支持SELECT * [except columnA] FROM tableA这类直接排除指定列的语法,默认规则下你要么查询全量*,要么手动枚举所有需要查询的列。如果不想每次手动列全所有保留字段,可以用下面几种方案实现类似效果:
- 提前创建对应视图
如果是长期固定要排除某几个列的查询场景,只需要第一次手动枚举所有需要保留的列创建视图,后续直接查视图即可,不用重复写列名:-- 仅需第一次写全要保留的列,排除不需要的columnA CREATE VIEW tableA_exclude_columnA AS SELECT col1, col2, col3, col4 FROM tableA; -- 后续查询直接用*即可,效果等价于排除columnA查全表剩余列 SELECT * FROM tableA_exclude_columnA; - 脚本动态拼接SQL
临时查询场景下,可以先通过DESCRIBE tableA拿到表的全量列名,用简单的shell、Python脚本过滤掉要排除的列,自动拼接成完整的SELECT语句再执行,不用手动敲所有列名。 - 借助上层查询引擎的语法能力
部分对接Impala的SQL查询层、BI工具会自带SELECT * EXCEPT语法的解析能力,会在下发给Impala之前自动把语句转换成枚举全量保留列的标准SQL,这种场景下你可以直接写期望的except语法,但这个能力不是Impala原生提供的。
内容的提问来源于stack exchange,提问作者jbest
相关产品推荐
相关产品推荐

