全部產品
Search
文件中心

Realtime Compute for Apache Flink:JSON

更新時間:Jul 13, 2024

本文為您介紹JSON格式的使用方法和類型映射。

背景資訊

JSON格式能基於JSON結構讀寫JSON資料。當前,JSON結構是從表結構自動推導而得的。支援JSON格式的連接器有:訊息佇列KafkaUpsert KafkaElasticsearchObject Storage ServiceApsaraDB for MongoDBStarRocks等。

使用樣本

利用Kafka以及JSON格式構建表的樣本如下。

CREATE TABLE Orders (
orderId INT,
product STRING,
orderInfo MAP<STRING, STRING>,
orderTime TIMESTAMP(3),
WATERMARK FOR orderTime AS orderTime - INTERVAL '5' SECOND
) WITH (
'connector' = 'kafka',
'topic' = 'test-topic',
'properties.bootstrap.servers' = 'localhost:9092',
'format' = 'json',
'json.fail-on-missing-field' = 'false',
'json.ignore-parse-errors' = 'true'
)

配置選項

參數

是否必選

預設值

類型

說明

format

(none)

String

聲明使用的格式。使用JSON格式時,參數取值為json。

json.fail-on-missing-field

false

Boolean

參數取值如下:

  • true:當解析欄位缺失時,跳過當前欄位或行。

  • false(預設值):當解析欄位缺失時,拋出錯誤,作業啟動失敗。

json.ignore-parse-errors

false

Boolean

參數取值如下:

  • true:當解析異常時,跳過當前欄位或行。

  • false(預設值):當解析異常時,拋出錯誤,作業啟動失敗。

json.timestamp-format.standard

SQL

String

指定輸入和輸出時間戳記格式。參數取值如下:

  • SQL:解析yyyy-MM-dd HH:mm:ss.s{precision}格式的輸入時間戳記,例如2020-12-30 12:13:14.123,並以相同格式輸出時間戳記。

  • ISO-8601:解析yyyy-MM-ddTHH:mm:ss.s{precision}格式的輸入時間戳記,例如2020-12-30T12:13:14.123,並以相同的格式輸出時間戳記。

json.map-null-key.mode

FAIL

String

指定處理Map中key值為空白的方法。參數取值如下:

  • FAIL:在Map中key值為空白時拋出異常。

  • DROP:丟棄Map中key值為空白的資料。

  • LITERAL:使用字串常量來替換Map中的空key值。字串常量的值由json.map-null-key.literal定義。

json.map-null-key.literal

null

String

當json.map-null-key.mode的參數是LITERAL時,指定字串常量替換Map中的空key值。

json.encode.decimal-as-plain-number

false

Boolean

參數取值如下:

  • true:所有DECIMAL類型的資料保持原狀,不使用科學計數法表示,例:0.000000027表示為0.000000027。

  • false:所有DECIMAL類型的資料,使用科學計數法表示,例:0.000000027表示為2.7E-8。

json.write-null-properties

true

Boolean

是否將空列寫入JSON字串,參數取值如下:

  • true:將空列寫入JSON字串,寫入的值為null。

  • false:忽略空列,不寫入JSON字串。

說明

僅Realtime Compute引擎VVR 8.0.6及以上版本支援配置該參數。

類型映射

當前,JSON結構將會從表結構之中自動推導得到。在Flink中,JSON格式使用jackson databind API去解析和產生JSON。Flink與JSON的資料類型的映射關係如下。

Flink SQL類型

JSON類型

CHAR / VARCHAR / STRING

string

BOOLEAN

boolean

BINARY / VARBINARY

string with encoding: base64

DECIMAL

number

TINYINT

number

SMALLINT

number

INT

number

BIGINT

number

FLOAT

number

DOUBLE

number

DATE

string with format: date

TIME

string with format: time

TIMESTAMP

string with format: date-time

TIMESTAMP_WITH_LOCAL_TIME_ZONE

string with format: date-time (with UTC time zone)

INTERVAL

number

ARRAY

array

MAP / MULTISET

object

ROW

object

其他使用說明

對於寫入Object Storage Service,目前暫不支援寫入JSON格式的檔案,具體原因請參見FLINK-30635