数据类型

最近更新时间:2023-06-21 15:21:45

我的收藏
流计算 Oceanus 采用符合 ANSI SQL 规范的定义,支持丰富的数据类型。用户在使用 CREATE TABLE 语句定义一个数据表时,可以用这些数据类型来定义每个字段的类型。

支持的类型列表

类型名称
使用说明
CHAR
CHAR(n)
定长字符串。n 表示容纳的字符数,默认为1,即 CHAR 等价于 CHAR(1)。
VARCHAR
VARCHAR(n)
STRING
可变长度字符串。n 表示最多容纳的字符数,默认为1,即 VARCHAR 等价于 VARCHAR(1)。STRING 等价于 VARCHAR(2147483647)。
BINARY
BINARY(n)
固定长度的二进制字符串。n 表示容纳的字节数量,默认为1,即 BINARY 等价于 BINARY(1)。
VARBINARY
VARBINARY(n)
BYTES
可变长度的二进制字符串。n 表示容纳的字节数量,默认为1,即 VARBINARY 等价于 VARBINARY(1)。BYTES 等价于 VARBINARY(2147483647)。
DECIMAL
DECIMAL(p)
DECIMAL(p, s)
DEC
DEC(p)
DEC(p, s)
NUMERIC
NUMERIC(p)
NUMERIC(p, s)
固定精度的实数(定点数)。
p 表示数字的总位数(精度),取值区间为[1,38],默认值是10。
s 表示小数点右边的位数(尾数),取值区间为[0,p],默认值是0。DEC 和 NUMERIC 是 DECIMAL 的别名,可以任意互换使用,即 DECIMAL(p, s) 等价于 DEC(p, s) 也等价于 NUMERIC(p, s)。
TINYINT
1个字节的整数。等价于 Java 的 Byte 类型,取值范围是[-128,127]。
SMALLINT
2个字节的整数。等价于 Java 的 Short 类型,取值范围是[-32768,32767]。
INT
4个字节的整数。等价于 Java 的 Integer 类型,取值范围是[-2147483648,2147483647]。
BIGINT
8个字节的整数。等价于 Java 的 Long 类型,取值范围是[-9223372036854775808,9223372036854775807]。
FLOAT
4个字节的单精度浮点数。等价于 Java 的 Float 类型。
DOUBLE
8个字节的双精度浮点数。等价于 Java 的 Double 类型。
DATE
日期类型,包含年-月-日。取值范围是[0000-01-01,9999-12-31]。
TIME
TIME(p)
不含时区信息的时间类型,包含时-分-秒及纳秒信息。
取值范围是[00:00:00.000000000,23:59:59.999999999]。
p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为0。
此类型不支持闰秒。类似于 Java 的 LocalTime 类型。
TIMESTAMP
TIMESTAMP(p)
TIMESTAMP WITHOUT TIME ZONE
TIMESTAMP(p) WITHOUT TIME ZONE
不含时区信息的时间戳类型,精度可以达到纳秒级别。
取值范围是[0000-01-01 00:00:00.000000000,9999-12-31 23:59:59.999999999]。
p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为6。
此类型不支持与 BIGINT(Java 的 Long 类型)之间相互转换。TIMESTAMP WITHOUT TIMEZONE 类型等价于 TIMESTAMP 类型。
此类型不支持闰秒。类似于 Java 的 Timestamp 类型。
TIMESTAMP WITH TIME ZONE
TIMESTAMP(p) WITH TIME ZONE
含时区信息的时间戳类型。
取值范围是[0000-01-01 00:00:00.000000000 +14:59,9999-12-31 23:59:59.999999999 -14:59]。
p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为6。
每条该类型的数据,都含有各自的时区信息。
此类型不支持闰秒。类似于 Java 的 OffsetDateTime 类型。
TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP(p) WITH LOCAL TIME ZONE
本地时区
信息的时间戳类型。
取值范围是[0000-01-01 00:00:00.000000000 +14:59,9999-12-31 23:59:59.999999999 -14:59]。
p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为6。
时区数据不存储在每条数据中,而是遵循全局的时区设置。
此类型不支持闰秒。类似于 Java 的 OffsetDateTime 类型。
INTERVAL YEAR
INTERVAL YEAR(p)
INTERVAL YEAR(p) TO MONTH
INTERVAL MONTH
表示以年和月表示的一段粗粒度的时间间隔,精度为月份。
语法为+年数-月数,例如+04-02。
取值范围是[-9999-11,+9999-11]。
p 表示年的精度位数,取值范围是[1,4],默认为2。
INTERVAL DAY
INTERVAL DAY(p1)
INTERVAL DAY(p1) TO HOUR
INTERVAL DAY(p1) TO MINUTE
INTERVAL DAY(p1) TO SECOND(p2)
INTERVAL HOUR
INTERVAL HOUR TO MINUTE
INTERVAL HOUR TO SECOND(p2)
INTERVAL MINUTE
INTERVAL MINUTE TO SECOND(p2)
INTERVAL SECOND
INTERVAL SECOND(p2)
表示以天、时、分、秒、纳秒表示的细粒度时间间隔,最高精度为纳秒。
取值范围是[-999999 23:59:59.999999999,+999999 23:59:59.999999999]。
p1 表示天数精度的位数,p1 的取值范围是[1,6],默认为2。
p2 表示秒的小数位数,p2 的取值范围是[0,9],默认为6。
ARRAY<t>
t ARRAY
数组类型,大小固定为2147483647。
t 表示数组中元素的类型。
ARRAY<t> 等价于 t ARRAY,例如 ARRAY<INT> 与 INT ARRAY 含义一致。
MAP<kt, vt>
键值对映射类型,其中 kt 是键(key)的类型,vt 是值(value)的类型。
MULTISET<t>
t MULTISET
允许重复元素的集合类型,别称为 Bag。同样地,MULTISET<t> 等价于 t MULTISET。
ROW<n0 t0, n1 t1, ...>
ROW<n0 t0 'd0', n1 t1 'd1', ...>
ROW(n0 t0, n1 t1, ...)
ROW(n0 t0 'd0', n1 t1 'd1', ...)
允许包含多个字段的复合类型,每个字段有自己的类型,类似于其他语言的 Struct 及 Tuple 类型。
n 表示字段名。
t 是字段的逻辑类型。
d 是字段的描述。
尖括号和圆括号的两种写法是等价的,例如 ROW(field1 INT, field2 BOOLEAN) 等同于 ROW<field1 INT, field2 BOOLEAN>
BOOLEAN
三值布尔型,可选值为 TRUE、FALSE 和 UNKNOWN。如果不允许出现 UNKNOWN,可以定义为 BOOLEAN NOT NULL 类型。
RAW('class', 'snapshot')
可表示任意类型,例如 Flink 无法识别或者不需要识别的类型。
class 表示原始类型。
snapshot 表示 Base64 编码的序列化后的 TypeSerializerSnapshot 定义。
NULL
空值,类似 Java 等语言中的 null 值。