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 值。 |
本页内容是否解决了您的问题?