全部产品
Search
文档中心

实时计算Flink版:JSON

更新时间:Apr 01, 2024

本文为您介绍JSON格式的使用方法和类型映射。

背景信息

JSON格式能基于JSON结构读写JSON数据。当前,JSON结构是从表结构自动推导而得的。支持JSON格式的连接器有:消息队列KafkaUpsert KafkaElasticsearch对象存储OSS云数据库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字符串。

说明

仅实时计算引擎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

其他使用说明

对于写入对象存储OSS,目前暂不支持写入JSON格式的文件,具体原因请参见FLINK-30635