Instalar dlt com ClickHouse
Para instalar a biblioteca dlt com as dependências do ClickHouse:
Guia de configuração
1
Inicialize o projeto `dlt`
Comece inicializando um novo projeto O comando acima gera vários arquivos e diretórios, incluindo ou
dlt da seguinte forma:Este comando inicializará seu pipeline com chess como source e ClickHouse como destino.
.dlt/secrets.toml e um arquivo requirements para o ClickHouse. Você pode instalar as dependências necessárias especificadas no arquivo requirements executando o seguinte:pip install dlt[clickhouse], que instala a biblioteca dlt e as dependências necessárias para trabalhar com o ClickHouse como destino.2
Configure o banco de dados do ClickHouse
Para carregar dados no ClickHouse, você precisa criar um banco de dados no ClickHouse. Aqui está uma visão geral do que deve ser feito:
- Você pode usar um banco de dados ClickHouse existente ou criar um novo.
-
Para criar um novo banco de dados, conecte-se ao seu servidor ClickHouse usando a ferramenta de linha de comando
clickhouse-clientou um cliente SQL de sua escolha. - Execute os seguintes comandos SQL para criar um novo banco de dados, um usuário e conceder as permissões necessárias:
3
Adicione as credenciais
Em seguida, configure as credenciais do ClickHouse no arquivo Você pode fornecer uma string de conexão com o banco de dados semelhante à usada pela biblioteca
.dlt/secrets.toml, como mostrado abaixo:HTTP_PORTO parâmetro
http_port especifica o número da porta a ser usada ao se conectar à interface HTTP do servidor ClickHouse. Isso é diferente da porta padrão 9000, que é usada para o protocolo TCP nativo.Você deve definir http_port se não estiver usando staging externo (ou seja, se não definir o parâmetro staging no seu pipeline). Isso acontece porque o staging de armazenamento local integrado do ClickHouse usa a biblioteca clickhouse-connect, que se comunica com o ClickHouse por HTTP.Certifique-se de que seu servidor ClickHouse esteja configurado para aceitar conexões HTTP na porta especificada por http_port. Por exemplo, se você definir http_port = 8443, o ClickHouse deverá estar escutando requisições HTTP na porta 8443. Se estiver usando staging externo, você pode omitir o parâmetro http_port, já que o clickhouse-connect não será usado nesse caso.clickhouse-driver. As credenciais acima ficarão assim:Disposição de escrita
merge, é necessário especificar uma primary_key para o recurso. Você pode saber mais aqui.
Append: Esta é a disposição padrão. Ela adiciona os dados aos dados já existentes no destino, ignorando o campo primary_key.
Carregamento de dados
- Para arquivos locais, a biblioteca
clickhouse-connecté usada para carregar os arquivos diretamente em tabelas do ClickHouse usando o comandoINSERT. - Para arquivos em armazenamento remoto, como
S3,Google Cloud StorageouAzure Blob Storage, são usadas funções de tabela do ClickHouse, como s3, gcs e azureBlobStorage, para ler os arquivos e inserir os dados em tabelas.
Conjuntos de dados
ClickHouse não oferece suporte a vários conjuntos de dados em um único banco de dados, enquanto o dlt depende de conjuntos de dados por vários motivos. Para fazer o ClickHouse funcionar com o dlt, os nomes das tabelas geradas pelo dlt no seu banco de dados ClickHouse receberão o prefixo do nome do conjunto de dados, separados pelo dataset_table_separator configurável. Além disso, será criada uma tabela sentinela especial, que não contém nenhum dado, permitindo que o dlt reconheça quais conjuntos de dados virtuais já existem em um destino ClickHouse.
Formatos de arquivo suportados
- jsonl é o formato preferido tanto para carregamento direto quanto para staging.
- parquet é suportado tanto para carregamento direto quanto para staging.
clickhouse tem alguns desvios específicos em relação aos destinos SQL padrão:
ClickHousetem um tipo de dadoobjectexperimental, mas constatamos que ele pode ser um pouco imprevisível, então o destino ClickHouse do dlt carregará esse tipo de dado complexo em uma coluna de texto. Se você precisar desse recurso, entre em contato com nossa comunidade no Slack, e consideraremos adicioná-lo.ClickHousenão oferece suporte ao tipo de dadotime. O valor de tempo será carregado em uma colunatext.ClickHousenão oferece suporte ao tipo de dadobinary. Em vez disso, os dados binários serão carregados em uma colunatext. Ao carregar dejsonl, os dados binários serão uma string em base64, e ao carregar de parquet, o objetobinaryserá convertido emtext.ClickHouseaceita adicionar colunas não nulas a uma tabela já populada.ClickHousepode produzir erros de arredondamento em determinadas condições ao usar o tipo de dado float ou double. Se você não puder correr o risco de ter erros de arredondamento, use o tipo de dado decimal. Por exemplo, carregar o valor 12.7001 em uma coluna double com o formato de arquivo do loader definido comojsonlprevisivelmente produzirá um erro de arredondamento.
Hints de coluna compatíveis
primary_key- marca a coluna como parte da chave primária. Várias colunas podem ter esse hint para criar uma chave primária composta.
Mecanismo de tabela
ReplicatedMergeTree no ClickHouse. Você pode especificar um mecanismo de tabela alternativo usando table_engine_type com o adaptador do ClickHouse:
merge_tree- cria tabelas usando o mecanismoMergeTreereplicated_merge_tree(padrão) - cria tabelas usando o mecanismoReplicatedMergeTree
Suporte a staging
dlt fará upload de arquivos Parquet ou jsonl para o local de staging e usará table functions do ClickHouse para carregar os dados diretamente dos arquivos armazenados nessa área.
Consulte a documentação do sistema de arquivos para saber como configurar as credenciais dos destinos de staging:
Para executar um pipeline com staging ativado:
Usando o Google Cloud Storage como área de staging
- Crie chaves HMAC para sua conta de serviço do GCS seguindo o guia do Google Cloud.
-
Configure as chaves HMAC, bem como
client_email,project_ideprivate_keyda sua conta de serviço, nas configurações de destino do ClickHouse do seu projeto dlt emconfig.toml:
bashgcp_access_key_id e gcp_secret_access_key), agora você também precisa fornecer client_email, project_id e private_key da sua conta de serviço em [destination.filesystem.credentials]. Isso porque o suporte a staging do GCS está implementado no momento como uma solução temporária e ainda não foi otimizado.
O dlt passará essas credenciais ao ClickHouse, que fará a autenticação e o acesso ao GCS.
Há um trabalho em andamento para simplificar e melhorar futuramente a configuração de staging do GCS para o destino dlt do ClickHouse. O suporte adequado a staging do GCS está sendo acompanhado nestas issues do GitHub:
- Fazer o destino filesystem funcionar com o gcs no modo de compatibilidade com s3
- Suporte à área de staging do Google Cloud Storage