hive在一个查询中扫描并选择

ni65a41a  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(236)

比如说,我有一张Hive桌 emp_details(name, dept) .
在这个表中,我需要检查是否存在 dept = ‘a’ 然后选择这些记录。如果找不到这样的记录,那么只有我会选择带有 dept = ‘b’ . 源数据具有 'a' 或者 'b' 作为 dept 值和我的结果集将包含 'a' 或者 'b' 不是两者都有。
问题是,对于这个问题,我只能使用一个配置单元查询。

jljoyd4f

jljoyd4f1#

计算\u exist标志并将其用于筛选:

select name, dept 
       from 
           (select name, 
                   dept, 
                   (count(case when dept='a' then 1 end) over()>0) as a_exist 
             from test_a 
           )a 
      where (a_exist and dept='a')            --only a if exists 
         or ((NOT a_exist)and dept='b')       --return b if a not exists
;

相关问题