Como ocorre a replicação dos dados?
Decodificação lógica do PostgreSQL
ReplacingMergeTree
_peerdb_version) da linha, enquanto as exclusões são inserções com uma versão mais recente e _peerdb_is_deleted marcado como true. O mecanismo ReplacingMergeTree faz a deduplicação/mesclagem dos dados em segundo plano e mantém a versão mais recente da linha para uma determinada chave primária (id), permitindo tratar UPDATEs e DELETEs com eficiência como inserções versionadas.
Abaixo está um exemplo de uma instrução CREATE TABLE executada pelo ClickPipes para criar a tabela no ClickHouse.
Exemplo ilustrativo
users entre PostgreSQL e ClickHouse usando ClickPipes.
Etapa 1 mostra o snapshot inicial das 2 linhas no PostgreSQL e o ClickPipes realizando a carga inicial dessas 2 linhas no ClickHouse. Como você pode observar, ambas as linhas são copiadas sem alterações para o ClickHouse.
Etapa 2 mostra três operações na tabela users: inserção de uma nova linha, atualização de uma linha existente e exclusão de outra linha.
Etapa 3 mostra como o ClickPipes replica as operações INSERT, UPDATE e DELETE no ClickHouse como inserts versionados. O UPDATE aparece como uma nova versão da linha com ID 2, enquanto o DELETE aparece como uma nova versão do ID 1, marcada como true usando _is_deleted. Por causa disso, o ClickHouse passa a ter três linhas a mais que o PostgreSQL.
Como resultado, executar uma consulta simples como SELECT count(*) FROM users; pode produzir resultados diferentes no ClickHouse e no PostgreSQL. De acordo com a documentação de merges do ClickHouse, versões antigas de linhas acabam sendo descartadas durante o processo de merge. No entanto, o momento em que esse merge ocorre é imprevisível, o que significa que as consultas no ClickHouse podem retornar resultados inconsistentes até que isso aconteça.
Como podemos garantir resultados de consulta idênticos tanto no ClickHouse quanto no PostgreSQL?
Remover duplicatas usando a palavra-chave FINAL
- Consulta de contagem simples: Conte o número de posts.
- Agregação simples com JOIN: Os 10 principais usuários que acumularam mais visualizações.
configuração FINAL
ROW POLICY
_peerdb_is_deleted = 0 é usar uma ROW POLICY. Abaixo está um exemplo que cria uma ROW POLICY para excluir as linhas deletadas de todas as consultas na tabela votes.
As políticas de linha são aplicadas a uma lista de usuários e roles. Neste exemplo, são aplicadas a todos os usuários e roles. Isso pode ser ajustado para incluir apenas usuários ou roles específicos.
Fazer consultas como no Postgres
Views
Visão materializada atualizável
deduplicated_posts normalmente.