如何克服 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 语句中的子查询的主要内容,如果未能解决你的问题,请参考以下文章

带有case语句的bigquery中的子选择

Hive 在使用 case 语句和聚合时按列分组出错

c语言中while 、for、switch、case的用法?

sql语句update语句中嵌套的子查询该怎么写?

Hive SQL 逻辑 - case when 语句

pb中的条件语句,if else,choose case ,for