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操作 );