
# Flink创建带隐式分区的Hudi表
#### 操作场景
在Flink流式写入Hudi表时，如果需要按照日期、时间等维度对数据进行分区管理，但又不希望在表中额外新增分区列，可以通过配置隐式分区来实现。在Flink创建带隐式分区的Hudi表，建表语句格式可以参考[FlinkServer作业对接Hudi表](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24180.html)。
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]
```
表1参数解释 
| 参数                                   | 描述                                                                                                                                                                                                                                                                                                                                                           | 是否必填 |
|:---|:---|:---|
| hoodie.hidden.partitioning.max.rules | 用于控制隐式分区的最大规则数量，String类型。它限制了可以应用于分区路径生成的规则数量，从而影响分区的灵活性和性能。 默认为5，分区规则越多，性能越差，如果分区规则超过5个，需要先调整此参数。                                                                                                                                                                                                          | 否    |
| hidden_partition_rules               | 用于定义隐式分区的规则，String类型。这些规则允许您在不新增列的情况下，对表中存在的原始列进行转换后生成分区列值。                                                                                                                                                                                                                                                                                                  | 是    |
| hidden_partition_enable              | 用于启用或禁用隐式分区功能，Boolean类型。 - true：启用隐式分区  - false：则禁用隐式分区   | 是    |
   
#### 示例
以下示例创建一个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)'
);
```
