Saltar al contenido principal
En los ejemplos anteriores de carga de datos JSON se asume el uso de JSONEachRow (NDJSON). Este formato interpreta las claves de cada línea JSON como columnas. Por ejemplo:
Aunque este suele ser el formato más habitual para JSON, encontrará otros formatos o necesitará leer el JSON como un solo objeto. A continuación, proporcionamos ejemplos de cómo leer y cargar JSON en otros formatos habituales.

Leer JSON como un objeto

Nuestros ejemplos anteriores muestran cómo 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.
El formato 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:
En cambio, JSONAsObject puede usarse en este caso, ya que el tipo JSON admite varios tipos para una misma subcolumna.

Array de objetos JSON

Una de las formas más habituales de los datos JSON consiste en tener una lista de objetos JSON dentro de un array JSON, como en este ejemplo:
Vamos a crear una tabla para este tipo de datos:
Para importar una lista de objetos JSON, podemos usar el formato JSONEachRow (insertando datos del archivo list.json):
Hemos utilizado una cláusula FROM INFILE para cargar datos desde un archivo local, y podemos ver que la importación se realizó correctamente:

Claves de los objetos JSON

En algunos casos, la lista de objetos JSON puede codificarse como propiedades del objeto en lugar de elementos del array (consulta objects.json para ver un ejemplo):
ClickHouse puede cargar datos a partir de este tipo de datos usando el formato JSONObjectEachRow:

Especificar los valores de clave del objeto padre

Supongamos que también queremos guardar en la tabla los valores de las claves del objeto padre. En este caso, podemos usar la siguiente opción para definir el nombre de la columna en la que queremos que se guarden esos valores de clave:
Ahora podemos comprobar qué datos se cargarán desde el archivo JSON original usando la función file():
Observa cómo la columna id se ha rellenado correctamente con los valores de las claves.

Arrays JSON

A veces, para ahorrar espacio, los archivos JSON se codifican como arrays en lugar de objetos. En este caso, trabajamos con una lista de arrays JSON:
En este caso, ClickHouse cargará estos datos y asignará cada valor a la columna correspondiente en función de su posición en el array. Para ello, usamos el formato JSONCompactEachRow:

Importación de columnas individuales a partir de arrays JSON

En algunos casos, los datos pueden codificarse por columnas en lugar de por filas. En este caso, un objeto JSON principal contiene columnas con valores. Echa un vistazo al siguiente archivo:
ClickHouse usa el formato JSONColumns para analizar datos con este formato:
También se admite un formato más compacto cuando se trabaja con un array de columnas en lugar de un objeto, con el formato JSONCompactColumns:

Guardar objetos JSON en lugar de analizarlos

En algunos casos, puede que quiera guardar objetos JSON en una sola columna 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:
Queremos guardar los objetos JSON originales en la siguiente tabla:
Ahora podemos cargar datos desde el archivo en esta tabla usando el formato JSONAsString para conservar los objetos JSON en lugar de analizarlos:
Y podemos usar las funciones JSON para consultar los objetos guardados:
Ten en cuenta que 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

En los casos en los que trabajamos con objetos JSON anidados, también podemos definir un esquema explícito y usar tipos complejos (Array, JSON o Tuple) para cargar los datos:

Acceso a objetos JSON anidados

Podemos hacer referencia a claves JSON anidadas habilitando la siguiente opción de configuración:
Esto nos permite hacer referencia a las claves de objetos JSON anidados con notación de punto (recuerda encerrarlas entre acentos graves para que funcione):
De este modo, podemos aplanar objetos JSON anidados o usar algunos valores anidados para guardarlos en columnas independientes.

Ignorar columnas desconocidas

De forma predeterminada, ClickHouse ignora las columnas desconocidas al importar datos JSON. Intentemos importar el archivo original en la tabla sin la columna month:
Todavía podemos insertar los datos JSON originales con 3 columnas en esta tabla:
ClickHouse ignorará las columnas desconocidas al importar. Esto puede desactivarse con la opción de configuración input_format_skip_unknown_fields:
ClickHouse generará excepciones cuando haya inconsistencias entre el JSON y la estructura de columnas de la tabla.

BSON

ClickHouse permite exportar datos a archivos codificados en BSON e importarlos desde ellos. Este formato lo utilizan algunos DBMS, por ejemplo, la base de datos MongoDB. Para importar datos BSON, usamos el formato BSONEachRow. Importemos los datos desde este archivo BSON:
También podemos exportar archivos BSON usando el mismo formato:
Después de eso, nuestros datos se habrán exportado al archivo out.bson.
Última modificación el 2 de julio de 2026