更新时间:2026-08-25 GMT+08:00
分享

Hudi支持聚合函数

操作场景

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

典型应用场景:

  • 实时指标统计:对相同用户ID的访问次数进行count累加,统计UV/PV等实时指标。
  • 增量数据累加:对相同账户ID的交易金额进行sum求和,实现账户余额的实时更新。
  • 设备状态合并:对相同设备ID的传感器数据使用last_value取最新状态,实现设备状态合并。
  • 数据去重保留极值:对相同主键的数据使用max/min保留最大/最小值,实现数据去重与极值筛选。

约束与限制

  • 本章节内容仅适用于MRS 3.5.0-LTS及之后版本。
  • 由于Hudi OCC特性的限制,当前不建议多流并发写Hudi表。 如果需要多流同时写请将所有流union后写入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:非空第一个值函数选择数据集中的第一个非空值,支持所有数据类型。

开启聚合引擎

建表属性中指定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操作
);

相关文档

  • 了解Hudi表的完整建表语法和参数说明,具体请参考使用Spark SQL操作Hudi表
  • 了解Hudi表的写入、Compaction、Cleaning等参数配置方法,具体请参考Hudi常见参数配置
  • 常见问题:
    • 聚合结果不正确:请检查建表语句中hoodie.merge-engine是否配置为aggregate、各字段的aggregate-function是否与数据类型匹配(参见约束限制中的函数数据类型支持表)、preCombineField是否正确指定了用于判断数据新旧的字段。
    • 不支持的数据类型如何处理:对于聚合函数不支持的数据类型(如array、map等复杂类型),建议使用last_value或last_non_null_value函数,或通过自定义Payload实现。
    • cow类型表是否支持聚合引擎:聚合引擎建议使用mor类型表。cow类型表在写入时即合并数据,聚合操作在写入阶段执行,可能与mor类型的行为存在差异,建议使用mor类型以确保聚合结果正确。
    • 聚合函数配置后能否修改:已创建表的聚合函数配置不支持直接修改。如需更改聚合函数,需删除原表后重新创建并指定新的聚合函数配置。

相关文档