Hive如何跨字符串列求和?

时间:2015-07-30 11:10:24

标签: hadoop hive hiveql

我正在使用apache-hive-1.2.1并创建了一个表格:
test_table : key -> integer and name -> string

key     name
--------------
1       name1
2       name2
3       3

我很惊讶以下查询提供相应的输出,因为
该列的类型为string:

select sum(name) from test_table;
Output : 3.0

select avg(name) from test_table;
Output : 3.0

即使列类型是字符串,hive也会执行聚合吗?蜂巢如何?

2 个答案:

答案 0 :(得分:4)

请参阅hive builtin UDAF-sum()的代码,该代码采用以下签名接受“仅数字或字符串类型参数(第71行)

name = "sum", value = "_FUNC_(x) - Returns the sum of a set of numbers"

在GenericUDAFEvaluator()中你可以找到大小写STRING:在66和67行返回新的GenericUDAFSumDouble(); ,这意味着根据传递的参数的基本类型/数据类型,相应的聚合是正在完成。即,对于name1,name2(字符串)聚合的对应值来自 new DoubleWritable(0);
所以=> 0.0 + 0.0 + 3 = 3.0

答案 1 :(得分:0)

一个返回一组数字之和的聚合函数。它的单个参数可以是数字列,也可以是应用于列值的函数或表达式的数值结果。将忽略指定列的NULL值的行。如果表为空,或者提供给MIN的所有值都为NULL,则SUM返回NULL。

当查询包含GROUP BY子句时,为每个分组值组合返回一个值。

返回类型:整数参数的BIGINT,浮点参数的DOUBLE