Esta é a Parte 1 de um guia sobre a migração do PostgreSQL para o ClickHouse. Por meio de um exemplo prático, ela mostra como realizar essa migração com eficiência usando uma abordagem de replicação em tempo real (CDC). Muitos dos conceitos abordados também se aplicam a transferências manuais em massa de dados do PostgreSQL para o ClickHouse.
Conjunto de dados
post, vote, user, comment e badge registrados no Stack Overflow de 2008 até abr. de 2024. O esquema do PostgreSQL para esses dados é mostrado abaixo:
Os comandos DDL para criar as tabelas no PostgreSQL estão disponíveis aqui.
Esse esquema, embora não seja necessariamente o mais otimizado, explora vários recursos populares do PostgreSQL, incluindo chaves primárias, chaves estrangeiras, particionamento e índices.
Vamos migrar cada um desses conceitos para seus equivalentes no ClickHouse.
Para os usuários que desejam carregar esse conjunto de dados em uma instância do PostgreSQL para testar as etapas da migração, disponibilizamos os dados para download no formato pg_dump junto com o DDL, e os comandos subsequentes de carregamento de dados são mostrados abaixo:
Embora os resultados do nosso exemplo usem o conjunto de dados completo para mostrar as diferenças de desempenho entre o Postgres e o ClickHouse, todas as etapas documentadas abaixo são funcionalmente idênticas com o subconjunto menor. Os usuários que quiserem carregar o conjunto de dados completo no Postgres podem ver aqui. Devido às restrições de chave estrangeira impostas pelo esquema acima, o conjunto de dados completo para PostgreSQL contém apenas linhas que satisfazem a integridade referencial. Uma versão em Parquet, sem essas restrições, pode ser carregada facilmente diretamente no ClickHouse, se necessário.
Migração de dados
Replicação em tempo real (CDC)
users é criada no ClickHouse usando o ClickPipes.
Carga manual em massa com atualizações periódicas
- Funções de tabela - Uso da função de tabela Postgres no ClickHouse para fazer
SELECTdos dados no Postgres eINSERTem uma tabela do ClickHouse. É indicada para cargas em massa de conjuntos de dados de até várias centenas de GB. - Exportações - Exportação para formatos intermediários, como CSV ou arquivos de script SQL. Esses arquivos podem então ser carregados no ClickHouse a partir do cliente, por meio da cláusula
INSERT FROM INFILE, ou usando armazenamento de objetos e as funções associadas, como s3 e gcs.
DESCRIBE com a função de tabela Postgres. O comando a seguir descreve a tabela posts no PostgreSQL; ajuste-o de acordo com o seu ambiente:
Query
Query
INSERT INTO SELECT, lendo os dados do PostgreSQL e inserindo-os no ClickHouse:
Query
WHERE pode ser aplicada ao SELECT. Essa abordagem também pode ser usada para oferecer suporte a atualizações, desde que haja garantia de que elas sempre atualizem a mesma coluna. Já para dar suporte a exclusões, será necessária uma recarga completa, o que pode ser difícil de viabilizar à medida que a tabela cresce.
Demonstramos uma carga inicial e uma carga incremental usando CreationDate (presumimos que ela seja atualizada se as linhas forem atualizadas)..
O ClickHouse executará no servidor PostgreSQL cláusulasWHEREsimples, como=,!=,>,>=,<,<=e IN. Assim, cargas incrementais podem ser mais eficientes se houver um índice nas colunas usadas para identificar o conjunto de alterações.
Um método possível para detectar operações de UPDATE ao usar replicação de consultas é usar aClique aqui para a Parte 2coluna de sistema XMIN(IDs de transação) como watermark — uma mudança nessa coluna indica uma alteração e, portanto, pode ser aplicada à tabela de destino. Os usuários que adotarem essa abordagem devem estar cientes de que os valores deXMINpodem sofrer wraparound, e as comparações exigem uma varredura completa da tabela, o que torna o rastreamento de alterações mais complexo.