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 会抛出异常。