JSONObjectEachRow
输入 | 输出 | 别名 |
---|---|---|
✔ | ✔ |
描述
在此格式中,所有数据都表示为一个单一的 JSON 对象,每行表示为该对象的一个独立字段,类似于 JSONEachRow
格式。
示例用法
基本示例
给定一些 JSON:
要将对象名称用作列值,您可以使用特殊设置 format_json_object_each_row_column_for_object_name
。该设置的值被设置为列的名称,作为结果对象中行的 JSON 键使用。
输出
假设我们有一个名为 test
的表,包含两个列:
让我们以 JSONObjectEachRow
格式输出它,并使用 format_json_object_each_row_column_for_object_name
设置:
输入
假设我们将前面的示例输出存储在名为 data.json
的文件中:
它也适用于架构推断:
插入数据
ClickHouse 允许:
- 对象中的键值对顺序任意。
- 省略某些值。
ClickHouse 忽略元素之间的空格以及对象后面的逗号。您可以将所有对象以一行传入,无需用换行符分隔。
省略值处理
ClickHouse 用对应 数据类型 的默认值替代省略的值。
如果指定了 DEFAULT expr
,则 ClickHouse 根据 input_format_defaults_for_omitted_fields 设置使用不同的替代规则。
考虑以下表:
- 如果
input_format_defaults_for_omitted_fields = 0
,则x
和a
的默认值均为0
(作为UInt32
数据类型的默认值)。 - 如果
input_format_defaults_for_omitted_fields = 1
,则x
的默认值为0
,但a
的默认值为x * 2
。
当使用 input_format_defaults_for_omitted_fields = 1
插入数据时,ClickHouse 消耗的计算资源更多,与使用 input_format_defaults_for_omitted_fields = 0
插入时相比。
选择数据
考虑 UserActivity
表作为示例:
查询 SELECT * FROM UserActivity FORMAT JSONEachRow
返回:
与 JSON 格式不同,不存在替代无效 UTF-8 序列。值使用与 JSON
相同的方式进行转义。
可以在字符串中输出任何字节集。如果您确保表中的数据可以格式化为 JSON 而不丢失任何信息,请使用 JSONEachRow
格式。
使用嵌套结构
如果您有一个包含 Nested
数据类型列的表,您可以插入具有相同结构的 JSON 数据。通过 input_format_import_nested_json 设置启用此功能。
例如,考虑以下表:
正如您在 Nested
数据类型描述中看到的,ClickHouse 将嵌套结构的每个组件视为单独的列(我们表中的 n.s
和 n.i
)。您可以以以下方式插入数据:
要将数据插入为层次 JSON 对象,请设置 input_format_import_nested_json=1
。
在没有此设置的情况下,ClickHouse 会抛出异常。