Hive 向配置单元中的case语句添加子查询
我希望你能帮忙。我有下面的查询,它有一个case语句 我想说: 如果域位于其他表中,则返回域名,否则,将其标记为“其他” 我正在使用配置单元&获取错误:Hive 向配置单元中的case语句添加子查询,hive,hiveql,Hive,Hiveql,我希望你能帮忙。我有下面的查询,它有一个case语句 我想说: 如果域位于其他表中,则返回域名,否则,将其标记为“其他” 我正在使用配置单元&获取错误: Unsupported SubQuery Expression 'cleandomain': Currently SubQuery expressions are only allowed as Where Clause predicates 有没有其他方法可以达到同样的效果 SELECT *, CASE WH
Unsupported SubQuery Expression 'cleandomain': Currently SubQuery expressions are only allowed as Where Clause predicates
有没有其他方法可以达到同样的效果
SELECT *,
CASE
WHEN cleandomain IN (SELECT cleandomain
FROM keenek1.daily_top_doms) THEN cleandomain
ELSE 'other'
END AS status
FROM (SELECT hour,.....
一种可能的解决方案是使用函数 将域列表放在文本文件中,每行一个域,txt文件,并在CASE语句中调用\u文件中的
函数:
CASE
WHEN in_file(cleandomain,'file/path/daily_top_doms.txt') THEN cleandomain
ELSE 'other'
END AS status
另一种解决方案是将域列表聚合到子查询中的数组中,使用交叉连接进行连接,并使用数组_contains()。如果列表不太大,这可能会更快:
with dom as (
SELECT collect_set(cleandomain) dom
FROM keenek1.daily_top_doms
)
select
case when array_contains(d.dom, s.cleardomain) then s.cleandomain
else 'other'
end as status
from (your query) s cross join dom d --one row cross join