本文為您介紹Avro格式的使用樣本、配置選項和類型映射。
背景資訊
Avro格式允許基於Avro的結構讀寫Avro資料。當前,Avro結構是基於表結構推導而來的。支援Avro格式的連接器包括訊息佇列Kafka、Upsert Kafka和Object Storage Service。
使用樣本
利用Kafka以及Avro格式構建表的樣本如下。
CREATE TABLE user_behavior (
user_id BIGINT,
item_id BIGINT,
category_id BIGINT,
behavior STRING,
ts TIMESTAMP(3)
) WITH (
'connector' = 'kafka',
'topic' = 'user_behavior',
'properties.bootstrap.servers' = 'localhost:9092',
'properties.group.id' = 'testGroup',
'format' = 'avro'
)配置選項
參數 | 是否必選 | 預設值 | 類型 | 描述 |
format | 是 | (none) | String | 聲明使用的格式。使用Avro格式時,參數取值為avro。 |
avro.codec | 否 | (none) | String | 指定Avro壓縮的轉碼器,僅適用於連接器為Filesystem的情況。參數取值如下:
|
類型映射
Flink與Avro的資料類型的映射關係如下。
Flink SQL類型 | Avro類型 |
CHAR / VARCHAR / STRING | string |
BOOLEAN | boolean |
BINARY / VARBINARY | bytes |
DECIMAL | bytes 說明 帶有精度的十進位數。 |
TINYINT | int |
SMALLINT | int |
INT | int |
BIGINT | long |
FLOAT | float |
DOUBLE | double |
DATE | int 說明 日期。 |
TIME | int 說明 以毫秒為單位的時間。 |
TIMESTAMP | long 說明 以毫秒為單位的時間戳記。 |
ARRAY | array |
MAP 說明 元素必須是STRING、CHAR或VARCHAR類型。 | map |
MULTISET 說明 元素必須是STRING、CHAR或VARCHAR類型。 | map |
ROW | record |
除了以上類型,Flink支援讀取和寫入nullable的類型。Flink將nullable的類型映射到Avro union(something, null),其中something是從Flink類型轉換的Avro類型。
關於Avro類型的資訊,詳情請見Avro 規範。