跳转到主要内容

说明

在这种格式中,所有数据都表示为一个 JSON 对象,其中每一行都对应该对象中的一个独立字段,类似于 JSONEachRow 格式。

示例用法

基础示例

给定如下 JSON:
如果要将对象名称用作列值,可以使用特殊设置 format_json_object_each_row_column_for_object_name。 该设置的值应设为某个列名,该列名会在结果对象中用作某一行的 JSON 键。

输出

假设我们有一个名为 test 的表,包含两列:
下面以 JSONObjectEachRow 格式输出,并使用 format_json_object_each_row_column_for_object_name 设置:
Query
Response

输入

假设我们将上一个示例的输出保存到了名为 data.json 的文件中:
Query
Response
这也适用于 schema inference:
Query
Response

插入数据

Query
ClickHouse 允许:
  • 对象中的键值对按任意顺序排列。
  • 省略某些值。
ClickHouse 会忽略元素之间的空格以及对象后面的逗号。你可以将所有对象写在同一行中传入,无需用换行符将它们分隔开。

省略值的处理

ClickHouse 会用相应数据类型的默认值来填补被省略的值。 如果指定了 DEFAULT expr,ClickHouse 会根据 input_format_defaults_for_omitted_fields 设置采用不同的填补规则。 请看下表:
Query
  • 如果 input_format_defaults_for_omitted_fields = 0,则 xa 的默认值均为 0 (即 UInt32 数据类型的默认值) 。
  • 如果 input_format_defaults_for_omitted_fields = 1,则 x 的默认值为 0,但 a 的默认值为 x * 2
当以 input_format_defaults_for_omitted_fields = 1 插入数据时,相比 input_format_defaults_for_omitted_fields = 0,ClickHouse 会消耗更多计算资源。

查询数据

UserActivity 表为例:
查询 SELECT * FROM UserActivity FORMAT JSONEachRow 的返回结果为:
JSON 格式不同,这里不会替换无效的 UTF-8 序列。值的转义方式与 JSON 相同。
字符串中可以输出任意字节序列。如果你确定表中的数据可以在不丢失任何信息的情况下格式化为 JSON,请使用 JSONEachRow 格式。

Nested 结构的用法

如果你的表中包含 Nested 数据类型的列,则可以插入具有相同结构的 JSON 数据。可通过 input_format_import_nested_json 设置启用此功能。 例如,考虑如下表:
Query
正如 Nested 数据类型说明中所示,ClickHouse 会将嵌套结构的每个组成部分视为单独的列 (在我们的表中即 n.sn.i) 。你可以按如下方式插入数据:
Query
要将数据作为层级化 JSON 对象插入,请设置 input_format_import_nested_json=1
如果未启用此设置,ClickHouse 会抛出异常。
Query
Response
Query
Response
Query
Response

格式设置

最后修改于 2026年6月25日