JSONEachRow (NDJSON). Este formato interpreta las claves de cada línea JSON como columnas. Por ejemplo:
Leer JSON como un objeto
JSONEachRow lee JSON delimitado por saltos de línea, con cada línea interpretada como un objeto independiente asignado a una fila de la tabla y cada clave a una columna. Esto es ideal cuando el JSON es predecible y cada columna tiene un único tipo.
En cambio, JSONAsObject trata cada línea como un único objeto JSON y lo almacena en una sola columna, de tipo JSON, por lo que resulta más adecuado para payloads JSON anidados y para casos en los que las claves son dinámicas y pueden tener más de un tipo.
Use JSONEachRow para inserciones por fila y JSONAsObject para almacenar datos JSON flexibles o dinámicos.
Compare el ejemplo anterior con la siguiente consulta, que lee los mismos datos como un objeto JSON por línea:
JSONAsObject es útil para insertar filas en una tabla mediante una única columna de objeto JSON, p. ej.
JSONAsObject también puede ser útil para leer JSON delimitado por saltos de línea cuando la estructura de los objetos no es uniforme. Por ejemplo, si una clave varía de tipo entre filas (a veces puede ser una cadena y otras, un objeto). En esos casos, ClickHouse no puede inferir un esquema estable con JSONEachRow, y JSONAsObject permite ingestar los datos sin aplicar una validación estricta de tipos, almacenando cada fila JSON completa en una sola columna. Por ejemplo, observe cómo JSONEachRow falla en el siguiente ejemplo:
JSONAsObject puede usarse en este caso, ya que el tipo JSON admite varios tipos para una misma subcolumna.
Array de objetos JSON
JSONEachRow (insertando datos del archivo list.json):
Claves de los objetos JSON
JSONObjectEachRow:
Especificar los valores de clave del objeto padre
file():
id se ha rellenado correctamente con los valores de las claves.
Arrays JSON
JSONCompactEachRow:
Importación de columnas individuales a partir de arrays JSON
JSONColumns para analizar datos con este formato:
JSONCompactColumns:
Guardar objetos JSON en lugar de analizarlos
String (o JSON) en lugar de analizarlos. Esto puede ser útil al trabajar con una lista de objetos JSON con estructuras diferentes. Tomemos este archivo como ejemplo, donde tenemos varios objetos JSON distintos dentro de una lista principal:
JSONAsString para conservar los objetos JSON en lugar de analizarlos:
JSONAsString funciona perfectamente en los casos en los que tenemos archivos con formato de un objeto JSON por línea (que normalmente se usan con el formato JSONEachRow).
Esquema para objetos anidados
Array, JSON o Tuple) para cargar los datos:
Acceso a objetos JSON anidados
Ignorar columnas desconocidas
month:
BSON
out.bson.