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

隐式分区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

相关文档