如何跨列压缩hiveql中的多个where语句:where icd\u proc\u cd\u 1='43644'或或icd\u proc\u cd\u 28='43644'

ddhy6vgd  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(252)

有没有更优雅的方法将where语句压缩到一系列具有索引名称的变量上?
例如,而不是:

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';

使用以下内容(alas不起作用):

create table table_cpt43644
as select *
from master_table
where icd_proc_cd_1-icd_proc_cd_28 = '43644';
bzzcjhmw

bzzcjhmw1#

使用时稍微短一点 array_contains :

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\u proc\u cd\u 1-icd\u proc\u cd\u 28作为单个逗号分隔列。然后你可以用更短的溶液 array_contains(split(column_concatenated, ','),'43644') . 使用 rlike 在这种情况下也是可能的。尽管第一种解决方案更加灵活。

相关问题