1. Column Projection列投影
当一个data file没有field ids信息时,可以通过表属性schema.name-mapping.default
定义一个json字段映射,为data file提供备用的field ids。json中需为每个字段提供如下信息:
- names: 为一个字段定义0个或多个name
- field-id: 可以有field-id,也可以没有field-id(当定义了names)
- fields: 一个可选的字段映射列表,用于struct、map、list字段类型的内部嵌套字段
json字段映射有如下约束
- names中的name可以包含
.
,并不表示嵌套字段 - 当一个字段在不同的data files中,有不同的name,需要为names定义多个name
- 当一个字段只存在于Iceberg的Schema中,不存在于data files中,则可以定义一个空的names
- 当一个字段只存在于data files中,不存在于Iceberg的Schema中,就算定义了field-id,也会被忽略
2. identifier-field-ids唯一字段ID
Flink、Hive等可以通过属性identifier-field-ids
为每个字段定义唯一字段ID
3. Reserved Field IDs保留字段ID
自定义的唯一字段ID,不能大于2147483447(Integer.MAX_VALUE - 200),保留字段ID用于元数据列,元数据列的保留字段ID使用如下:
字段ID, 字段name | 字段类型 | 描述 |
---|---|---|
2147483646 _file | string | 一行数据储存的文件的path |
2147483645 _pos | long | 一行数据在data file的position |
2147483644 _deleted | boolean | 一行数据是否被删除 |
2147483643 _spec_id | int | Spec ID用于追踪一行数据属于哪个data file |
2147483642 _partition | struct | 用于标识一行数据属于哪个partition |
2147483546 file_path | string | 一行数据储存的文件的path,用于基于position的delete files |
2147483545 pos | long | 一行数据在data file的position,用于基于position的delete files |
2147483544 row | struct<…> | 被删除行的多个值,用于基于值等式的delete files |