Carga de JSON estructurado
NDJSON (JSON delimitado por saltos de línea), conocido como JSONEachRow en ClickHouse, y que están bien estructurados, es decir, los nombres de las columnas y los tipos son fijos. NDJSON es el formato preferido para cargar JSON gracias a su concisión y uso eficiente del espacio, aunque también se admiten otros formatos tanto para entrada como para salida.
Considere el siguiente ejemplo de JSON, que representa una fila del conjunto de datos Python PyPI:
Prefiera esquemas estáticos siempre que sea posibleCuando sus columnas tengan nombres y tipos fijos, y no se prevea la aparición de nuevas columnas, priorice siempre un esquema definido estáticamente en producción.El tipo JSON es la opción preferida para datos muy dinámicos, donde los nombres y tipos de las columnas pueden cambiar. Este tipo también resulta útil para la creación de prototipos y la exploración de datos.
Claves de ordenaciónAquí hemos seleccionado una clave de ordenación mediante la cláusula
ORDER BY. Para más detalles sobre las claves de ordenación y cómo elegirlas, consulte aquí.*.json.gz del bucket. ClickHouse infiere automáticamente que el formato es JSONEachRow (ndjson) a partir de la extensión y el contenido del archivo. El formato puede especificarse manualmente mediante funciones con parámetros en caso de que ClickHouse no pueda detectarlo.
Archivos comprimidosLos archivos anteriores también están comprimidos. ClickHouse lo detecta y lo gestiona automáticamente.
INSERT INTO SELECT:
FORMAT, p. ej.
JSONEachRow. También se admiten otros formatos JSON comunes, con ejemplos de cómo cargarlos aquí.
Carga de JSON semiestructurado
JSON específico.
Considere el siguiente ejemplo de una versión ampliada del Python PyPI dataset anterior. Aquí hemos añadido una columna tags arbitraria con pares clave-valor aleatorios.
tags aquí es impredecible y, por lo tanto, nos resulta imposible modelarla. Para cargar estos datos, podemos usar el esquema anterior, pero añadiendo una columna tags adicional de tipo JSON:
Cuándo usar el tipo JSON
- Tengan claves impredecibles que puedan cambiar con el tiempo.
- Contengan valores de tipos distintos (p. ej., una ruta a veces puede contener una cadena y otras, un número).
- Requieran flexibilidad de esquema cuando el tipado estricto no sea viable.
- Una estructura plana con claves conocidas: use tipos de columna estándar, p. ej., String.
- Anidamiento predecible: use los tipos Tuple, Array o Nested para estas estructuras.
- Una estructura predecible con tipos variables: considere usar los tipos Dynamic o Variant en su lugar.