2017-11-11 181 views
0

如何创建一个常量列表并在查询的WHERE子句中使用它?Hive Query:定义一个变量,它是一个字符串列表

例如,我有一个蜂巢查询,在这里我说

Select t1.Id, 
     t1.symptom 
from t1 
WHERE lower(symptom) NOT IN ('coughing','sneezing','xyz', etc,...) 

而是不断的重复这个漫长的症状名单(这使得代码非常难看)的,有没有办法提前定义它时间

MYLIST =( '咳嗽', '喷嚏', 'X',...)

,然后在WHERE子句我只是说,较低的(症状)不MYLIST。

+0

您可以将列表放入表中并使用'join'。 –

回答

1

您可以将列表中的一个表,并使用join

Select t1.Id, t1.symptom 
from t1 
where lower(symptom) NOT IN (select symptom from mysymptoms_list); 

这仍然存在列表中,因此它可以在多个查询中使用。

0

如果你习惯使用的连接,您可以使用左连接与where子句:

Select t1.Id, t1.symptom 
from 
t1 A left join MyList B 
on 
lower(A.symptom) = lower(B.symptom) 
where lower(B.symptom) IS NULL; 

这个查询将保留从表t1所有症状(A.symptom)在一列和第二列(B.symptom)对应于表MyList,如果找到匹配,则值将与t1中的症状相同,如果未找到匹配,则值为NULL。

你想要那些找不到匹配的,因此是where子句。

0

您可以使用配置单元变量来执行此操作。

SET hivevar:InClause=('coughing','sneezing','x',...) 

确保您不会在等于的任何一边留下空格。

SELECT t1.Id, 
     t1.symptom 
FROM t1 
WHERE LOWER(symptom) NOT IN ${InClause} 
相关问题