Depois de migrar 8TB, o Clickhouse "sequestrou" meus dados kkkk
E aí (novamente), pessoal.
Seguindo a saga de migração do PostgreSQL para o ClickHouse...
Hoje venho falar de um problema específico que estou enfrentando depois de migrar todos os dados para o ClickHouse.
Estou usando a versão self hosted do Clickhouse, não a versão cloud.
Mas antes... se este é o primeiro post que você vê dessa saga, aqui vai a lista de posts anteriores:
Continuando...
Vou tentar ser mais sucinto neste post, pois escrevi muito nos anteriores.
De ontem para hoje estou passando raiva com o ClickHouse. Motivo? Extrair os dados dele para outro DB ou até para outra tabela dentro dele mesmo é um verdadeiro parto!
E isso está começando a me deixar preocupado com situações futuras que demandem esse processo em produção.
Consegui fazer a migração de 44 bilhões de dados do PostgreSQL para uma tabela já com os ajustes finais no ClickHouse.
Até aí, tudo bem. Já pretendia colocar em produção, até que surgiu a necessidade de mudar o esquema da tabela.
Explicação: O ClickHouse possui a capacidade de particionar os dados e, na ideia de que seria um particionamento similar ao do PostgreSQL, quis logo implementar para facilitar as consultas.
Particionei com base em uma coluna que fazia sentido para acelerar as consultas.
Até que descobri que o particionamento não faz diferença nisso; pelo contrário, acaba prejudicando os inserts, já que os dados precisam ser "pulverizados" nas partições (que são pastas no disco).
A solução? Criar uma nova tabela sem particionamento (já que, no meu caso, é inútil) e mover os dados de uma para outra!
De início, pareceu bastante simples. A própria documentação do ClickHouse diz que basta executar um INSERT INTO tabela_nova SELECT * FROM tabela_antiga e o DB se encarrega de fazer isso em lotes, sem dor de cabeça.
Masss... nem tudo são flores.
Por algum motivo, essa migração estava sendo cancelada entre 4 e 5 bilhões de dados movidos.
Executei 3 vezes, e nas 3 parou no mesmo ponto.
Tentei executar uma migração via script personalizado (como fiz do PostgreSQL para o ClickHouse).
Problema: O ClickHouse não tem ID sequencial nativo, e o ORDER BY da tabela não garante uma sequência ideal de consulta para percorrer todo o DB em lotes.
E, para piorar, consultas com OFFSET são desaconselhadas no ClickHouse, pois não performam nada bem.
Nesse momento, estou escrevendo este post e pensando em como solucionar esse dilema que o ClickHouse criou. Ele praticamente "sequestrou" os dados e não quer me deixar mover kkkk.
Me pergunto como seria se, futuramente, eu precisasse abandonar o ClickHouse e migrar para outro DB.
Por enquanto, estou tentando migrar usando as partições que existem na tabela (128 no total, cada uma com algumas centenas de milhões de dados). Migrar cada uma individualmente parece funcionar, mas o problema é a tabela nova, que não possui particionamento — o que tornaria essa abordagem inviável futuramente.
Existe a possibilidade de fazer um dump dos dados em um arquivo CSV (ou outro padrão de texto), mas não imagino que seja viável considerando a quantidade massiva de 44Bi linhas.
Me resta queimar neurônios um pouco mais...
Um pouco desapontado com o ClickHouse, mas espero encontrar uma solução para esse problema.