【flink 床头书系列】data Types 数据类型词典

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

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实例有两个职责:

  1. 声明一个逻辑类型,它不会暗示传输或存储的具体物理表示,但定义了基于JVM/Python语言和表生态系统之间的边界。
  2. 可选:向规划器提供有关数据物理表示的提示,在与其他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:
  • </
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值