JSONEachRow (NDJSON) 。这种格式会将每个 JSON 行中的键读取为列。例如:
将 JSON 作为对象读取
JSONEachRow 如何读取以换行分隔的 JSON:每一行都会作为单独的对象读取,映射到表中的一行,而每个键则映射到一列。这非常适合 JSON 结构可预测、且每列只有单一类型的场景。
相比之下,JSONAsObject 会将每一行视为一个单独的 JSON 对象,并将其存储在单个列中,类型为 JSON,因此更适合嵌套的 JSON 载荷,以及键是动态的、且可能对应多种类型的场景。
对于按行 insert,请使用 JSONEachRow;而在存储灵活或动态的 JSON 数据时,请使用 JSONAsObject。
对比上面的示例和下面这个查询:后者会将相同的数据按每行一个 JSON 对象的方式读取:
JSONAsObject 可用于通过单个 JSON 对象列向表中插入行,例如:
JSONAsObject 格式对于读取以换行分隔的 JSON 也很有用。例如,如果某个键在不同行中的类型会发生变化 (有时是字符串,有时又是对象) 。在这种情况下,ClickHouse 无法使用 JSONEachRow 推断出稳定的 schema,而 JSONAsObject 则允许在不强制执行严格类型检查的情况下摄取数据,将每个 JSON 行作为整体存储在单个列中。例如,请看 JSONEachRow 如何在下面的示例中失败:
JSONAsObject,因为 JSON 类型允许同一子列对应多种类型。
JSON 对象数组
JSONEachRow 格式 (从 list.json 文件中插入数据) :
JSON 对象键
JSONObjectEachRow 格式从此类数据中导入数据:
指定父对象的键值
file() 函数查看将从原始 JSON 文件加载哪些数据:
id 列已正确填入键值。
JSON 数组
JSONCompactEachRow 格式:
从 JSON 数组中导入各个列
JSONColumns 格式来解析如下格式的数据:
JSONCompactColumns 格式:
保存 JSON 对象而不解析
String (或 JSON) 列中,而不是对其进行解析。在处理由不同结构的 JSON 对象组成的列表时,这会很有用。以这个文件为例,其中父列表内包含多个不同的 JSON 对象:
JSONAsString 格式将文件中的数据加载到该表中,从而保留 JSON 对象,而不对其进行解析:
JSONEachRow 格式一起使用) ,JSONAsString 也完全可以正常工作。
嵌套对象的 schema
Array、JSON 或 Tuple) 来加载数据:
访问嵌套 JSON 对象
跳过未知列
month 列的表中:
BSON
out.bson 文件中。