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 exemploan_array[1]. -
Multi-fields: O Elasticsearch permite indexar o mesmo campo de várias formas (por exemplo, como
textekeyword). 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, comoresourceAttributeselogAttributes. 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
Mapno 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
Mapexige carregar oMapinteiro na memória, o que pode não ser ideal em termos de desempenho. - Sem subcolunas: diferentemente de JSON, chaves em um
Mapnão são representadas como subcolunas reais, o que limita a capacidade do ClickHouse de indexar, comprimir e consultar com eficiência.
Mappara o tipoJSONaprimorado do ClickHouse. O tipoJSONresolve muitas das limitações doMap:- 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 paraMapem 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”.
- Tipos de valor uniformes: colunas