Saltar al contenido principal
Elasticsearch y ClickHouse admiten una amplia variedad de tipos de datos, pero su almacenamiento subyacente y sus modelos de consulta son fundamentalmente distintos. En esta sección se muestran las correspondencias entre los tipos de campo de Elasticsearch más utilizados y sus equivalentes en ClickHouse, cuando existen, y se ofrece contexto para orientar las migraciones. Cuando no existe un equivalente, se incluyen alternativas o notas en los comentarios.

Notas

  • Arrays: En Elasticsearch, todos los campos admiten arrays de forma nativa. En ClickHouse, los arrays deben definirse explícitamente (p. ej., Array(String)), con la ventaja de que se puede acceder a posiciones específicas y consultarlas, p. ej. an_array[1].
  • Campos múltiples: Elasticsearch permite indexar el mismo campo de varias formas (p. ej., tanto como text y como keyword). En ClickHouse, este patrón debe modelarse mediante columnas o vistas independientes.
  • Tipos Map y JSON - En ClickHouse, el tipo Map se usa habitualmente para modelar estructuras dinámicas de clave-valor, como resourceAttributes y logAttributes. Este tipo permite una ingestión flexible y sin esquema al admitir claves arbitrarias en tiempo de ejecución, de forma similar a los objetos JSON de Elasticsearch. Sin embargo, hay limitaciones importantes que conviene tener en cuenta:
    • Tipos de valor uniformes: las columnas Map de ClickHouse deben tener un tipo de valor coherente (p. ej., Map(String, String)). Los valores de tipos mixtos no se admiten sin coerción.
    • Coste en rendimiento: acceder a cualquier clave de un Map requiere cargar el mapa completo en memoria, lo que puede penalizar el rendimiento.
    • Sin subcolumnas: a diferencia de JSON, las claves de un Map no se representan como subcolumnas reales, lo que limita la capacidad de ClickHouse para indexar, comprimir y consultar de forma eficiente.
    Debido a estas limitaciones, ClickStack está dejando atrás Map en favor del tipo JSON mejorado de ClickHouse. El tipo JSON resuelve muchas de las limitaciones de Map:
    • Almacenamiento columnar real: cada ruta JSON se almacena como una subcolumna, lo que permite compresión, filtrado y ejecución vectorizada de consultas de forma eficiente.
    • Soporte para tipos mixtos: distintos tipos de datos (p. ej., enteros, cadenas y arrays) pueden coexistir bajo la misma ruta sin coerción ni unificación de tipos.
    • Escalabilidad del sistema de archivos: los límites internos sobre claves dinámicas (max_dynamic_paths) y tipos (max_dynamic_types) evitan una explosión de archivos de columna en disco, incluso con conjuntos de claves de alta cardinalidad.
    • Almacenamiento denso: los valores nulos y ausentes se almacenan de forma dispersa para evitar una sobrecarga innecesaria. El tipo JSON es especialmente adecuado para cargas de trabajo de observabilidad, ya que ofrece la flexibilidad de la ingestión sin esquema junto con el rendimiento y la escalabilidad de los tipos nativos de ClickHouse, lo que lo convierte en un reemplazo ideal para Map en campos de atributos dinámicos. Para obtener más información sobre el tipo JSON, recomendamos la guía de JSON y “How we built a new powerful JSON data type for ClickHouse”.
Última modificación el 19 de junio de 2026