如何在distinct子句中执行CASE语句?

时间:2017-02-27 17:47:38

标签: sql hadoop hive

我正在尝试创建具有以下逻辑的Hive视图:

create view test.view as
select
distinct(
  case 
  when substr(value_1, 1, 10) < "2016-01-01" then
     regexp_extract(value_2,'(?i-sx:\\|([1-9][0-9]{0,3}x[1-9][0-9]{0,3})\\|)',1)
   else
     split(value_2, '\\|')[5]
   end
  ) as value_3
from test.table;

但是当我运行它时,我得到以下输出:

FAILED: ParseException line 128:2 cannot recognize input near 'distinct' '(' 'case' in select expression

有谁知道我怎么写这个,所以我没有收到错误?或者告诉我为什么会这样?

1 个答案:

答案 0 :(得分:1)

distinct不是一个功能。它已应用于所有选定的列,并生成所有所选列的唯一组合。

试试这个:

select distinct case 
        when substr(value_1, 1, 10) < "2016-01-01"
            then regexp_extract(value_2, '(?i-sx:\\|([1-9][0-9]{0,3}x[1-9][0-9]{0,3})\\|)', 1)
        else split(value_2, '\\|') [5]
        end as value_3
from test.table;

所以,这个:

select distinct (col), col2

与:

相同
select distinct col, col2