このトピックでは、JSON 形式とデータ型マッピングの使用方法について説明します。
背景情報
JSON 形式を使用して、JSON 構造に基づいて JSON データを読み書きできます。JSON 構造は、テーブルスキーマから自動的に推測されます。JSON 形式をサポートするコネクタには、Kafka コネクタ、Upsert Kafka コネクタ、Elasticsearch コネクタ、オブジェクトストレージサービス (OSS) コネクタ、MongoDBコネクタ、StarRocks コネクタなどがあります。
サンプルコード
次のサンプルコードは、Apache 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 | はい | (なし) | STRING | 使用する形式を宣言します。JSON 形式を使用する場合は、このパラメーターを json に設定します。 |
json.fail-on-missing-field | いいえ | false | BOOLEAN | 有効な値:
|
json.ignore-parse-errors | いいえ | false | BOOLEAN | 有効な値:
|
json.timestamp-format.standard | いいえ | SQL | STRING | 入力タイムスタンプと出力タイムスタンプの形式。有効な値:
|
json.map-null-key.mode | いいえ | FAIL | STRING | マップ内の null キー値を処理するために使用されるメソッド。有効な値:
|
json.map-null-key.literal | いいえ | null | STRING | json.map-null-key.mode パラメーターが LITERAL に設定されている場合、指定された文字列定数を使用してマップ内の null キー値を置き換えます。 |
json.encode.decimal-as-plain-number | いいえ | false | BOOLEAN | 有効な値:
|
json.write-null-properties | いいえ | true | BOOLEAN | 列の空の値を JSON 文字列に書き込むかどうかを指定します。有効な値:
説明 このパラメーターは、Realtime Compute for Apache Flink が Ververica Runtime (VVR) 8.0.6 以降を使用している場合にのみ構成できます。 |
データ型マッピング
JSON 構造は、テーブルスキーマから自動的に推測されます。Realtime Compute for Apache Flink では、JSON 形式は jackson databind API を呼び出して、JSON データを解析および生成します。次の表に、Flink SQL データ型と JSON データ型の間のマッピングを示します。
Realtime Compute for Apache Flink SQL のデータ型 | JSON データ型 |
CHAR / VARCHAR / STRING | STRING |
BOOLEAN | BOOLEAN |
BINARY / VARBINARY | エンコード STRING: base64 |
DECIMAL | NUMBER |
TINYINT | NUMBER |
SMALLINT | NUMBER |
INT | NUMBER |
BIGINT | NUMBER |
FLOAT | NUMBER |
DOUBLE | NUMBER |
DATE | 形式の STRING: date |
TIME | 形式の STRING: time |
TIMESTAMP | 形式の STRING: date-time |
TIMESTAMP_WITH_LOCAL_TIME_ZONE | 形式の STRING: date-time (UTC タイムゾーン) |
INTERVAL | NUMBER |
ARRAY | ARRAY |
MAP / MULTISET | OBJECT |
ROW | OBJECT |
その他
OSS に書き込まれるデータは、JSON ファイルとして書き込むことができません。詳細については、「FLINK-30635」をご参照ください。