Hive将数字从同一列中分开

时间:2016-12-15 13:45:22

标签: sql hadoop hive

我有这样的表:

A |  null   |  15
A |  X      |  30
B |  null   |  10
B |  Y      |  20

我想创建一个查询,它将A的数字分开,B的数字相同,所以输出应为:

row1 | 2
row2 | 2

在Hive中处理此问题的最有效方法是什么,考虑到我需要在单个查询中进行大约20次这样的计算?

编辑:我总是有两行,一行是参数为null的行的计数,另一行是非空参数的计数。我需要得到这个价格。

2 个答案:

答案 0 :(得分:2)

select      col1
           ,    max(case when col2 is not null then col3 end)
             /  nullif(max(case when col2 is null then col3 end),0) as results
from        mytable

group by    col1
;

对于@vkp

hive> select 1/0;
OK
NULL

答案 1 :(得分:1)

我会使用自连接将数据分成两个数据集:一个用于基于col2的分子,另一个用于基于col2的分母。如果分母为0,则处理一个案例陈述。在我的情况下,除以零将返回0。这可能是也可能不是你想要的。

我们可能必须将值转换为十进制值我不确定hive是否具有像SQL服务器那样的整数数学。

SELECT A.Col1
     , case when coalesce(A.Col3,0) = 0 then 0 else B.Col3 / A.Col3 end as Rate
FROM Table A
LEFT JOIN table B
  on A.Col1=B.Col1
 and A.Col2 is null
 and B.Col2 is not null