JSONObjectEachRow
| Input | Output | Alias |
|---|---|---|
| ✔ | ✔ |
描述
在此格式中,所有数据都表示为单个 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 将抛出异常。