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;