HiveQL:计算值在数组范围之上的实例

时间:2017-07-12 21:18:02

标签: arrays count hive hiveql

我们说我有两张桌子

T1:

id    number
A     1  
B     1
C     4
A     6
A     9

T2:

id
A
B
C

我现在所做的就是加入它们并生成TB1中每个ID所有数字的列表。

SELECT T2.id, collect_list(T1.number)
FROM T2 LEFT OUTER JOIN T1 on T1.id = T2.id
GROUP BY T2.id

现在我有了这个:

结果:

id    number
A     [1, 6, 9]  
B     [1]
C     [4]

如果我还想输出超过每个id的次数,比如5,怎么办?我想从RESULT表中获取另一个表。

所以:

结果2:

id    number       count_above_5
A     [1, 6, 9]    2
B     [1]          0
C     [4]          0

我知道我可以爆炸数组,然后生成一个新表WHERE数字> 5并计算每个ID的那些行的实例然后我可以将上面的结果表加入这个,但是有更清洁,更好的方式去做这个?在中,我可以在列上使用一些函数来生成count_above_5吗?

1 个答案:

答案 0 :(得分:1)

简单count

SELECT T2.id, collect_list(T1.number),count(case when T1.number > 5 then 1 end) as count_above_5
FROM T2 LEFT OUTER JOIN T1 on T1.id = T2.id
GROUP BY T2.id