【问题标题】: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 列中的点后的位数获取分布的正确查询是什么?

【问题讨论】:

    标签: hive group-by hiveql


    【解决方案1】:

    列别名不能在同级查询中selected。请改用实际计算。

    select length(split(foo, '\\.')[1]) as num, count(*) 
    from tbl_bar 
    group by length(split(foo, '\\.')[1]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多