Format JSON digunakan untuk membaca dan menulis data JSON. Struktur JSON diinferensi secara otomatis dari skema tabel. Realtime Compute for Apache Flink menggunakan jackson databind API untuk mengurai dan menghasilkan data JSON.
Konektor berikut mendukung format JSON:
Contoh
Contoh berikut membuat tabel Kafka yang membaca dan menulis data dalam format 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'
);
Parameter
| Parameter | Wajib | Bawaan | Tipe | Deskripsi |
|---|---|---|---|---|
format |
Ya | (none) | STRING | Format yang digunakan. Atur ke json. |
json.fail-on-missing-field |
Tidak | false | BOOLEAN | Menentukan apakah akan melewatkan bidang atau baris ketika bidang yang akan diurai tidak tersedia. true: lewati bidang atau baris tersebut. false: kembalikan error dan gagalkan penerapan. |
json.ignore-parse-errors |
Tidak | false | BOOLEAN | Menentukan apakah akan melewatkan bidang atau baris ketika penguraian gagal. true: lewati bidang atau baris tersebut. false: kembalikan error dan gagalkan penerapan. |
json.timestamp-format.standard |
Tidak | SQL | STRING | Format timestamp untuk input dan output. SQL: yyyy-MM-dd HH:mm:ss.s{precision} (misalnya, 2020-12-30 12:13:14.123). ISO-8601: yyyy-MM-ddTHH:mm:ss.s{precision} (misalnya, 2020-12-30T12:13:14.123). |
json.map-null-key.mode |
Tidak | FAIL | STRING | Cara menangani kunci null dalam map. FAIL: kembalikan error. DROP: buang entri tersebut. LITERAL: ganti kunci null dengan string yang ditentukan oleh json.map-null-key.literal. |
json.map-null-key.literal |
Tidak | null | STRING | Konstanta string yang digunakan untuk menggantikan kunci map null ketika json.map-null-key.mode diatur ke LITERAL. |
json.encode.decimal-as-plain-number |
Tidak | false | BOOLEAN | Menentukan apakah nilai DECIMAL akan diencode dalam notasi biasa. true: gunakan notasi biasa (misalnya, 0.000000027). false: gunakan notasi ilmiah (misalnya, 2.7E-8). |
json.write-null-properties |
Tidak | true | BOOLEAN | Menentukan apakah nilai kolom null akan ditulis ke output JSON. true: tulis nilai null. false: abaikan bidang null. Memerlukan Ververica Runtime (VVR) 8.0.6 atau yang lebih baru. |
Pemetaan tipe data
| Tipe Flink SQL | Tipe JSON |
|---|---|
| CHAR / VARCHAR / STRING | STRING |
| BOOLEAN | BOOLEAN |
| BINARY / VARBINARY | STRING (diencode base64) |
| DECIMAL | NUMBER |
| TINYINT | NUMBER |
| SMALLINT | NUMBER |
| INT | NUMBER |
| BIGINT | NUMBER |
| FLOAT | NUMBER |
| DOUBLE | NUMBER |
| DATE | STRING (format date) |
| TIME | STRING (format time) |
| TIMESTAMP | STRING (format date-time) |
| TIMESTAMP_WITH_LOCAL_TIME_ZONE | STRING (format date-time, UTC) |
| INTERVAL | NUMBER |
| ARRAY | ARRAY |
| MAP / MULTISET | OBJECT |
| ROW | OBJECT |
Batasan
Data yang ditulis ke OSS melalui format JSON tidak dapat disimpan sebagai file JSON. Untuk detailnya, lihat FLINK-30635.