Hadoop 计算蜂箱中的百分比

Hadoop 计算蜂箱中的百分比,hadoop,percentage,hiveql,Hadoop,Percentage,Hiveql,我在获取百分比方面有点困难 colA | cloB | colC 4 | a | y 5 | b | y 7 | a | n 8 | a | y ------------------ Output: a 67% b 100% 我必须得到colB中每个字母的colC百分比(所有“y”) 我已经能够分别得到这两个总数,但似乎无法让百分比发挥作用。 获取a,b(colB)的总“y” 获取colB的总数 SELECT COUNT(colC) FR

我在获取百分比方面有点困难

colA | cloB | colC
4    |  a   |  y
5    |  b   |  y
7    |  a   |  n
8    |  a   |  y
------------------
Output:
a 67%
b 100%
我必须得到colB中每个字母的colC百分比(所有“y”)

我已经能够分别得到这两个总数,但似乎无法让百分比发挥作用。
获取a,b(colB)的总“y”

获取colB的总数

SELECT COUNT(colC) FROM tbl WHERE colC = '"y"';
Output:
4
提前感谢

我不是(尚未:D)Hive方面的专家,但您可以尝试这样的子查询:

SELECT 
    t1.colB,
    100*(count(colB)/sub.cnt)
FROM 
    tbl t1,
    (SELECT COUNT(colC) as cnt 
     FROM tbl 
     WHERE colC = 'y') sub
JOIN 
    tbl ON (sub.colC = tbl.colC))
GROUP BY 
    colB;

Ps:我不是100%确定,实际上我无法测试它,只是想帮助一下。

使用IF-UDF来避免加入

SELECT t1.colB,
   SUM( IF( colC == 'y', 1 , 0 ) )/ COUNT(*) * 100 as pct
FROM tbl t1
GROUP BY t1.colB;

谢谢,我试过密码了。它给了我一个错误“FAILED ParseException line 1:47 missing EOF at”,“near'tbl1”是的,我的错,事实上你不能像那样在子句中放一个表和一个子查询,我实际上在寻找一个解决方案。我重新编辑了,告诉我。如果它仍然没有运行,我将向你展示一个使用union的示例,我确信它可以工作,但没有优化:(它表示无法识别谓词“t1”。联接类型说明符中的规则“kwInner”失败。
SELECT t1.colB,
   SUM( IF( colC == 'y', 1 , 0 ) )/ COUNT(*) * 100 as pct
FROM tbl t1
GROUP BY t1.colB;