数据类型
最近更新时间:2020-09-16 17:03:44
流计算 Oceanus 采用符合 ANSI SQL 规范的定义,支持丰富的数据类型。用户在使用 CREATE TABLE
语句定义一个数据表时,可以用这些数据类型来定义每个字段的类型。
支持的类型列表
类型名称 |
使用说明 |
CHARCHAR(n) |
定长字符串。n 表示容纳的字符数,默认为1,即 CHAR 等价于 CHAR(1)。 |
VARCHARVARCHAR(n)STRING |
可变长度字符串。n 表示最多容纳的字符数,默认为1,即 VARCHAR 等价于 VARCHAR(1)。STRING 等价于 VARCHAR(2147483647)。 |
BINARYBINARY(n) |
固定长度的二进制字符串。n 表示容纳的字节数量,默认为1,即 BINARY 等价于 BINARY(1)。 |
VARBINARYVARBINARY(n)BYTES |
可变长度的二进制字符串。n 表示容纳的字节数量,默认为1,即 VARBINARY 等价于 VARBINARY(1)。BYTES 等价于 VARBINARY(2147483647)。 |
DECIMALDECIMAL(p)DECIMAL(p, s)DECDEC(p)DEC(p, s)NUMERICNUMERIC(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]。 |
TIMETIME(p) |
不含时区信息的时间类型,包含时-分-秒及纳秒信息。取值范围是[00:00:00.000000000,23:59:59.999999999]。p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为0。此类型不支持闰秒。类似于 Java 的 LocalTime 类型。 |
TIMESTAMPTIMESTAMP(p)TIMESTAMP WITHOUT TIME ZONETIMESTAMP(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 ZONETIMESTAMP(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 ZONETIMESTAMP(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 YEARINTERVAL YEAR(p)INTERVAL YEAR(p) TO MONTHINTERVAL MONTH |
表示以年和月表示的一段粗粒度的时间间隔,精度为月份。语法为+年数-月数,例如+04-02。取值范围是[-9999-11,+9999-11]。p 表示年的精度位数,取值范围是[1,4],默认为2。 |
INTERVAL DAYINTERVAL DAY(p1)INTERVAL DAY(p1) TO HOURINTERVAL DAY(p1) TO MINUTEINTERVAL DAY(p1) TO SECOND(p2)INTERVAL HOURINTERVAL HOUR TO MINUTEINTERVAL HOUR TO SECOND(p2) INTERVAL MINUTEINTERVAL MINUTE TO SECOND(p2)INTERVAL SECONDINTERVAL 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 值。 |