数据类型

最近更新时间:2020-09-16 17:03:44

流计算 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 值。