Inserindo no ClickHouse vs. bancos de dados OLTP
Boas práticas para inserções
Faça inserções em lotes grandes
Mantenha lotes consistentes para novas tentativas idempotentes
-
- Se o nó que recebe os dados apresentar problemas, a consulta de inserção expirará (ou retornará um erro mais específico) e não receberá confirmação.
-
- Se os dados forem gravados pelo nó, mas a confirmação não puder ser enviada de volta ao remetente da consulta por causa de interrupções de rede, o remetente receberá um timeout ou um erro de rede.
Inserção em uma tabela MergeTree ou em uma tabela distribuída
internal_replication=true.
Isso fará com que o ClickHouse replique os dados para qualquer shard de réplica disponível e garantirá que os dados sejam eventualmente consistentes.
Se esse balanceamento de carga no lado do cliente for inconveniente, você pode inserir por meio de uma tabela distribuída, que então distribuirá as escritas entre os nós. Novamente, é recomendável definir internal_replication=true.
No entanto, é importante observar que essa abordagem é um pouco menos eficiente, pois as escritas precisam ser feitas localmente no nó com a tabela distribuída e depois enviadas aos shards.
Use inserções assíncronas para pequenos lotes
Use os clientes oficiais do ClickHouse
Prefira o formato Native
Use a interface HTTP
Exemplo básico
INSERT INTO TABLE no ClickHouse. Vamos inserir alguns dados na tabela que criamos no guia de início “Criando tabelas no ClickHouse”.
SELECT:
Carregando dados do Postgres
ClickPipes, uma ferramenta de ETL projetada especificamente para replicação de bancos de dados PostgreSQL. Ela está disponível em ambas as opções:- ClickHouse Cloud - disponível por meio do nosso serviço gerenciado de ingestão no ClickPipes.
- Autogerenciado - por meio do projeto open-source PeerDB.
- O mecanismo de tabela PostgreSQL para ler dados diretamente, como mostrado nos exemplos anteriores. Em geral, isso é apropriado se a replicação em lote com base em um watermark conhecido, por exemplo, um timestamp, for suficiente, ou se for uma migração pontual. Essa abordagem pode escalar para dezenas de milhões de linhas. Usuários que desejam migrar conjuntos de dados maiores devem considerar várias requisições, cada uma tratando de um fragmento dos dados. Tabelas de staging podem ser usadas para cada fragmento antes que suas partições sejam movidas para uma tabela final. Isso permite repetir requisições que falharem. Para mais detalhes sobre essa estratégia de carregamento em massa, veja aqui.
- Os dados podem ser exportados do PostgreSQL no formato CSV. Depois, podem ser inseridos no ClickHouse a partir de arquivos locais ou por meio de armazenamento de objetos usando funções de tabela.
Precisa de ajuda para inserir grandes volumes de dados?Se você precisar de ajuda para inserir grandes volumes de dados ou encontrar algum erro ao importar dados para o ClickHouse Cloud, entre em contato conosco pelo e-mail support@clickhouse.com, e poderemos ajudar.
Inserção de dados pela linha de comando
- Você instalou o ClickHouse
- O
clickhouse-serverestá em execução - Você tem acesso a um terminal com
wget,zcatecurl
clickhouse-client em batch mode. Para mais informações e exemplos de inserção de dados pela linha de comando com clickhouse-client em batch mode, consulte “Batch mode”.
Usaremos o Hacker News dataset neste exemplo, que contém 28 milhões de linhas de dados do Hacker News.
Baixe o CSV
Execute o comando a seguir para baixar uma versão CSV do dataset do nosso bucket público do S3:Crie a tabela
Com oclickhouse-server em execução, você pode criar uma tabela vazia com o esquema a seguir diretamente pela linha de comando usando o clickhouse-client em batch mode:_EOF) para evitar qualquer interpolação. Sem as aspas simples, seria necessário escapar os backticks ao redor dos nomes das colunas.Insira os dados pela linha de comando
Em seguida, execute o comando abaixo para inserir na tabela os dados do arquivo que você baixou anteriormente:gzip, zcat ou similar e, em seguida, direcionar os dados descompactados para o clickhouse-client com a instrução INSERT e o FORMAT apropriados.Ao inserir dados com o
clickhouse-client no modo interativo, é possível deixar que o ClickHouse faça a descompactação na inserção usando a cláusula COMPRESSION. O ClickHouse pode detectar automaticamente o tipo de compressão pela extensão do arquivo, mas você também pode especificá-lo explicitamente.A consulta de inserção ficaria assim:hackernews:inserindo dados pela linha de comando com curl
Nas etapas anteriores, você primeiro baixou o arquivo CSV para sua máquina local usandowget. Também é possível inserir os dados diretamente da URL remota com um único comando.Execute o comando a seguir para truncar os dados da tabela hackernews, para que você possa inseri-los novamente sem a etapa intermediária de baixar o arquivo para sua máquina local: