Hive Query:定义一个变量,它是一个字符串列表
Hive Query: defining a variable which is a list of strings
如何创建常量列表并在查询的 WHERE 子句中使用它?
例如,我有一个配置单元查询,我说
Select t1.Id,
t1.symptom
from t1
WHERE lower(symptom) NOT IN ('coughing','sneezing','xyz', etc,...)
与其不断重复这一长串症状(这使得代码非常难看),有没有一种方法可以提前将其定义为
我的列表 = ('coughing','sneezing','x',...)
然后在 WHERE 子句中我只想说 WHERE lower(symptom) not in MyList.
您可以将列表放在 table 中并使用 join
:
Select t1.Id, t1.symptom
from t1
where lower(symptom) NOT IN (select symptom from mysymptoms_list);
这会保留列表,因此可以在多个查询中使用。
如果您喜欢table 联接,您可以使用带有 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;
此查询将在一列中保留来自 table t1
的所有症状(A.symptom),并在第二列(B.symptom)中保留与 [=21] 对应的所有症状(A.symptom) =] MyList
,如果找到匹配,该值将与 t1 中的症状相同,如果未找到匹配,则该值将与 NULL 相同。
您想要那些未找到匹配项的地方,因此需要 where 子句。
您可以使用配置单元变量来执行此操作。
SET hivevar:InClause=('coughing','sneezing','x',...)
确保不要在等号两边留空格。
SELECT t1.Id,
t1.symptom
FROM t1
WHERE LOWER(symptom) NOT IN ${InClause}
如何创建常量列表并在查询的 WHERE 子句中使用它?
例如,我有一个配置单元查询,我说
Select t1.Id,
t1.symptom
from t1
WHERE lower(symptom) NOT IN ('coughing','sneezing','xyz', etc,...)
与其不断重复这一长串症状(这使得代码非常难看),有没有一种方法可以提前将其定义为
我的列表 = ('coughing','sneezing','x',...)
然后在 WHERE 子句中我只想说 WHERE lower(symptom) not in MyList.
您可以将列表放在 table 中并使用 join
:
Select t1.Id, t1.symptom
from t1
where lower(symptom) NOT IN (select symptom from mysymptoms_list);
这会保留列表,因此可以在多个查询中使用。
如果您喜欢table 联接,您可以使用带有 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;
此查询将在一列中保留来自 table t1
的所有症状(A.symptom),并在第二列(B.symptom)中保留与 [=21] 对应的所有症状(A.symptom) =] MyList
,如果找到匹配,该值将与 t1 中的症状相同,如果未找到匹配,则该值将与 NULL 相同。
您想要那些未找到匹配项的地方,因此需要 where 子句。
您可以使用配置单元变量来执行此操作。
SET hivevar:InClause=('coughing','sneezing','x',...)
确保不要在等号两边留空格。
SELECT t1.Id,
t1.symptom
FROM t1
WHERE LOWER(symptom) NOT IN ${InClause}