跳到主要内容
版本: 0.7

数据类型

FlinkSQL 采用符合 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)类型可以使用 BINARY (n)声明。n 表示容纳的字节数量,默认为1,
即 BINARY 等价于 BINARY(1)
VARBINARY VARBINARY(n) BYTES类型可以使用 VARBINARY (n)声明。其中 n 是最大字节数。N 的值
必须介于1和2之间,147,483,647(包括两者)。如果没有指定长度,
则 n 等于1。BYTES 等价于 VARBINARY(2147483647)
DECIMAL
DECIMAL(p)
DECIMAL(p,s)
DEC
DEC(p)
DEC(p, s)
NUMERIC
NUMERIC(p)
NUMERIC(p, s)
类型可以使用 DECIMAL (p,s)声明,p 表示数字的总位数(精度),
取值区间为[1,38],默认值是10。s 表示小数点右边的位数
(尾数),取值区间为[0,p],默认值是0。NUMERIC (p,s)
和 DEC (p,s)与这种类型等价,可以互换使用
TINYINT1字节有符号整数的数据类型,取值范围是[-128,127]
SMALLINT2字节有符号整数的数据类型,取值范围是[-32768,32767]
INT
INTEGER
4字节有符号整数的数据类型,取值范围是[-2147483648,
2147483647]。INTEGER等价于这个类型
BIGINT8字节有符号整数的数据类型,取值范围是[-9223372036854775808,9223372036854775807]
FLOAT4字节单精度浮点数的数据类型,
DOUBLE
DOUBLE PRECISION
8个字节的双精度浮点数,DOUBLE PRECISION等价于这个类型
DATE由年月日组成的数据类型,取值范围是[0000-01-01,9999-12-31]
TIME
TIME(p)
不带时区的时间的数据类型,包括小时: 分钟: 秒。
取值范围是[00:00:00.000000000,23:59:59.999999999]
p 表示秒的小数位精度,取值范围是[0,9]。如果未指定,默认为0
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之间(两者都包含在内)。
如果未指定精度,则 p 等于6。
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]
类型可以使用 TIMESTAMP (p) WITH TIME ZONE 声明,
其中 p 是小数秒的位数(精度)。P 的值必须介于0和9之
间(两者都包含在内)。如果没有
如果指定了精度,p 等于6
INTERVAL YEAR
INTERVAL YEAR(p)
INTERVAL YEAR(p) TO MONTH
INTERVAL MONTH
类型可以使用上面的组合声明,其中 p 是年的位数(年精度)。P 的值必须介于1和4之间(两者都包含在内)。如果未指定年份精度,则 p 等于2。取值范围是[-9999-11,+9999-11]
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之间(两者都包括在内)。
p2是小数秒的位数(小数精度)。P2的值必须介于0和9之间(两者都包含在内)。默认情况下它等于2。
ARRAY类型可以使用 ARRAY<t> 声明,其中 t 是所包含元素的数据类型
MAP类型可以使用 MAP<kt, vt> 来声明,其中 kt 是关键元素的数据类型,vt 是值元素的数据类型
MULTISET类型可以使用 MULTISET <t> 声明,其中 t 是所包含元素的数据类型。
ROW可以使用 ROW < n0 t0’d 0’,n1 t1’d 1’,... > 声明类型,其中 n 是字段的唯一名称,t 是字段的逻辑类型,d 是字段的描述.ROW (...)是更接近 SQL 标准的同义词。例如,ROW (myField INT,myOtherField BOOLEAN)等价于 ROW < myField INT,myOtherField BOOLEAN >
BOOLEAN任意序列化类型的数据类型。这种类型是表生态系统中的一个黑盒子,仅在边缘反序列化
RAW类型可以使用 RAW (‘ class’,‘ snapshot’)声明,其中类是原始类,快照是 base64编码中的序列化 TypeSerializerSnapshot。通常,类型字符串不是直接声明的,而是在持久化类型时生成的。
NULL表示非类型化 NULL 值的数据类型