Flink資料型別對映大全
阿新 • • 發佈:2022-03-31
Flink 支援連線多種資料庫,如MySQL、PostgresSQL、Derby。Derby通常用於測試。從關係資料庫資料型別到Flink SQL資料型別的欄位資料型別對映如下表所示,對映表可以幫助在Flink中輕鬆定義JDBC表。
MySQL type | PostgreSQL type | Flink SQL type |
---|---|---|
TINYINT | TINYINT | |
SMALLINT, TINYINT UNSIGNED |
SMALLINT, INT2, SMALLSERIAL, SERIAL2 |
SMALLINT |
INT, MEDIUMINT, SMALLINT UNSIGNED |
INTEGER, SERIAL | INT |
BIGINT, INT UNSIGNED |
BIGINT, BIGSERIAL |
BIGINT |
BIGINT UNSIGNED | DECIMAL(20,0) | |
BIGINT | BIGINT | BIGINT |
FLOAT | REAL, FLOAT4 |
FLOAT |
DOUBLE, DOUBLE PRECISION |
FLOAT8, DOUBLE PRECISION |
DOUBLE |
NUMERIC(p, s), DECIMAL(p, s) |
NUMERIC(p, s), DECIMAL(p, s) |
DECIMAL(p, s) |
BOOLEAN, TINYINT(1) |
BOOLEAN | BOOLEAN |
DATE | DATE | DATE |
TIME [(p)] | TIME [(p)] [WITHOUT TIMEZONE] | TIME [(p)] [WITHOUT TIMEZONE] |
DATETIME [(p)] | TIMESTAMP [(p)] [WITHOUT TIMEZONE] | TIMESTAMP [(p)] [WITHOUT TIMEZONE] |
CHAR(n), VARCHAR(n), TEXT |
CHAR(n), CHARACTER(n), VARCHAR(n), CHARACTER VARYING(n), TEXT |
STRING |
BINARY, VARBINARY, BLOB |
BYTEA | BYTES |
ARRAY | ARRAY |
在API中,Flink嘗試使用反射從類資訊中自動提取資料型別,以避免重複的手動模式工作。但是,反射性地提取資料型別並不總是成功的,因為可能會丟失邏輯資訊。因此,可能需要在類或欄位宣告附近新增其他資訊以支援提取邏輯。下表列出了無需進一步資訊即可隱式對映到資料型別的類。
注意:如果您打算在 Scala 中實現類,建議使用包裝型別(例如java.lang.Integer)而不是 Scala 的原語。Scala的原語(例如Intor Double)被編譯為JVM 原語(例如 int/double)併產生NOT NULL如下表所示的語義。此外,在泛型中使用的Scala原語(例如java.util.Map[Int, Double])在編譯期間會被刪除,並導致類資訊類似於java.util.Map[java.lang.Object, java.lang.Object]。
Java Class | Data Type |
---|---|
java.lang.String | STRING |
java.lang.Boolean | BOOLEAN |
boolean | BOOLEAN NOT NULL |
java.lang.Byte | TINYINT |
byte | TINYINT NOT NULL |
java.lang.Short | SMALLINT |
short | SMALLINT NOT NULL |
java.lang.Integer | INT |
int | INT NOT NULL |
java.lang.Long | BIGINT |
long | BIGINT NOT NULL |
java.lang.Float | FLOAT |
float | FLOAT NOT NULL |
java.lang.Double | DOUBLE |
double | DOUBLE NOT NULL |
java.sql.Date | DATE |
java.time.LocalDate | DATE |
java.sql.Time | TIME(0) |
java.time.LocalTime | TIME(9) |
java.sql.Timestamp | TIMESTAMP(9) |
java.time.LocalDateTime | TIMESTAMP(9) |
java.time.OffsetDateTime | TIMESTAMP(9) WITH TIME ZONE |
java.time.Instant | TIMESTAMP_LTZ(9) |
java.time.Duration | INVERVAL SECOND(9) |
java.time.Period | INTERVAL YEAR(4) TO MONTH |
byte[] | BYTES |
T[] | ARRAY |
java.util.Map<K, V> | MAP<K, V> |
structured type T | anonymous structured type T |
參考
https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/dev/table/types/
https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/connectors/table/jdbc/