跳到主要内容
版本:Next

Gravitino 类型映射

本文档描述了使用 Apache Gravitino 作为元数据源时,Gravitino 与 SeaTunnel 之间的类型映射关系。类型转换由 GravitinoTableSchemaConvertor 处理。

概述

当 SeaTunnel 从 Gravitino 读取表结构时,Gravitino 的列类型会自动转换为对应的 SeaTunnel 数据类型。这种映射使得 Gravitino 管理的元数据能够无缝集成到 SeaTunnel 的数据处理管道中。

基础类型映射

Gravitino 类型Gravitino JSON 表示SeaTunnel 类型SeaTunnel 类型关键字Java 类型说明
BooleanbooleanBasicType.BOOLEAN_TYPEbooleanjava.lang.Boolean布尔类型
BytebyteBasicType.BYTE_TYPEtinyintjava.lang.Byte1字节整数
Unsigned Bytebyte unsignedBasicType.BYTE_TYPEtinyintjava.lang.Byte无符号字节(unsigned标志被忽略)
ShortshortBasicType.SHORT_TYPEsmallintjava.lang.Short2字节整数
Unsigned Shortshort unsignedBasicType.SHORT_TYPEsmallintjava.lang.Short无符号短整型(unsigned标志被忽略)
IntegerintegerBasicType.INT_TYPEintjava.lang.Integer4字节整数
Unsigned Integerinteger unsignedBasicType.INT_TYPEintjava.lang.Integer无符号整型(unsigned标志被忽略)
LonglongBasicType.LONG_TYPEbigintjava.lang.Long8字节整数
Unsigned Longlong unsignedBasicType.LONG_TYPEbigintjava.lang.Long无符号长整型(unsigned标志被忽略)
FloatfloatBasicType.FLOAT_TYPEfloatjava.lang.Float单精度浮点数
DoubledoubleBasicType.DOUBLE_TYPEdoublejava.lang.Double双精度浮点数
Decimaldecimal(p, s)DecimalType(p, s)"decimal(p,s)"java.math.BigDecimal精度: 1-38, 小数位: 0-精度
StringstringBasicType.STRING_TYPEstringjava.lang.String变长字符串
FixedCharchar(l)BasicType.STRING_TYPEstringjava.lang.String定长字符串,长度存储在columnLength
VarCharvarchar(l)BasicType.STRING_TYPEstringjava.lang.String变长字符串,最大长度存储在columnLength
UUIDuuidBasicType.STRING_TYPEstringjava.lang.String通用唯一标识符
DatedateLocalTimeType.LOCAL_DATE_TYPEdatejava.time.LocalDate日期(不含时间)
TimetimeLocalTimeType.LOCAL_TIME_TYPEtimejava.time.LocalTime时间(不含日期)
Timestamptimestamp(p)LocalTimeType.LOCAL_DATE_TIME_TYPEtimestampjava.time.LocalDateTime不带时区的时间戳,p=0-12
TimestampTztimestamp_tz(p)LocalTimeType.OFFSET_DATE_TIME_TYPEtimestamp_tzjava.time.OffsetDateTime带时区的时间戳,p=0-12
BinarybinaryPrimitiveByteArrayType.INSTANCEbytesbyte[]变长二进制数据
Fixedfixed(l)PrimitiveByteArrayType.INSTANCEbytesbyte[]定长二进制数据
IntervalYearinterval_yearBasicType.STRING_TYPEstringjava.lang.String年-月间隔
IntervalDayinterval_dayBasicType.STRING_TYPEstringjava.lang.String日-时间隔

复杂类型映射

Gravitino 类型Gravitino JSON 表示SeaTunnel 类型SeaTunnel 类型关键字说明
List{"type": "list", "elementType": type, "containsNull": boolean}ArrayType"array<T>"T为元素类型
Map{"type": "map", "keyType": type, "valueType": type, "valueContainsNull": boolean}MapType"map<K,V>"K为键类型,V为值类型
Struct{"type": "struct", "fields": [...]}SeaTunnelRowType{field1=type1, field2=type2, ...}嵌套行类型
External{"type": "external", "catalogString": "user-defined"}BasicType.STRING_TYPEstring不支持的类型(如PostgreSQL的jsonb)
Union{"type": "union", "types": [...]}不支持-抛出转换错误

类型参数提取

转换器会提取类型参数作为列元数据:

类型参数提取为说明
decimal(p, s)precision, scalecolumnLength=precision, scale=scale两个值都会存储
varchar(l)lengthcolumnLength=length字符串最大长度
char(l)lengthcolumnLength=length定长字符串长度
fixed(l)lengthcolumnLength=length定长二进制长度
timestamp(p)precisioncolumnLength=precision小数秒精度(0-12)
timestamp_tz(p)precisioncolumnLength=precision小数秒精度(0-12)

索引和约束映射

Gravitino 索引映射到 SeaTunnel 约束:

Gravitino 索引类型SeaTunnel 约束类型说明
PRIMARY_KEYPrimaryKey从 fieldNames 数组提取列名
UNIQUE_KEYConstraintKey.UNIQUE_KEY列排序顺序默认为 ASC

注意事项和限制

  1. 大小写不敏感:类型匹配不区分大小写。BOOLEANbooleanBoolean 被视为相同。

  2. 无符号类型:数值类型的 unsigned 修饰符会被识别,但不影响转换后的 SeaTunnel 类型。SeaTunnel 内部使用有符号类型。

  3. 外部类型:当 Gravitino 遇到无法解析的类型(如 PostgreSQL 的 jsonb)时,会将其表示为 external 类型。SeaTunnel 会将其转换为 string 类型。

  4. 联合类型:Gravitino 的 union 类型目前不支持,会抛出转换错误。

  5. 可空性:Gravitino 列定义中的 nullable 属性会保留在 SeaTunnel Column 元数据中。

  6. Decimal 参数decimal 类型必须同时指定精度和小数位参数。没有参数或格式无效的 decimal 值会抛出错误。

相关文档