配置Hudi数据列默认值
该特性允许用户在给表新增列时,设置列的默认值。查询历史数据时新增列返回默认值。
使用约束
- 新增列在设置默认值前,如果数据已经进行了重写,则查询历史数据不支持返回列的默认值,返回NULL。数据入库、更新、执行Compaction、Clustering都会导致部分或全部数据重写。
- 列的默认值设置要与列的类型一致,如不一致会进行类型强转,导致默认值精度丢失或者默认值为NULL。
- 历史数据的默认值与列第一次设置的默认值一致,多次修改列的默认值不会影响历史数据的查询结果。
- 设置默认值后rollback不能回滚默认值配置。
- Spark SQL暂不支持查看列默认值信息,可以通过执行show create table SQL查看。
- 不支持默认缺省列的写入方式,写入时必须指定列名。
支持范围
当前仅支持int、bigint、float、double、decimal、string、date、timestamp、boolean、binary类型,其他类型不支持。
引擎 |
DDL操作 |
写操作支持 |
读操作支持 |
---|---|---|---|
SparkSQL |
Y |
Y |
Y |
Spark DataSource |
N |
N |
Y |
Flink |
N |
N |
Y |
HetuEngine |
N |
N |
Y |
Hive |
N |
N |
Y |
示例
SQL语法具体参考DLI 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;