我有HIVE表(详情如下):问题与HIVE与ROW_NUMBER()OVER()语法
hive> select * from abcd ;
OK
a 1 1
b 2 2
a 3 3
Time taken: 0.261 seconds, Fetched: 3 row(s)
hive> desc abcd;
OK
val001 string
val002 int
val003 int
Time taken: 0.084 seconds, Fetched: 3 row(s)
我写下面的查询,但收到以下错误:
select max(rnk) rnk, max(val) val, sum(cnt) cnt from (select val, count(*) cnt, row_number() over (order by case val when null then 0 else count(*) end desc, val) rnk from (select VAL001 val from abcd) group by val) group by case when rnk <= 100 or val is null then rnk else 100 + 1 end;
FAILED: ParseException line 3:55 missing) at 'by' near 'by'
line 3:58 missing EOF at 'val' near 'by'
我要找对于以上查询结果如下:
RNK VAL CNT
--- ------------------------------ ---
1 a 2
2 b 1
我能够通过Oracle数据库实现相同种类的选项卡乐。唯一的区别是我不是通过Oracle DB中的解码顺序来使用顺序,而是因为在HIVe中不支持解码,所以我不能这样做。
请发现这是工作的Oracle数据库SQL查询:
SQL> select max(rnk) rnk, max(val) val, sum(cnt) cnt from
(select val, count(*) cnt, row_number() over (order by
decode(val,null,0,count(*)) desc, val) rnk from (select VAL001 val from
table_name) group by val)
group by case when rnk <= 100 or val is null then rnk else 100 + 1 end;
RNK VAL CNT
--- ------------------------------ ---
1 a 2
2 b 1
谁能帮我固定HIVE查询。让我知道你是否需要更多细节。
这有助于..非常感谢:)...你对这个查询的简单版本也有建议。 – HiveRLearner
您的意思是单次查询以实现结果?这将带来额外的荣誉:) –