是否有一种更优雅的方法可以将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';使用下面这样的内容(唉,它不起作用):
create table table_cpt43644
as select *
from master_table
where icd_proc_cd_1-icd_proc_cd_28 = '43644';发布于 2020-02-26 20:34:01
使用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_proc_cd_1-icd_proc_cd_28作为单独的逗号分隔列。然后,您可以使用更短的解决方案使用array_contains(split(column_concatenated, ','),'43644')。在这种情况下也可以使用rlike。虽然第一种解决方案更灵活。
https://stackoverflow.com/questions/60421730
复制相似问题