Pular para o conteúdo principal
Elasticsearch e ClickHouse oferecem suporte a uma grande variedade de tipos de dados, mas seus modelos subjacentes de armazenamento e consulta são fundamentalmente diferentes. Esta seção relaciona os tipos de campo do Elasticsearch mais usados aos seus equivalentes no ClickHouse, quando disponíveis, e fornece contexto para orientar migrações. Quando não houver equivalente, são fornecidas alternativas ou observações nos comentários.

Notas

  • Arrays: No Elasticsearch, todos os campos oferecem suporte nativo a arrays. No ClickHouse, arrays precisam ser definidos explicitamente (por exemplo, Array(String)), com a vantagem de ser possível acessar e consultar posições específicas, por exemplo an_array[1].
  • Multi-fields: O Elasticsearch permite indexar o mesmo campo de várias formas (por exemplo, como text e keyword). No ClickHouse, esse padrão precisa ser modelado usando colunas ou views separadas.
  • Tipos Map e JSON - No ClickHouse, o tipo Map é comumente usado para modelar estruturas dinâmicas de chave-valor, como resourceAttributes e logAttributes. Esse tipo permite uma ingestão flexível sem esquema ao possibilitar a adição de chaves arbitrárias em tempo de execução — conceitualmente semelhante a objetos JSON no Elasticsearch. No entanto, há limitações importantes a considerar:
    • Tipos de valor uniformes: colunas Map no ClickHouse precisam ter um tipo de valor consistente (por exemplo, Map(String, String)). Valores de tipos mistos não são suportados sem coerção.
    • Custo de desempenho: acessar qualquer chave em um Map exige carregar o Map inteiro na memória, o que pode não ser ideal em termos de desempenho.
    • Sem subcolunas: diferentemente de JSON, chaves em um Map não são representadas como subcolunas reais, o que limita a capacidade do ClickHouse de indexar, comprimir e consultar com eficiência.
    Por causa dessas limitações, o ClickStack está migrando do Map para o tipo JSON aprimorado do ClickHouse. O tipo JSON resolve muitas das limitações do Map:
    • Armazenamento verdadeiramente colunar: cada caminho JSON é armazenado como uma subcoluna, permitindo compressão, filtragem e execução vetorizada de consultas de forma eficiente.
    • Suporte a tipos mistos: diferentes tipos de dados (por exemplo, inteiros, strings, arrays) podem coexistir no mesmo caminho sem coerção nem unificação de tipos.
    • Escalabilidade do sistema de arquivos: limites internos para chaves dinâmicas (max_dynamic_paths) e tipos (max_dynamic_types) evitam uma explosão de arquivos de coluna em disco, mesmo com conjuntos de chaves de alta cardinalidade.
    • Armazenamento denso: valores nulos e ausentes são armazenados de forma esparsa para evitar sobrecarga desnecessária. O tipo JSON é especialmente adequado para cargas de trabalho de observabilidade, oferecendo a flexibilidade da ingestão sem esquema com o desempenho e a escalabilidade dos tipos nativos do ClickHouse — o que o torna um substituto ideal para Map em campos de atributos dinâmicos. Para mais detalhes sobre o tipo JSON, recomendamos o guia de JSON e “How we built a new powerful JSON data type for ClickHouse”.
Última modificação em 19 de junho de 2026