如何为蜂巢中的点后的位数建立分布表?
Posted
技术标签:
【中文标题】如何为蜂巢中的点后的位数建立分布表?【英文标题】:How to build distribution table for number of digits after the dot in hive? 【发布时间】:2018-08-15 17:39:53 【问题描述】:hive 表中有一个从 float(double) 转换而来的字符串列。我需要一个表格,表示点后的位数,每个数字都有计数行。
+-----+------+--+
| num | _c0 |
+-----+------+--+
| 2 | 300 |
| 3 | 400 |
| 4 | 248 |
| 5 | 117 |
| 6 | 43 |
| NULL| 999 |
+-----+------+--+
有获取foo
列点后位数的功能
length(split(foo, '\\.')[1])
所以,我获取上表失败的尝试是
select length(split(foo, '\\.')[1]) as num, count(num) from tbl_bar group by num;
错误信息是
错误:编译语句时出错:FAILED:SemanticException [错误 10004]:第 1:77 行无效的表别名或列引用“num”:(可能的列名称为:foo、moo、hroo)(状态=42000,代码=10004)
按foo
列中的点后的位数获取分布的正确查询是什么?
【问题讨论】:
【参考方案1】:列别名不能在同级查询中select
ed。请改用实际计算。
select length(split(foo, '\\.')[1]) as num, count(*)
from tbl_bar
group by length(split(foo, '\\.')[1]);
【讨论】:
以上是关于如何为蜂巢中的点后的位数建立分布表?的主要内容,如果未能解决你的问题,请参考以下文章
[USACO15JAN]草鉴定Grass Cownoisseur