我正在使用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也会执行聚合吗?蜂巢如何?
答案 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