Pular para o conteúdo principal

Busca no ClickStack e no Elastic

O ClickHouse é um engine com SQL nativo, projetado desde o início para cargas de trabalho analíticas de alto desempenho. Em contraste, o Elasticsearch fornece uma interface semelhante a SQL, convertendo SQL para a query DSL subjacente do Elasticsearch — o que significa que ela não é uma funcionalidade nativa, e a paridade de recursos é limitada. O ClickHouse não apenas oferece suporte completo a SQL, como também o estende com uma variedade de funções voltadas para observabilidade, como argMax, histogram e quantileTiming, que simplificam consultas em logs, métricas e traces estruturados. Para exploração simples de logs e traces, a UI do ClickStack (HyperDX) fornece uma sintaxe no estilo Lucene para filtragem textual intuitiva de consultas por campo-valor, intervalos, curingas e muito mais. Isso é comparável à sintaxe Lucene no Elasticsearch e a elementos da Kibana Query Language. A interface de busca oferece suporte a essa sintaxe familiar, mas a traduz nos bastidores em cláusulas SQL WHERE eficientes, tornando a experiência familiar para usuários do Kibana e, ao mesmo tempo, permitindo aproveitar o poder do SQL quando necessário. Isso permite que você explore toda a gama de funções de busca em strings, funções de similaridade e funções de data e hora no ClickHouse. Abaixo, comparamos as linguagens de consulta Lucene do ClickStack e do Elasticsearch.

Sintaxe de busca do ClickStack vs. query string do Elasticsearch

Tanto o ClickStack quanto o Elasticsearch oferecem linguagens de consulta flexíveis para permitir uma filtragem intuitiva de logs e traces. Enquanto a query string do Elasticsearch é fortemente integrada ao seu DSL e mecanismo de indexação, o ClickStack oferece uma sintaxe inspirada no Lucene que é traduzida em ClickHouse SQL nos bastidores. A tabela abaixo mostra como padrões de busca comuns se comportam nos dois sistemas, destacando semelhanças de sintaxe e diferenças na execução no backend.

Diferenças entre existência/ausência

Diferentemente do Elasticsearch, em que um campo pode ser totalmente omitido de um evento e, portanto, realmente “não existir”, o ClickHouse exige que todas as colunas em um esquema de tabela existam. Se um campo não for fornecido em um evento de inserção:
  • Para campos Nullable, ele será definido como NULL.
  • Para campos não anuláveis (o padrão), ele será preenchido com um valor padrão (geralmente uma string vazia, 0 ou equivalente).
No ClickStack, usamos a segunda opção, já que Nullable não é recomendado. Esse comportamento significa que verificar se um campo “existe” no sentido do Elasticsearch não tem suporte direto. Em vez disso, você pode usar field:* ou field != '' para verificar a presença de um valor não vazio. Assim, não é possível distinguir entre campos realmente ausentes e campos explicitamente vazios. Na prática, essa diferença raramente causa problemas em casos de uso de observabilidade, mas é importante tê-la em mente ao traduzir consultas entre sistemas.
Última modificação em 1 de julho de 2026