更新时间:2025-12-26 GMT+08:00
分享

配置Hudi数据列默认值

操作场景

配置Hudi数据列默认值允许用户在给表新增列时,设置列的默认值。在查询历史数据时,新增列将返回默认值,从而确保数据的一致性和完整性。

通过配置Hudi数据列的默认值,可以在多种场景下确保数据的一致性和完整性。这不仅简化了数据处理和查询逻辑,还提高了数据的质量和业务的稳定性。在实际应用中,根据具体需求选择合适的默认值,可以更好地满足业务需求。

  • 历史数据迁移:在数据迁移过程中,需要将旧表的数据迁移到新表中,而新表中新增了一些列。
  • 数据模型演进:随着业务的发展,需要在现有表中新增一些列来记录更多的信息。
  • 数据备份和恢复:在数据备份和恢复过程中,需要确保备份的数据在恢复后仍然保持一致性和完整性。
  • 业务逻辑需求:某些业务逻辑要求某些列在所有数据行中都有值,即使这些值是默认值。
  • 数据审计和日志记录:在数据审计和日志记录过程中,需要记录某些列的初始值或默认值。

约束与限制

  • 本章节仅适用于MRS 3.3.0-LTS及之后版本。
  • 新增列在设置默认值前,如果数据已经进行了重写,则查询历史数据不支持返回列的默认值,返回NULL。数据入库、更新、执行Compaction、Clustering都会导致部分或全部数据重写。
  • 列的默认值设置要与列的类型一致,如不一致会进行类型强转,导致默认值精度丢失或者默认值为NULL。
  • 历史数据的默认值与列第一次设置的默认值一致,多次修改列的默认值不会影响历史数据的查询结果。
  • 设置默认值后rollback不能回滚默认值配置。
  • Spark SQL暂不支持查看列默认值信息,可以通过Hive beeline执行show create table命令查看。

支持范围

当前仅支持int、bigint、float、double、decimal、string、date、timestamp、boolean、binary类型,其他类型不支持。

表1 引擎支持矩阵

引擎

DDL操作

写操作支持

读操作支持

SparkSQL

Y

Y

Y

Spark DataSource

N

N

Y

Flink

N

N

Y

HetuEngine

N

N

Y

Hive

N

N

Y

示例

SQL语法具体参考Hudi SQL语法参考章节。

示例:

  • 建表指定列默认值
    create table if not exists h3(
    id bigint,
    name string,
    price double default 12.34
    ) using hudi
    options (
    primaryKey = 'id',
    type = 'mor',
    preCombineField = 'name'
    );
  • 添加列指定列默认值
    alter table h3 add columns(col1 string default 'col1_value');
    alter table h3 add columns(col2 string default 'col2_value', col3 int default 1);
  • 修改列默认值
    alter table h3 alter column price set default 14.56;
  • 插入数据使用列默认值
    insert into h3(id, name) values(1, 'aaa');
    insert into h3(id, name, price) select 2, 'bbb', 12.5;

相关文档