FLINK Data Types 数据类型词典
Flink SQL提供了丰富的本地数据类型供用户使用。
Data Type 数据类型
数据类型描述了表生态系统中值的逻辑类型。它可用于声明操作的输入和/或输出类型。
Flink的数据类型类似于SQL标准的数据类型术语,但还包含有关值的可空性的信息,以便有效处理标量表达式。
以下是数据类型的示例:
- INT
- INT NOT NULL
- INTERVAL DAY TO SECOND(3)
- ROW<myField ARRAY, myOtherField TIMESTAMP(3)>
下面是所有预定义数据类型的列表。
Table API中的数据类型
Java/Scala
在基于JVM的API中,用户在Table API中使用org.apache.flink.table.types.DataType的实例,或者在定义连接器、目录或用户定义函数时使用。
DataType实例有两个职责:
- 声明一个逻辑类型,它不会暗示传输或存储的具体物理表示,但定义了基于JVM/Python语言和表生态系统之间的边界。
- 可选:向规划器提供有关数据物理表示的提示,在与其他API的边缘处很有用。
对于基于JVM的语言,所有预定义数据类型都可以在org.apache.flink.table.api.DataTypes中找到。
Python
Java
建议在表程序中添加星号导入以获得流畅的API:
from org.apache.flink.table.api.DataTypes import *
然后,可以使用以下语法声明数据类型:
t = INTERVAL(DAY(), SECOND(3))
Scala
Python
物理提示
物理提示在表生态系统的边缘处需要,在这些边缘处需要编程特定的数据类型,而SQL类型系统无法满足需求。提示指示实现期望的数据格式。
例如,数据源可以使用java.sql.Timestamp类表示逻辑TIMESTAMP的值,而不是使用默认的java.time.LocalDateTime。有了这个信息,运行时可以将生成的类转换为其内部数据格式。相反,数据接收器可以声明它从运行时消耗的数据格式。
以下是如何声明桥接转换类的示例:
Java
告诉运行时不要生成或消耗java.time.LocalDateTime实例,而是使用java.sql.Timestamp:
DataType t = DataTypes.TIMESTAMP(3).bridgedTo(java.sql.Timestamp.class);
告诉运行时不要生成或消耗装箱整数数组,而是使用原始整数数组:
DataType t = DataTypes.ARRAY(DataTypes.INT().notNull()).bridgedTo(int[].class);
Scala
请注意,通常仅在扩展API时才需要物理提示。预定义的源/接收器/函数的用户无需定义此类提示。在表程序中(例如,field.cast(TIMESTAMP(3).bridgedTo(Timestamp.class))),忽略物理提示。
数据类型列表
本节列出了所有预定义的数据类型。
Java/Scala
对于基于JVM的Table API,这些类型也在org.apache.flink.table.api.DataTypes中可用。
Python
默认规划器支持以下一组SQL类型:
| 数据类型 | 数据类型备注 |
|---|---|
| CHAR | |
| VARCHAR | |
| STRING | |
| BOOLEAN | |
| BINARY | |
| VARBINARY | |
| BYTES | |
| DECIMAL | 支持固定精度和比例 |
| TINYINT | |
| SMALLINT | |
| INTEGER | |
| BIGINT | |
| FLOAT | |
| DOUBLE | |
| DATE | |
| TIME | 仅支持0位精度 |
| TIMESTAMP | |
| TIMESTAMP_LTZ | 仅支持月和秒的间隔 |
| ARRAY | |
| MULTISET | |
| MAP | |
| ROW | |
| RAW | |
| Structured types | 仅在用户定义函数中暴露 |
字符串类型
CHAR
CHAR是一个定长字符字符串的数据类型。
声明方式:
- SQL:
CHAR - Java/Scala:
- Python:
可以使用CHAR(n)声明该类型,其中n是代码点的数量。n必须介于1和2,147,483,647之间(包括两者)。如果未指定长度,则n等于1。
VARCHAR / STRING
VARCHAR / STRING是可变长度字符字符串的数据类型。
声明方式:
- SQL:
VARCHAR,VARCHAR(n),STRING - Java/Scala:
- Python:
可以使用VARCHAR(n)声明该类型,其中n是最大代码点数。n必须介于1和2,147,483,647之间(包括两者)。如果未指定长度,则n等于1。
STRING是VARCHAR(2147483647)的同义词。
二进制字符串类型
BINARY
BINARY是定长二进制字符串(字节序列)的数据类型。
声明方式:
- SQL:
BINARY,BINARY(n) - Java/Scala:
- Python:
可以使用BINARY(n)声明该类型,其中n是字节数。n必须介于1和2,147,483,647之间(包括两者)。如果未指定长度,则n等于1。
VARBINARY / BYTES
VARBINARY / BYTES是可变长度二进制字符串(字节序列)的数据类型。
声明方式:
- SQL:
VARBINARY,VARBINARY(n),BYTES - Java/Scala:
- Python:
可以使用VARBINARY(n)声明该类型,其中n是最大字节数。n必须介于1和2,147,483,647之间(包括两者)。如果未指定长度,则n等于1。
BYTES是VARBINARY(2147483647)的同义词。
精确数值类型
DECIMAL
DECIMAL是具有固定精度和比例的十进制数的数据类型。
声明方式:
- SQL:
DECIMAL,DECIMAL(p),DECIMAL(p, s),DEC,DEC(p),DEC(p, s),NUMERIC,NUMERIC(p),NUMERIC(p, s) - Java/Scala:
- Python: </

本文围绕Flink数据类型展开,介绍了Table API中Java/Scala和Python的数据类型,涵盖字符串、二进制、数值、日期时间等类型的声明方式。还提及物理提示、自定义数据类型,以及Flink Table API和SQL的类型转换,包括CAST和TRY_CAST函数,同时说明了旧版本类型转换行为。
最低0.47元/天 解锁文章
1340

被折叠的 条评论
为什么被折叠?



