FLINK 1.9表API&SQLデータ型のサポート

FLINK 1.9テーブルAPI&SQLの新機能は次のとおりです。

  • 新しいSQL型システム:表API&SQL 1.9を発表新しいSQL型システム。テーブルの従来型システムランタイム種別情報に多重層、実際の操作の過程で多くの制約が発生しました。新しいSQL型システムの導入は、より良いSQLセマンティクスを整列させることができます。
  • 最初のサポートDDL:FLINKこのバージョンは、ユーザーがテーブルを定義するための表の作成、またはドロップ表や他の単純な構文を使用するか、テーブルを削除することができ、DDLのための予備的なサポートを導入しています。
  • テーブルAPIの拡張機能:テーブルAPIのAPIだけのオリジナルの関係式、表API&SQLは、今より柔軟なAPI 1.9として地図、FlatMapに参加しました。
  • 統一カタログAPI:表API&SQL 1.9が導入統一カタログAPIの後に、あなたは簡単に、他のカタログドッキングすることができます。そのような一般的なハイブとして、統一されたカタログAPIを介して、直接に読み取られて処理FLINKハイブテーブルすることができるプラグインとHive.metastore対話を達成します。
  • ブリンクプランナー:ランタイムの下部にドッキングのための基礎となるランタイムとの大きな変更、必要なSQLプランナーの上層を行うにはので、表APIは、サポートブリンクプランナーを追加します。オリジナルのテーブルAPIのユーザーはできるだけ影響を受けないことを確実にするために、コミュニティの元FLINKプランナーそのまま。しかし同時に、それは、新しいランタイムデザインとドッキングし、新しい点滅プランナーを導入しました。

翻訳するデータの種類(新しいSQL型システム)の公式ウェブサイトの新機能の主な記事します。https://ci.apache.org/projects/flink/flink-docs-release-1.9/zh/dev/table/types。 htmlの#データ型・イン・ザ・テーブル-API

FLINK 1.9の前に歴史的な理由により、密接に関連しFLINKの表とSQL APIデータ型と種別情報のFLINKによります。でDataStreamデータセットAPI、情報のための種別情報は、所望のJVMベースの分散環境内のすべてのオブジェクトシリアライゼーションおよびデシリアライゼーションを記述するのに十分です。

しかし、種別情報を表すことを意図するものではないとは無関係に、実際のJVMクラスの論理型。過去には、それがこの抽象標準のSQL型マッピングすることは困難です。また、特定の種類は、SQLに準拠していない、と紹介したときに、より大きな範囲を考慮していません。

最初からFLINK 1.9、表&SQL APIと標準APIの安定性と長期的なコンプライアンスソリューションとして使用することができる新しいシステムを得ること。

再設計は、ほぼすべての主要なユーザー指向のインタフェース作業を伴うシステムのタイプです。したがって、その導入はFLINK 1.10で、この作業を完了するために複数のリリース、コミュニティの目的をカバーしています。

表のための新しいプログラムの計画を追加しながらので(参照FLINK-11439、サポートプログラムおよびプログラム・データ・タイプのないすべての組み合わせ)。加えて、計画者は、必要な精度でデータまたはパラメータのすべてのタイプをサポートしないかもしれません。

**注:**データ型を使用する前に、実施計画(プランナー)互換性表と制限のセクションを参照してください。

データの種類

生態系のデータタイプ値説明表論理型。これは、入力及び/又は出力操作型宣言するために使用することができます。

SQLデータ型へのFLINKデータ型は、同様の標準を専門用語でなく、スカラー式でも効果的な治療のヌル値に関する情報が含まれています。

データの種類:

  • INT
  • INT NOT NULL
  • INTERVAL DAY TO SECOND(3)
  • ROW<myField ARRAY<BOOLEAN>, myOtherField TIMESTAMP(3)>

表APIデータ型

APIユーザーは、(コネクタ)表API、またはコネクタの定義にJVMインスタンスorg.apache.flink.table.types.DataTypeを使用する機能ディレクトリ(カタログ)を使用するか、ユーザ定義に基づいてもよいです。

データ型のインスタンスは、二つの役割があります。

論理型宣言は、**:**これは、特定の物理的輸送または貯蔵を発現するが、テーブルとJVM生態系の言語との間に画定された境界に基づいていることを意味するものではありません。

**オプション:**プロンプトが有用な他のAPIのエッジのための物理的な実施計画に関連するデータを示していることを提供しています。

JVMベースの言語については、org.apache.flink.table.api.DataTypesは、事前に定義されたデータ型のすべてを提供します。

私たちはあなたの「*(とScalaの」流暢な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の物理的なプロンプトを必要としています。そのようなヒントを定義する必要なく、ソース/シンク/機能。テーブルプログラムプロンプト(例えばfield.cast(TIMESTAMP(3).bridgedTo(Timestamp.class)))は無視されます。

実施計画(プランナー)との互換性

上述したように、再処理型システムは、各データ型のサポートプログラムの複数のバージョンをまたがる使用しているプログラムによって異なります。このセクションでは、最も重要な相違点を要約することを意図しています。

Flink1.9は、我々はテーブルAPIの開発プロセスを使用した場合の手段は、2つの異なる実行計画を選択することができます点滅コードが組み込まれています。

一つは総称して、元の実行計画FLINKあるOldPlanner

一つは総称して、ブリンク実施計画であるBlinkPlanner

オールド・プランナー

FLINK 1.9 FLINK旧プランナーの打ち上げは、情報の主な種類をサポートする前に、唯一のデータ型がサポートを制限しました。あなたは、に変換することができます宣言することができる情報入力種類のデータを古いプランナーがそれらを理解できるように、。

次の表は、まとめたデータ型型情報の区別を。最もシンプルなタイプとラインタイプは変更されません。時刻型、配列型とdecimal型は、特別な注意が必要です。他のヒントはありません。

「について型情報」欄、テーブルには、接頭辞org.apache.flink.table.api.Typesを省略しています。

「のためにデータ表現タイプ」欄、テーブルには、接頭辞org.apache.flink.table.api.DataTypesを省略しています。

型情報 Java式の文字列 データ型の表現
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(...)
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<...> ARRAY(DATATYPE.notNull().bridgedTo(PRIMITIVE.class))
PRIMITIVE_ARRAY(BYTE()) PRIMITIVE_ARRAY<BYTE> BYTES()
OBJECT_ARRAY(...) OBJECT_ARRAY<...> ARRAY(DATATYPE.bridgedTo(OBJECT.class))
MULTISET(...) MULTISET(...)
MAP(..., ...) MAP<...,...> MAP(...)
他のジェネリック型 ANY(...)

注:新しいデータ型の問題がある場合。ユーザーは、常にでorg.apache.flink.table.api.Typesで定義されている情報を入力するためにフォールバックすることができます。

新ブリンクプランナー

新しいブリンクプランナーは、すべてのタイプにオールド・プランナープログラムをサポートしています。などのJava表現文字列と種類の情報が記載されています。..

これは、次のデータ型をサポートしています。

データ・タイプ データ型のための備考
STRING CHARそしてVARCHARまだサポートされていません。
BOOLEAN
BYTES BINARYそしてVARBINARYまだサポートされていません。
DECIMAL 固定精度およびスケールをサポートします。
TINYINT
SMALLINT
INTEGER
BIGINT
FLOAT
DOUBLE
DATE
TIME の精度のみをサポートします0
TIMESTAMP の精度のみをサポートします3
TIMESTAMP WITH LOCAL TIME ZONE の精度のみをサポートします3
INTERVAL 唯一の間隔サポートMONTHSECOND(3)
ARRAY
MULTISET
MAP
ROW
ANY

制限

式文字列のJava:このようtable.select(「field.cast(STRING)」として表API文字列、のJava式は ) システムの新しいタイプのために更新されていません。文字列表現古いプランナー部分を使用すると宣言しました。

記述子とSQLクライアントコネクタ:システムの記述子の文字列表現は新しいタイプに更新されていません。使用する「外部システムセクションに接続した文字列が宣言」セクション表現

ユーザー関数が定義:ユーザー定義関数は、まだデータ型を宣言することはできません。

データ型の一覧

このセクションでは、すべてのデータ型をあらかじめ定義します。JVMベースの表のAPIについて、またorg.apache.flink.table.api.DataTypesこれらのタイプの中で使用されます。

CHAR

データ型、固定長文字列。

SQL

CHAR
CHAR(n)

JAVA / SCALE

DataTypes.CHAR(n)

あなたは、CHAR(n)は、宣言型を用い、ここで、nコードポイントの数であることができます。nの値は、(両方を含む)2,147,483,647 1の間でなければなりません。長さが指定されていない場合は、nは1に等しいです。

STRINGはVARCHAR(2147483647)の同義語です。

VARCHAR / STRING

可変長文字列データ型。

SQL

VARCHAR
VARCHAR(n)

STRING

JAVA / SCALE

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
byte[] X X Assumes UTF-8 encoding.

二进制字符串

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

TINYINT

JAVA/SCALA

DataTypes.TINYINT()

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Byte X X Default
byte X (X) Output only if type is not nullable.

SMALLINT

2字节有符号整数的数据类型,其值从-32,768到32,767。

SQL

SMALLINT

JAVA/SCALA

DataTypes.SMALLINT()

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Short X X Default
short X (X) Output only if type is not nullable.

INT

一个4字节有符号整数的数据类型,其值从-2,147,483,648到2,147,483,647。

SQL

INT

INTEGER

JAVA/SCALA

DataTypes.INT()

INTEGER是此类型的同义词。

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Integer X X Default
int X (X) Output only if type is not nullable.

BIGINT

一个8字节有符号整数的数据类型,其值从-9,223,372,036,854,775,808到9,223,372,036,854,775,807。

SQL

BIGINT

JAVA/SCALA

DataTypes.BIGINT()

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Long X X Default
long X (X) Output only if type is not nullable.

近似数值

FLOAT

4字节单精度浮点数的数据类型。与SQL标准相比,该类型不带参数。

SQL

FLOAT

JAVA/SCALA

DataTypes.FLOAT()

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Float X X Default
float X (X) Output only if type is not nullable.

DOUBLE

8字节双精度浮点数的数据类型。

SQL

DOUBLE

DOUBLE PRECISION

JAVA/SCALA

DataTypes.DOUBLE()

DOUBLE PRECISION是此类型的同义词。

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Double X X Default
double X (X) Output only if type is not nullable.

日期和时间

DATE

日期的数据类型,由年-月-日组成,值的范围从0000-01-01到9999-12-31。与SQL标准相比,范围从0000年开始。与SQL标准相比,范围从0000年开始。

SQL

DATE

JAVA/SCALA

DataTypes.DATE()

桥接到JVM类型

Java Type Input Output Remarks
java.time.LocalDate X X Default
java.sql.Date X X
java.lang.Integer X X Describes the number of days since epoch.
int X (X) Describes the number of days since epoch. Output only if type is not nullable.

TIME

不带时区的时间的数据类型,由小时:分钟:秒[.fractional]组成,精度高达纳秒,范围从00:00:00.000000000到23:59:59.999999999。与SQL标准相比,不支持leap秒(23:59:60和23:59:61),因为语义更接近java.time.LocalTime。没有提供带时区的时间。

SQL

TIME
TIME(p)

JAVA/SCALA

DataTypes.TIME(p)

桥接到JVM类型

Java Type Input Output Remarks
java.time.LocalTime X X Default
java.sql.Time X X
java.lang.Integer X X Describes the number of milliseconds of the day.
int X (X) Describes the number of milliseconds of the day. Output only if type is not nullable.
java.lang.Long X X Describes the number of nanoseconds of the day.
long X (X) Describes the number of nanoseconds of the day. Output only if type is not nullable.

TIMESTAMP

不带时区的时间戳记的数据类型,由年-月-日hour:minute:second [.fractional]组成,精度高达纳秒,范围从0000-01-01 00:00:00.000000000到9999-12-31 23:59:59.999999999。

与SQL标准相比,不支持leap秒(23:59:60和23:59:61),因为语义更接近java.time.LocalDateTime。

不支持与BIGINT(JVM长类型)之间的转换,因为这暗示了时区。但是,此类型没有时区。有关更多类似于java.time.Instant的语义,请使用TIMESTAMP WITH LOCAL TIME ZONE。

SQL

TIMESTAMP
TIMESTAMP(p)

TIMESTAMP WITHOUT TIME ZONE
TIMESTAMP(p) WITHOUT TIME ZONE

JAVA/SCALA

DataTypes.TIMESTAMP(p)

可以使用TIMESTAMP§声明类型,其中p是小数秒(精度)的位数。p必须具有介于0和9之间的一个值(包括两者)。如果未指定精度,则p等于6。

TIMESTAMP§WITH TIME ZONE是此类型的同义词。

桥接到JVM类型

Java Type Input Output Remarks
java.time.LocalDateTime X X Default
java.sql.Timestamp X X

TIMESTAMP WITH TIME ZONE

时间戳的数据类型,时区由年-月-日hour:minute:second [.fractional]区域组成,精度达纳秒,范围从0000-01-01 00:00:00.000000000 +14:59到9999-12-31 23:59:59.999999999 -14:59。

与SQL标准相比,不支持leap秒(23:59:60和23:59:61),因为语义更接近java.time.OffsetDateTime。

与具有本地时区的TIMESTAMP相比,时区偏移量信息物理存储在每个数据中。它单独用于每个计算,可视化或与外部系统的通信。

SQL

TIMESTAMP WITH TIME ZONE
TIMESTAMP(p) WITH TIME ZONE

JAVA/SCALA

DataTypes.TIMESTAMP_WITH_TIME_ZONE(p)

可以使用TIMESTAMP§WITH TIME ZONE声明类型,其中p是小数秒(精度)的位数。p必须具有介于0和9之间的一个值(包括两者)。如果未指定精度,则p等于6。

桥接到JVM类型

Java Type Input Output Remarks
java.time.OffsetDateTime X X Default
java.time.ZonedDateTime X Ignores the zone ID.

TIMESTAMP WITH LOCAL TIME ZONE

具有本地时区的时间戳记的数据类型,该时区包括年-月-日hour:minute:second [.fractional]区域,精度达纳秒,范围从0000-01-01 00:00:00.000000000 +14:59到9999-12-31 23:59:59.999999999 -14:59。

不支持秒(23:59:60和23:59:61),因为语义更接近java.time.OffsetDateTime。

与TIMESTAMP WITH TIME ZONE相比,时区偏移量信息并非物理存储在每个基准中。相反,该类型在表生态系统边缘的UTC时区中采用java.time.Instant语义。每个数据都在当前会话中配置的本地时区中进行解释,以进行计算和可视化。

通过允许根据配置的会话时区解释UTC时间戳,此类型填补了时区空闲和时区强制时间戳类型之间的空白。

SQL

TIMESTAMP WITH LOCAL TIME ZONE
TIMESTAMP(p) WITH LOCAL TIME ZONE

JAVA/SCALA

DataTypes.TIMESTAMP_WITH_LOCAL_TIME_ZONE(p)

可以使用TIMESTAMP§WITH LOCAL TIME ZONE声明类型,其中p是小数秒(精度)的位数。p必须具有介于0和9之间的一个值(包括两者)。如果未指定精度,则p等于6。

桥接到JVM类型

Java Type Input Output Remarks
java.time.Instant X X Default
java.lang.Integer X X Describes the number of seconds since epoch.
int X (X) Describes the number of seconds since epoch. Output only if type is not nullable.
java.lang.Long X X Describes the number of milliseconds since epoch.
long X (X) Describes the number of milliseconds since epoch. Output only if type is not nullable.

INTERVAL YEAR TO MONTH

一组年月间隔类型的数据类型。

必须将类型参数化为以下分辨率之一:

  • 年间隔
  • 几年到几个月的间隔
  • 或间隔几个月

年-月的间隔由+年-月组成,其值的范围为-9999-11至+ 9999-11。

所有类型的分辨率的值表示均相同。例如,间隔为50的月间隔始终以“年间隔”格式表示(默认为“年精度”):+ 04-02。

SQL

INTERVAL YEAR
INTERVAL YEAR(p)
INTERVAL YEAR(p) TO MONTH
INTERVAL MONTH

JAVA/SCALA

DataTypes.INTERVAL(DataTypes.YEAR())
DataTypes.INTERVAL(DataTypes.YEAR(p))
DataTypes.INTERVAL(DataTypes.YEAR(p), DataTypes.MONTH())
DataTypes.INTERVAL(DataTypes.MONTH())

可以使用上述组合声明类型,其中p是年份的位数(年精度)。p的值必须介于1到4之间(包括两者之间)。如果未指定年份精度,则p等于2。

桥接到JVM类型

Java Type Input Output Remarks
java.time.Period X X Ignores the days part. Default
java.lang.Integer X X Describes the number of months.
int X (X) Describes the number of months. Output only if type is not nullable.

INTERVAL DAY TO MONTH

一组天时间间隔类型的数据类型。

必须将类型参数设置为以下分辨率之一,精度最高为纳秒:

  • 天间隔
  • 几天到几小时的间隔
  • 天到分钟的间隔
  • 天到秒的间隔
  • 小时间隔
  • 小时到几分钟的间隔
  • 几小时到几秒钟的间隔
  • 分钟的间隔
  • 分钟到秒的间隔
  • 秒间隔

白天的时间间隔由+ day hours:months:seconds.fractional组成,范围从-999999 23:59:59.999999999到+999999 23:59:59.999999999。所有类型的分辨率的值表示均相同。例如,秒间隔始终以天间隔格式(具有默认精度)表示:+00 00:01:10.000000。

SQL

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)

JAVA/SCALA

DataTypes.INTERVAL(DataTypes.DAY())
DataTypes.INTERVAL(DataTypes.DAY(p1))
DataTypes.INTERVAL(DataTypes.DAY(p1), DataTypes.HOUR())
DataTypes.INTERVAL(DataTypes.DAY(p1), DataTypes.MINUTE())
DataTypes.INTERVAL(DataTypes.DAY(p1), DataTypes.SECOND(p2))
DataTypes.INTERVAL(DataTypes.HOUR())
DataTypes.INTERVAL(DataTypes.HOUR(), DataTypes.MINUTE())
DataTypes.INTERVAL(DataTypes.HOUR(), DataTypes.SECOND(p2))
DataTypes.INTERVAL(DataTypes.MINUTE())
DataTypes.INTERVAL(DataTypes.MINUTE(), DataTypes.SECOND(p2))
DataTypes.INTERVAL(DataTypes.SECOND())
DataTypes.INTERVAL(DataTypes.SECOND(p2))

可以使用上述组合来声明类型,其中p1是天的位数(天精度),p2是小数秒的位数(分数精度)。p1的值必须介于1到6之间(包括两者之间)。p2的值必须介于0到9之间(包括两者之间)。如果未指定p1,则默认情况下等于2。如果未指定p2,则默认情况下等于6。

桥接到JVM类型

Java Type Input Output Remarks
java.time.Duration X X Default
java.lang.Long X X Describes the number of milliseconds.
long X (X) Describes the number of milliseconds. Output only if type is not nullable.

复合数据类型

ARRAY

具有相同子类型的元素数组的数据类型。

与SQL标准相比,无法指定数组的最大基数,但固定为2,147,483,647。另外,任何有效类型都支持作为子类型。

SQL

ARRAY<t>
t ARRAY

JAVA/SCALA

DataTypes.ARRAY(t)

可以使用ARRAY 声明类型,其中t是所包含元素的数据类型。ARRAY是接近SQL标准的同义词。例如,INT ARRAY等效于ARRAY 。

桥接到JVM类型

Java Type Input Output Remarks
t[] (X) (X) Depends on the subtype. Default

MULTISET

多重集的数据类型(=bbag)。与集合不同,它允许每个元素具有公共子类型的多个实例。每个唯一的值(包括NULL)都映射到某些多重性。

元素类型没有限制;确保唯一性是用户的责任。

SQL

MULTISET<t>
t MULTISET

JAVA/SCALA

DataTypes.MULTISET(t)

可以使用MULTISET 声明类型,其中t是所包含元素的数据类型。t MULTISET是接近SQL标准的同义词。例如,INT MULTISET等效于MULTISET 。

桥接到JVM类型

Java Type Input Output Remarks
java.util.Map<t, java.lang.Integer> X X Assigns each value to an integer multiplicity. Default

ROW

字段序列的数据类型。

字段由字段名称,字段类型和可选描述组成。表中某行的最特定类型是行类型。在这种情况下,该行的每一列对应于具有与该列相同序号位置的行类型的字段。

与SQL标准相比,可选的字段描述简化了复杂结构的处理。

Row类型类似于其他非标准兼容框架中已知的STRUCT类型。

SQL

ROW<n0 t0, n1 t1, ...>
ROW<n0 t0 'd0', n1 t1 'd1', ...>

ROW(n0 t0, n1 t1, ...>
ROW(n0 t0 'd0', n1 t1 'd1', ...)

JAVA/SCALA

DataTypes.ROW(DataTypes.FIELD(n0, t0), DataTypes.FIELD(n1, t1), ...)
DataTypes.ROW(DataTypes.FIELD(n0, t0, d0), DataTypes.FIELD(n1, t1, d1), ...)

可以使用ROW <n0 t0’d0’,n1 t1’d1’,…>声明类型,其中n是字段的唯一名称,t是字段的逻辑类型,d是字段的描述。

ROW(…)是更接近SQL标准的同义词。例如,ROW(myField INT,myOtherField BOOLEAN)等效于ROW <myField INT,myOtherField BOOLEAN>。

桥接到JVM类型

Java Type Input Output Remarks
org.apache.flink.types.Row X X Default

其他数据类型

BOOLEAN

具有(可能)三值逻辑TRUEFALSEUNKNOWN的布尔数据类型。

SQL

BOOLEAN

JAVA/SCALA

DataTypes.BOOLEAN()

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Boolean X X Default
boolean X (X) Output only if type is not nullable.

NULL

表示无类型NULL值的数据类型。

空类型是SQL标准的扩展。空类型除了NULL外没有其他值,因此可以将其强制转换为类似于JVM语义的任何可空类型。

此类型有助于表示使用NULL文字的API调用中的未知类型,以及桥接到也定义此类类型的格式(例如JSON或Avro)。

这种类型在实践中不是很有用,为完整性起见在此仅提及。

SQL

NULL

JAVA/SCALA

DataTypes.NULL()

桥接到JVM类型

Java Type Input Output Remarks
java.lang.Object X X Default
any class (X) Any non-primitive type.

ANY

任意序列化类型的数据类型。此类型是表生态系统内的黑匣子,仅在边缘反序列化。any类型是SQL标准的扩展。

SQL

ANY('class', 'snapshot')

JAVA/SCALA

DataTypes.ANY(class, serializer)

DataTypes.ANY(typeInfo)

可以使用ANY(‘class’,‘snapshot’)声明类型,其中class是原始类,快照是使用Base64编码的序列化TypeSerializerSnapshot。通常,类型字符串不是直接声明的,而是在保留类型时生成的。在API中,可以通过直接提供Class + TypeSerializer或通过传递TypeInformation并让框架从那里提取Class + TypeSerializer来声明ANY类型。

桥接到JVM类型

Java Type Input Output Remarks
class X X Originating class or subclasses (for input) or superclasses (for output). Default
byte[] X

因笔者英文水平有限,如有翻译不对的地方请留言指出,笔者一定会在最短的时间内进行更改!

发布了87 篇原创文章 · 获赞 69 · 访问量 13万+

おすすめ

転載: blog.csdn.net/lp284558195/article/details/104268401