Flink1.9TableAPISql支持的DataType

更新时间:2023-07-26 20:24:54 阅读: 评论:0

Flink1.9TableAPISql⽀持的DataType
Flink 1.9 Table API & SQL 新特性主要包括如下:
全新的 SQL 类型系统:Table API & SQL 1.9 引⼊了全新的 SQL 的类型系统。以往的Table 层的类型系统复⽤了 Runtime 的
TypeInformation,但在实际操作过程当中遇到较多的限制。引⼊全新的 SQL 类型系统可以更好的对齐 SQL 语义。
DDL初步⽀持:这个版本中 Flink 还引⼊了 DDL 的初步⽀持,⽤户可以使⽤ Create Table 或 Drop Table 等简单的语法定义表格或删除表。
Table API增强:Table API 原来仅为关系表达式的 API,Table API & SQL 1.9中现在加⼊了 Map,FlatMap 等更加灵活的 API。
统⼀的Catalog API:Table API & SQL 1.9 引⼊了统⼀的 Catalog API 之后,可以⽅便的和其它的 Catalog 对接。⽐如常见的 Hive,可以通过统⼀的 Catalog API,实现与 astore 交互的插件,让 Flink 可以直接读取和处理 Hive 中的表。一场误会
Blink planner:Table API 增加了 Blink planner 的⽀持,因为在底层的 Runtime 做了较⼤的变化后,上层需要 SQL 的 Planner 与底层的
Runtime 进⾏对接。为了确保原来的 Table API ⽤户尽量不受影响,社区完整保留了原来的 Flink Planner。但同时⼜引⼊了新的 Blink
planner,与新的 Runtime 设计进⾏对接。
该⽂章主要对官⽹新特性之Data Type(全新的SQL类型系统)进⾏翻译:ci.apache/projects/flink/flink-docs-relea-1.9/zh/dev/table/types.html#data-types-in-the-table-api
由于历史原因,在Flink 1.9之前,Flink的Table和SQL API数据类型与Flink的TypeInformation紧密关联。TypeInformation⽤于DataStream和DataSet API中,⾜以描述在分布式环境中序列化和反序列化基于JVM的对象所需的所有信息。
但是,TypeInformation并⾮旨在表⽰独⽴于实际JVM类的逻辑类型。过去,很难将SQL标准类型映射到此抽象。此外,某些类型不符合SQL,并且在引⼊时没有考虑更⼤的范围。
从Flink 1.9开始,Table&SQL API将获得⼀种新型系统,该系统可作为API稳定性和标准合规性的长
隔尿垫期解决⽅案。
重新设计类型系统是⼀项涉及⼏乎所有⾯向⽤户的接⼝的主要⼯作。因此,它的引⼊涵盖了多个发⾏版,社区旨在通过Flink 1.10完成此⼯作。
由于同时为Table程序添加了⼀个新的计划程序(请参阅),并⾮⽀持计划程序和数据类型的每种组合。此外,planners可能不⽀持具有所需精度或参数的每种数据类型。
**注意:**在使⽤数据类型之前,请参阅执⾏计划(planner)兼容性Table和限制部分。
数据类型
数据类型描述表⽣态系统中值的逻辑类型。它可以⽤来声明操作的输⼊和/或输出类型。
Flink的数据类型与SQL标准的数据类型术语相似,但也包含有关可有效处理标量表达式的值的可为空性的信息。
数据类型:
INT
INT NOT NULL
INTERVAL DAY TO SECOND(3)
ROW<myField ARRAY<BOOLEAN>, myOtherField TIMESTAMP(3)>
Table API中的数据类型
基于JVM的API的⽤户可以在Table API中使⽤org.apache.pes.DataType的实例,或者在定义连接器(connectors),⽬录(catalogs)或⽤户定义的函数时使⽤。
DataType实例有两个职责:般若波若密心经
**逻辑类型的声明:**这并不意味着传输或存储的具体物理表⽰,⽽是定义了基于JVM的语⾔和表⽣态系统之间的界限。
**可选的:**向执⾏计划提供有关数据物理表⽰的提⽰,这对于其他API的边缘很有⽤。
对于基于JVM的语⾔,org.apache.flink.table.api.DataTypes中提供了所有预定义的数据类型。
建议您将’*(scala中⽤‘_’表⽰)'导⼊到Table程序中,以使⽤流畅的API:
import org.apache.flink.table.api.DataTypes._
val t: DataType = INTERVAL(DAY(), SECOND(3));
物理提⽰
在基于SQL的类型系统结束且需要特定于编程的数据类型的表⽣态系统的边缘,需要物理提⽰。提⽰指⽰实现所需的数据格式。
例如,数据源可以表⽰它使⽤java.sql.Timestamp类⽽不是默认的java.time.LocalDateTime为逻辑TIMESTAMP⽣成值。有了这些信息,运⾏时就可以将产⽣的类转换为其内部数据格式。作为回报,数据接收器可以声明其从运⾏时使⽤的数据格式。
以下是如何声明桥接转换类的⽰例:
// tell the runtime to not produce or consume java.time.LocalDateTime instances
// but java.sql.Timestamp
val t: DataType = DataTypes.TIMESTAMP(3).bridgedTo(classOf[java.sql.Timestamp]);
/
/ tell the runtime to not produce or consume boxed integer arrays
// but primitive int arrays
val t: DataType = DataTypes.ARRAY(DataTypes.INT().notNull()).bridgedTo(classOf[Array[Int]]);
**注意:**通常只有在扩展API时才需要物理提⽰。sources/sinks/functions的⽆需定义此类提⽰。Table程序中的提⽰(例如
field.cast(TIMESTAMP(3).bridgedTo(Timestamp.class)))将被忽略。
执⾏计划(Planner)兼容性
如上所述,重新处理类型系统将跨越多个版本,每种数据类型的⽀持取决于所使⽤的计划程序。本节旨在总结最重要的差异。
Flink1.9合并了Blink的代码,也就意味着我们在使⽤Table API 开发程序的时候,可以选在两种不同的执⾏计划。
⼀种是原来的Flink的执⾏计划,统称OldPlanner
⼀种是Blink的执⾏计划,统称BlinkPlanner
Old Planner
Flink 1.9之前推出的Flink Old Planner主要⽀持类型信息,仅对Data type提供有限的⽀持。可以声明可以转换为Type information的Data type,以便old planner可以理解它们。
下表总结了Data type和Type information之间的区别。⼤多数简单类型以及⾏类型均保持不变。时间类型,数组类型和⼗进制类型需要特别注意。不允许使⽤其他提⽰。
对于“Type Information ”列,该表省略了前缀org.apache.flink.table.api.Types。
对于“Data Type Reprentation”列,该表省略了前缀org.apache.flink.table.api.DataTypes。
Type Information Java Expression String Data Type Reprentation STRING()STRING STRING()
BOOLEAN()BOOLEAN BOOLEAN()
BYTE()BYTE TINYINT()
SHORT()SHORT SMALLINT()
INT()INT INT()
LONG()LONG BIGINT()
FLOAT()FLOAT FLOAT()
DOUBLE()DOUBLE DOUBLE()
ROW(...)ROW<...>ROW(...) Type Information Java Expression String Data Type Reprentation BIG_DEC()DECIMAL[DECIMAL()]
SQL_DATE()SQL_DATE DATE().bridgedTo(java.sql.Date.class)
SQL_TIME()SQL_TIME TIME(0).bridgedTo(java.sql.Time.class)
SQL_TIMESTAMP()SQL_TIMESTAMP TIMESTAMP(3).bridgedTo(java.sql.Timestamp.class)
INTERVAL_MONTHS()INTERVAL_MONTHS INTERVAL(MONTH()).bridgedTo(Integer.class)
INTERVAL_MILLIS()INTERVAL_MILLIS INTERVAL(DataTypes.SECOND(3)).bridgedTo(Long.class)
PRIMITIVE_ARRAY(...)PRIMITIVE_ARRAY<...>Null().bridgedTo(PRIMITIVE.class))
猴字的笔顺
PRIMITIVE_ARRAY(BYTE())PRIMITIVE_ARRAY<BYTE>BYTES()
OBJECT_ARRAY(...)OBJECT_ARRAY<...>ARRAY(DATATYPE.bridgedTo(OBJECT.class))
MULTISET(...)MULTISET(...)
MAP(..., ...)MAP<...,...>MAP(...)
other generic types ANY(...)
注意:新型数据类型是否有问题。⽤户可以随时回退以键⼊在org.apache.flink.table.api.Types中定义的信息。
New Blink Planner
新的Blink planner程序⽀持Old planner程序的所有类型。包括列出的Java表达式字符串和type information.。
⽀持以下数据类型:
Data Type Remarks for Data Type
STRING CHAR and VARCHAR are not supported yet.
钥匙作文BOOLEAN
BYTES BINARY and VARBINARY are not supported yet.
DECIMAL Supports fixed precision and scale.
TINYINT
SMALLINT
INTEGER
BIGINT
FLOAT
DOUBLE
DATE
TIME Supports only a precision of 0.
TIMESTAMP Supports only a precision of 3.
TIMESTAMP WITH LOCAL TIME ZONE Supports only a precision of 3.
INTERVAL Supports only interval of MONTH and SECOND(3).
ARRAY
MULTISET
MAP
Data Type Remarks for Data Type
ROW
ANY
局限性
Java Expression String: Table API中的Java表达式字符串,例如table.lect(“ field.cast(STRING)”)尚未更新为新类型的系统。使⽤old planner部分中声明的字符串表⽰形式。
Connector Descriptors and SQL Client:描述符字符串表⽰形式尚未更新为新类型系统。使⽤在“”部分中声明的字符串表⽰形式
Ur-defined Functions: ⽤户定义的函数尚不能声明数据类型。
北京所有大学排名Data Type 列表
本节列出了所有预定义的数据类型。对于基于JVM的Table API,这些类型在org.apache.flink.table.api.DataTypes中也可⽤。
字符串
CHAR
定长字符串的数据类型。
SQL
CHAR
CHAR(n)
JAVA/SCALA
DataTypes.CHAR(n)
可以使⽤CHAR(n)声明类型,其中n是代码点数。n的值必须介于1到2,147,483,647(包括两者)之间。如果未指定长度,则n等于1。STRING是VARCHAR(2147483647)的同义词。
烈士的故事
VARCHAR / STRING
优美词句摘抄大全可变长度字符串的数据类型。
SQl
VARCHAR
VARCHAR(n)
STRING
JAVA/SCALA
DataTypes.VARCHAR(n)
DataTypes.STRING()
可以使⽤VARCHAR(n)声明类型,其中n是最⼤代码点数。n的值必须介于1到2,147,483,647(包括两者)之间。如果未指定长度,则n 等于1。
STRING是VARCHAR(214748364)的同义词。
桥接到JVM类型
Java Type Input Output Remarks
java.lang.String X X Default
X X Assumes UTF-8 encoding.
byte[]
Java Type Input Output Remarks
⼆进制字符串
BINARY
固定长度的⼆进制字符串(=字节序列)的数据类型。
SQL
BINARY
BINARY(n)
JAVA/SCALA
DataTypes.BINARY(n)
可以使⽤BINARY(n)声明类型,其中n是字节数。n的值必须介于1到2,147,483,647(包括两者)之间。如果未指定长度,则n等于1。桥接到JVM类型
Java Type Input Output Remarks
byte[]X X Default
精确数值
DECIMAL
具有固定精度和⼩数位数的⼗进制数字的数据类型。
SQL
DECIMAL
DECIMAL(p)
DECIMAL(p, s)
DEC
DEC(p)
DEC(p, s)
NUMERIC
NUMERIC(p)
NUMERIC(p, s)
JAVA/SCALA
DataTypes.DECIMAL(p, s)
可以使⽤DECIMAL(p,s)声明类型,其中p是数字(精度)中的位数,⽽s是数字(⼩数位)中⼩数点右边的位数。p的值必须介于1到38之间(包括两者之间)。s的值必须介于0到p之间(包括两者之间)。p的默认值为10。s的默认值为0。
NUMERIC(p,s)和DEC(p,s)是此类型的同义词。
桥接到JVM类型
Java Type Input Output Remarks
java.math.BigDecimal X X Default
TINYINT
1字节有符号整数的数据类型,其值从-128到127。
SQL

本文发布于:2023-07-26 20:24:54,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1097817.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:类型   数据类型   系统   字符串   声明
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图