t1 no MongoDB para rastrear pedidos de clientes:
t1 no ClickHouse conterá a seguinte linha:
Esquema da tabela
_id: Chave primária do MongoDBdoc: Documento do MongoDB replicado como tipo de dado JSON_peerdb_synced_at: Registra quando a linha foi sincronizada pela última vez_peerdb_version: Acompanha a versão da linha; é incrementada quando a linha é atualizada ou excluída_peerdb_is_deleted: Indica se a linha foi excluída
Mecanismo de tabela ReplacingMergeTree
ReplacingMergeTree. Com esse mecanismo, as atualizações são modeladas como inserções com uma versão mais recente (_peerdb_version) do documento para uma determinada chave primária (_id), permitindo tratar com eficiência atualizações, substituições e exclusões como inserções versionadas.
O ReplacingMergeTree remove duplicatas de forma assíncrona em segundo plano. Para garantir a ausência de duplicatas na mesma linha, use o modificador FINAL. Por exemplo:
Tratamento de exclusões
_peerdb_is_deleted. Em geral, convém filtrá-las nas consultas:
Consultando dados JSON
Query
Result
^:
Query
Result
Tipo Dynamic
Dynamic. O tipo Dynamic permite que o ClickHouse armazene valores de qualquer tipo sem saber o tipo de antemão. Você pode verificar isso com a função toTypeName:
Query
Result
dynamicType. Observe que é possível que o mesmo nome de campo tenha tipos de dados diferentes em linhas diferentes:
Query
Result
Query
Result
Query
Result
Query
Result
Conversão de tipo de campos
sum diretamente em um tipo Dynamic, receberá o seguinte erro:
CAST ou a sintaxe :::
Query
Result
A conversão do tipo Dynamic para o tipo de dado subjacente (determinado por
dynamicType) é muito eficiente, pois o ClickHouse já armazena internamente o valor nesse tipo subjacente.Achatamento de JSON
VIEW normal
VIEW materializada atualizável
FINAL é executada apenas uma vez durante a atualização, eliminando a necessidade de usar FINAL nas consultas subsequentes à tabela de destino.
Uma desvantagem é que os dados na tabela de destino ficam atualizados apenas até a atualização mais recente. Para muitos casos de uso, intervalos de atualização que vão de vários minutos a algumas horas oferecem um bom equilíbrio entre atualidade dos dados e desempenho das consultas.
flattened_t1 sem o modificador FINAL:
VIEW materializada incremental
FINAL na sua VIEW materializada, pois cada atualização acionará um merge. Em vez disso, você pode deduplicar os dados em tempo de consulta criando uma VIEW normal sobre a VIEW materializada.
flattened_t1_final da seguinte forma: