Hive 向配置单元中的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

我希望你能帮忙。我有下面的查询,它有一个case语句

我想说:

如果域位于其他表中,则返回域名,否则,将其标记为“其他”

我正在使用配置单元&获取错误:

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