如何克服 Hive for CASE 语句中的子查询
Posted
技术标签:
【中文标题】如何克服 Hive for CASE 语句中的子查询【英文标题】:How to overcome subquery in Hive for CASE statement 【发布时间】:2018-04-28 05:44:19 【问题描述】:如果条件为真,我必须将列值填充为“Y”,否则为“N”。但是在 hive 中它不支持 case stetement 中的子查询,这如何在 HIVE 中返回。
(case
when exists
(select 1
from fntable fs
join dfntable dfs
on fs.id = dfs.id
and dfs.datetime =
(select max (cd.datetime)
from dfntable cd group by id)
and fs.s_id = dfs.s_id) then 'Y'
else 'N')"
【问题讨论】:
请提供两个表的数据示例和所需的输出示例 【参考方案1】:使用带有解析函数 + 左连接的子查询。加入时,然后是“Y”:
select case when cd.id is not null then 'Y' else 'N' end
from fntable fs
left join
( --group by cd.id, cd.s_id and filter
select cd.id, cd.s_id
from
( select max (cd.datetime) over (partition by dc.id) as max_id_datetime,
cd.id, cd.s_id, cd.datetime
from dfntable cd
) cd
where cd.datetime=max_id_datetime --filter only records with max date
group by cd.id, cd.s_id
) cd on fs.id = dfs.id and fs.s_id = dfs.s_id
【讨论】:
以上是关于如何克服 Hive for CASE 语句中的子查询的主要内容,如果未能解决你的问题,请参考以下文章