首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何压缩Hiveql中跨列范围的多个where语句:其中icd_proc_cd_1='43644‘或.或icd_proc_cd_28='43644‘

如何压缩Hiveql中跨列范围的多个where语句:其中icd_proc_cd_1='43644‘或.或icd_proc_cd_28='43644‘
EN

Stack Overflow用户
提问于 2020-02-26 20:05:41
回答 1查看 30关注 0票数 1

是否有一种更优雅的方法可以将where语句压缩到具有索引名称的一系列变量上?

例如:而不是:

代码语言:javascript
复制
create table table_cpt_43644
as select *
from master_table
where icd_proc_cd_1 = '43644' 
or icd_proc_cd_2 = '43644'
or icd_proc_cd_3 = '43644'
...
or icd_proc_cd_28 = '43644';

使用下面这样的内容(唉,它不起作用):

代码语言:javascript
复制
create table table_cpt43644
as select *
from master_table
where icd_proc_cd_1-icd_proc_cd_28 = '43644';
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-26 20:34:01

使用array_contains稍微短一点

代码语言:javascript
复制
where 
array_contains(
array( icd_proc_cd_1,icd_proc_cd_2,icd_proc_cd_3,icd_proc_cd_4,icd_proc_cd_5,icd_proc_cd_6,icd_proc_cd_7,icd_proc_cd_8,icd_proc_cd_9,icd_proc_cd_10,
       icd_proc_cd_11,icd_proc_cd_12,icd_proc_cd_13,icd_proc_cd_14, icd_proc_cd_15,icd_proc_cd_16,icd_proc_cd_17,icd_proc_cd_18,icd_proc_cd_19,icd_proc_cd_20, 
       icd_proc_cd_21,icd_proc_cd_22,icd_proc_cd_23,icd_proc_cd_24,icd_proc_cd_25,icd_proc_cd_26,icd_proc_cd_27,icd_proc_cd_28
     ), '43644')

如果您的表基于CSV文件,则可以重新定义表DDL,使用regexSerDe并选择icd_proc_cd_1-icd_proc_cd_28作为单独的逗号分隔列。然后,您可以使用更短的解决方案使用array_contains(split(column_concatenated, ','),'43644')。在这种情况下也可以使用rlike。虽然第一种解决方案更灵活。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60421730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档