Flink创建带隐式分区的Hudi表
操作场景
在Flink流式写入Hudi表时,如果需要按照日期、时间等维度对数据进行分区管理,但又不希望在表中额外新增分区列,可以通过配置隐式分区来实现。在Flink创建带隐式分区的Hudi表,建表语句格式可以参考FlinkServer作业对接Hudi表。
Flink SQL的Hudi表with中设置如下hidden partition参数:
hoodie.hidden.partitioning.max.rules = [hidden_partition_max_rules_num] 'hoodie.hidden.partitioning.enabled' = [hidden_partition_enable] 'hoodie.hidden.partitioning.rule' = [hidden_partition_rules]
| 参数 | 描述 | 是否必填 |
|---|---|---|
| hoodie.hidden.partitioning.max.rules | 用于控制隐式分区的最大规则数量,String类型。它限制了可以应用于分区路径生成的规则数量,从而影响分区的灵活性和性能。 默认为5,分区规则越多,性能越差,如果分区规则超过5个,需要先调整此参数。 | 否 |
| hidden_partition_rules | 用于定义隐式分区的规则,String类型。这些规则允许您在不新增列的情况下,对表中存在的原始列进行转换后生成分区列值。 | 是 |
| hidden_partition_enable | 用于启用或禁用隐式分区功能,Boolean类型。
| 是 |
示例
以下示例创建一个MOR类型的Hudi表,启用隐式分区:
create table hudi_source( uuid varchar(20), name varchar(10), age int, ts timestamp(3), ts6 timestamp(6), p varchar(20) ) with ( 'connector' = 'hudi', 'path' = 'hdfs://hacluster/tmp/hudi/flink_stream_mor3', 'table.type' = 'MERGE_ON_READ', 'hoodie.datasource.write.recordkey.field' = 'uuid', 'write.precombine.field' = 'uuid', 'hoodie.datasource.write.hive_style_partitioning' = 'true', 'hoodie.hidden.partitioning.enabled' = 'true', 'hoodie.hidden.partitioning.rule' = 'truncate(partition, 3), date(ts, yyyy), identity(col1)' );