Iceberg表支持的数据类型介绍
基本数据类型
Iceberg支持的基本数据类型请参见表1。
- 不含时区的时间戳(Timestamp)值表示一个日期和一天中的时间,与时区无关,时间值独立于时区调整,例如2017-11-16 17:10:34总是被读取为2017-11-16 17:10:34,即具体的时间值(不带时区)。
- 含时区的时间戳(Timestamptz)值表示时间线上的一个点,值以UTC存储,并且不保留源时区,例如2017-11-16 17:10:34 PST被存储/读取为2017-11-17 01:10:34 UTC,并且这些值被认为是相同的。
- 字符串必须存储为UTF-8编码的字节数组。
| 基本类型 | 说明 |
|---|---|
| boolean | 表示真或假。 |
| int | 表示32位有符号整数。 可以提升为long类型。 |
| long | 表示64位有符号整数。 |
| float | 表示32位IEEE 754浮点数。 可以提升为double类型。 |
| double | 表示64位IEEE 754浮点数。 |
| decimal(P,S) | 定点小数,P表示精度,S表示小数点后的位数。 小数点后的位数是固定的,精度必须小于或等于38。 |
| date | 表示日历日期(不含时区或时间)。 |
| timestamp | 表示时间戳,微秒精度(不含时区)。 |
| timestamp_tz | 表示时间戳,微秒精度(含时区)。 |
| string | 表示任意长度的字符序列,使用UTF-8编码。 |
| binary | 表示任意长度字节数组。 |
| geometry | 平面几何类型,存储点、线、面等二维空间数据。 |
| geography | 地理坐标类型,基于经纬度的球面地理位置数据。 |
| timestamp_ns | 时间戳,纳秒精度,无时区。 |
| timestamp_tz_ns | 时间戳,纳秒精度,带时区。 |
| unknown | 未知类型(仅用于schema未确定时的占位),只能为NULL,不写入数据文件。 |
嵌套类型
- Struct:表示一个类型化值的元组。元组中的每个字段都有名称和一个在表模式中唯一的整数ID。每个字段可以为可选或必需,即值是否可以为null。字段可以为任意类型,且可以有一个可选的注释或文档字符串,也可以有默认值。
- List: 表示具有某种元素类型的值的集合。元素字段有一个在表模式中唯一的整数ID。元素可以为可选或必需,可以为任意类型。
- Map:表示键值对的集合,具有键类型和值类型。键字段和值字段都有一个在表模式中唯一的整数ID。映射键是必需的,而映射值可以为可选或必需。映射键和映射值可以为任意类型,包括嵌套类型。
半结构化类型
- 变体类似于JSON,但具有更广泛的基本值集合,包括日期、时间戳、带时区的时间戳、二进制和小数。
- 变体值可能包含嵌套类型:
- 数组 (Array): 是变体值的有序集合。
- 对象 (Object): 是字段的集合,每个字段包含一个字符串键和一个变体值。
- 作为一种半结构化类型,变体与Iceberg其他数据类型的区别为:
- 变体数组类似于列表,但可以包含任何变体值,而不是固定的元素类型。
- 变体对象类似于结构,但可以包含由名称标识的可变字段,并且字段值可以是任何变体值,而不是固定的字段类型。