
# Hudi隐式分区简介
#### 简介
隐式分区Hidden Partition是指在不显式添加新的分区列的情况下，通过对现有列进行转换或处理，生成分区列值。这种转换可以是日期格式的转换、字符串的截取等。隐式分区使得用户可以更灵活地管理数据的分区结构，而无需修改表的原始结构。
- 灵活性：用户可以根据业务需求，灵活地选择和转换现有列来生成分区列值，而无需修改表结构。
- 性能提升：合理的分区目录结构可以显著提升查询时的裁剪效率，减少需要扫描的数据量，从而提高查询性能。
- 简化管理：避免了在表中显式添加分区列的复杂性，简化了数据管理和维护。
Hudi隐式分区能力可以在不新增列的情况下，对表中存在的原始列进行隐式转换后生成分区列值，使得用户更灵活的创建分区层级，同时合理的分区目录也会提升查询时的裁剪效率从而提升查询性能。
#### 约束与限制
- Hudi隐式分区能力目前只有MRS 3.5.0-LTS及之后的版本支持。
- 只能在Spark/Flink建表时开启隐式分区能力并指定隐式分区规则，建表完成之后不能关闭隐式分区，也不能修改隐式分区规则。
 
#### Hudi支持的隐式分区能力
Hudi隐式分区能力目前只支持Flink、Spark写入，Flink、Spark、Hetu读取，不支持Hive读取。
支持的分区转换类型如下：
| Transform name       | Description                                                  | Source types                                                                        | Result type |
|:---|:---|:---|:---|
| identity(col)        | Source value, unmodified                                     | Any                                                                                 | Source type |
| bucket(col, N)       | Hash of value, mod N                                         | int, long, decimal, date, time, timestamp, timestamptz, string, uuid, fixed, binary | int         |
| truncate(col, w)     | Value truncated to width w                                   | int, long, decimal, string                                                          | Source type |
| year(col)            | Extract a date or timestamp year, as years from 1970         | date, timestamp, timestamptz                                                        | int         |
| month(col)           | Extract a date or timestamp month, as months from 1970-01-01 | date, timestamp, timestamptz                                                        | int         |
| day(col)             | Extract a date or timestamp day, as days from 1970-01-01     | date, timestamp, timestamptz                                                        | int         |
| hour(col)            | Extract a timestamp hour, as hours from 1970-01-01 00:00:00  | timestamp, timestamptz                                                              | int         |
| date(col, 'pattern') | Format timestamp / date column with pattern pattern          | date, timestamp, timestamptz                                                        | String      |
   
