Saltar al contenido principal

Búsqueda en ClickStack y Elastic

ClickHouse es un motor nativo de SQL, diseñado desde cero para cargas de trabajo analíticas de alto rendimiento. En cambio, Elasticsearch ofrece una interfaz similar a SQL que transpila SQL al DSL de consultas subyacente de Elasticsearch; es decir, no es una capacidad de primer nivel y la paridad de funciones es limitada. ClickHouse no solo admite SQL completo, sino que además lo amplía con una variedad de funciones orientadas a la observabilidad, como argMax, histogram y quantileTiming, que simplifican las consultas sobre logs, métricas y trazas estructurados. Para explorar logs y trazas de forma sencilla, la UI de ClickStack (HyperDX) ofrece una sintaxis de estilo Lucene para un filtrado intuitivo basado en texto con consultas de campo-valor, rangos, comodines y más. Esto es comparable a la sintaxis de Lucene en Elasticsearch y a algunos elementos de Kibana Query Language. La interfaz de búsqueda admite esta sintaxis conocida, pero la traduce internamente en cláusulas SQL WHERE eficientes, lo que hace que la experiencia resulte familiar para los usuarios de Kibana y, al mismo tiempo, les permite aprovechar la potencia de SQL cuando lo necesiten. Esto le permite aprovechar toda la gama de funciones de búsqueda de cadenas, funciones de similitud y funciones de fecha y hora de ClickHouse. A continuación, comparamos los lenguajes de consulta Lucene de ClickStack y Elasticsearch.

Sintaxis de búsqueda de ClickStack vs cadena de consulta de Elasticsearch

Tanto ClickStack como Elasticsearch proporcionan lenguajes de consulta flexibles que permiten un filtrado intuitivo de logs y trazas. Mientras que la cadena de consulta de Elasticsearch está estrechamente integrada con su DSL y su motor de indexación, ClickStack admite una sintaxis inspirada en Lucene que se traduce internamente a ClickHouse SQL. La siguiente tabla describe cómo se comportan los patrones de búsqueda habituales en ambos sistemas, destacando las similitudes de sintaxis y las diferencias en la ejecución del backend.

Diferencias entre existencia y ausencia

A diferencia de Elasticsearch, donde un campo puede omitirse por completo de un evento y, por tanto, realmente “no existir”, ClickHouse requiere que existan todas las columnas del esquema de una tabla. Si no se proporciona un campo en un evento de inserción:
  • En los campos Nullable, se establecerá en NULL.
  • En los campos no anulables (el valor predeterminado), se rellenará con un valor predeterminado (a menudo una cadena vacía, 0 o equivalente).
En ClickStack, usamos esta última opción, ya que Nullable no se recomienda. Este comportamiento significa que comprobar si un campo “existe” en el sentido de Elasticsearch no tiene soporte directo. En su lugar, puedes usar field:* o field != '' para comprobar la presencia de un valor no vacío. Por tanto, no es posible distinguir entre campos realmente ausentes y campos explícitamente vacíos. En la práctica, esta diferencia rara vez causa problemas en casos de uso de observabilidad, pero es importante tenerla en cuenta al traducir consultas entre sistemas.
Última modificación el 25 de junio de 2026