2017-11-11 180 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} 
相關問題