更新时间:2024-12-11 GMT+08:00

Hudi支持聚合函数

本章节内容仅适用于MRS 3.5.0-LTS及之后版本。

使用场景

当前开源社区提供了可插拔的Payload机制,用于满足客户各种聚合需求。但Payload的开发有一定的门槛,因此MRS内置了一些常见的聚合函数满足客户日常需求。该特性允许用户使用Hudi自带的聚合函数实现相同主键的聚合操作。

当前支持的聚合函数和数据类型如下:

  • sum:求和函数可以跨多行聚合值,支持DECIMAL(小数)、SHORT(小整数)、INTEGER(整数)、BIGINT(大整数)、FLOAT(浮点数)和DOUBLE(双精度浮点数)数据类型。
  • product:乘积函数可以计算多行的乘积值,支持DECIMAL、SHORT、INTEGER、BIGINT、FLOAT和DOUBLE数据类型。
  • count:计数函数可以跨多行计数值,支持INTEGER(整数)和BIGINT(大整数)数据类型。
  • max:最大值函数可以识别并保留最大值,支持STRING、DECIMAL、SHORT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIMESTAMP数据类型。
  • min:最小值函数可以识别并保留最小值,支持STRING、DECIMAL、SHORT、INTEGER、BIGINT、FLOAT、DOUBLE、DATE、TIMESTAMP数据类型。
  • last_value:最后值函数用最近导入的值替换之前的值,支持所有数据类型。
  • last_non_null_value:非空最后值函数用最新的非空值替换之前的值,支持所有数据类型。
  • first_value:第一个值函数检索数据集中的第一个空值,支持所有数据类型。
  • first_non_null_value:非空第一个值函数选择数据集中的第一个非空值,支持所有数据类型。

使用约束

  • 由于Hudi OCC特性的限制,当前不建议多流并发写Hudi表。 如果需要多流同时写请将所有流union后写入Hudi。
  • 适合批读获取结果。

开启聚合引擎

建表属性中指定hoodie.merge-engine=aggregate开启hudi表的聚合引擎功能。开启聚合引擎后,每个非主键字段都可以被赋予一个聚合函数,通过字段的fields.<field-name>.aggregate-function表属性来指定。例如,考虑以下表定义。

create table if not exists testTable(
id INT,
col1 INT,
col2 INT,
col3 INT,
col4 INT,
ts LONG
) using hudi
tblproperties (
primaryKey = 'id',
preCombineField='ts'
type = 'mor',
'hoodie.merge-engine' = 'aggregate',
'fields.col2.aggregate-function' = 'count',  -----  指定针对col2 按主键聚合做count操作
'fields.col3.aggregate-function' = 'max'  -----  指定针对col3 按主键聚合取max操作
);