O adaptador dbt-clickhouse
Recursos suportados
- Materialização de tabela
- Materialização de view
- Materialização incremental
- Materialização incremental do tipo Microbatch
- Materializações de visão materializada (usa a forma
TOde MATERIALIZED VIEW, experimental) - Seeds
- Sources
- Geração de documentação
- Testes
- Snapshots
- A maioria das macros do dbt-utils (agora incluídas no dbt-core)
- Materialização efêmera
- Materialização de tabela distribuída (experimental)
- Materialização incremental distribuída (experimental)
- Contratos
- Configurações de coluna específicas do ClickHouse (Codec, TTL…)
- Configurações de tabela específicas do ClickHouse (índices, projeções…)
--sample, e todos os avisos de descontinuação já foram corrigidos para versões futuras. Integrações de catálogo (por exemplo, Iceberg), introduzidas no dbt 1.10, ainda não têm suporte nativo no adaptador, mas há soluções alternativas disponíveis. Consulte a seção Suporte a catálogo para mais detalhes.
Este adaptador ainda não está disponível para uso no dbt Cloud, mas esperamos disponibilizá-lo em breve. Entre em contato com o suporte para obter mais informações.
conceitos do dbt e materializações compatíveis
select do modelo. O código por trás de uma materialização é um SQL boilerplate que envolve sua consulta SELECT em uma instrução para criar uma nova relação ou atualizar uma relação existente.
O dbt fornece 5 tipos de materialização. Todos eles são compatíveis com dbt-clickhouse:
- view (padrão): O modelo é construído como uma view no banco de dados. No ClickHouse, isso é criado como uma view.
- table: O modelo é construído como uma tabela no banco de dados. No ClickHouse, isso é criado como uma table.
- ephemeral: O modelo não é construído diretamente no banco de dados, mas é incorporado aos modelos dependentes como CTEs (expressões de tabela comuns).
- incremental: O modelo é inicialmente materializado como uma tabela e, em execuções subsequentes, o dbt insere novas linhas e atualiza as linhas alteradas na tabela.
- materialized view: O modelo é construído como uma visão materializada no banco de dados. No ClickHouse, isso é criado como uma materialized view.
dbt-clickhouse:
Configuração do dbt e do adaptador do ClickHouse
Instale o dbt-core e o dbt-clickhouse
pip para instalar tanto o dbt quanto o dbt-clickhouse.
Forneça ao dbt os detalhes da conexão da nossa instância do ClickHouse.
clickhouse-service no arquivo ~/.dbt/profiles.yml e informe as propriedades schema, host, port, user e password. A lista completa de opções de configuração da conexão está disponível na página Recursos e configurações:
Criar um projeto dbt
project_name, atualize o arquivo dbt_project.yml para especificar um nome de perfil para se conectar ao servidor ClickHouse.
Testar a conexão
dbt debug na CLI para confirmar se o dbt consegue se conectar ao ClickHouse. Verifique se a resposta inclui Connection test: [OK connection ok], indicando que a conexão foi bem-sucedida.
Acesse a página de guias para saber mais sobre como usar o dbt com o ClickHouse.
Testando e implantando seus modelos (CI/CD)
CI/CD com testes de dados simples e testes unitários
dbt build no seu cluster de produção do ClickHouse.
Estágio de CI/CD mais completo: use dados recentes e teste apenas os modelos afetados
- Se você não precisa de dados recentes para testar, pode restaurar um backup dos seus dados de produção no ambiente de staging.
- Se você precisa de dados recentes para testar, pode usar uma combinação da table function
remoteSecure()com views materializadas atualizáveis para inserir dados na frequência desejada. Outra opção é usar armazenamento de objetos como intermediário e gravar dados periodicamente a partir do seu serviço de produção, depois importá-los para o ambiente de staging usando table functions de armazenamento de objetos ou ClickPipes (para ingestão contínua).
dbt build --select state:modified+ --state path/to/last/deploy/state.json para reconstruir seletivamente o menor conjunto de modelos necessário com base no que mudou desde a última execução em produção.
Solução de problemas comuns
Conexões
- O motor deve ser um dos motores compatíveis.
- Você deve ter permissões adequadas para acessar o banco de dados.
- Se você não estiver usando o motor de tabela padrão do banco de dados, deverá especificar um motor de tabela na configuração do seu modelo.
Entendendo operações de longa duração
debug — isso exibirá o tempo gasto por cada consulta. Por exemplo, isso pode ser feito acrescentando --log-level debug aos comandos do dbt.
Limitações
- O plugin usa uma sintaxe que exige o ClickHouse versão 25.3 ou mais recente. Não testamos versões mais antigas do ClickHouse. No momento, também não testamos tabelas Replicated.
- Diferentes execuções do
dbt-adapterpodem entrar em conflito se forem executadas ao mesmo tempo, pois internamente podem usar os mesmos nomes de tabela para as mesmas operações. Para mais informações, consulte a issue #420. - Atualmente, o adaptador materializa modelos como tabelas usando um INSERT INTO SELECT. Na prática, isso significa duplicação de dados se a execução ocorrer novamente. Datasets muito grandes (PB) podem resultar em tempos de execução extremamente longos, tornando alguns modelos inviáveis. Para melhorar o desempenho, use visões materializadas do ClickHouse implementando a view como
materialized: materialization_view. Além disso, procure minimizar o número de linhas retornadas por qualquer consulta usandoGROUP BYsempre que possível. Prefira modelos que resumam os dados em vez daqueles que apenas os transformam mantendo a mesma contagem de linhas da origem. - Para usar tabelas Distributed para representar um modelo, você deve criar manualmente as tabelas replicadas subjacentes em cada nó. A tabela Distributed, por sua vez, pode ser criada sobre elas. O adaptador não gerencia a criação do cluster.
- Quando o dbt cria uma relação (tabela/view) em um banco de dados, ele normalmente a cria como:
{{ database }}.{{ schema }}.{{ table/view id }}. O ClickHouse não tem o conceito de schemas. Portanto, o adaptador usa{{schema}}.{{ table/view id }}, em queschemaé o banco de dados do ClickHouse. - Modelos/CTEs efêmeros não funcionam se forem colocados antes do
INSERT INTOem uma instrução de insert do ClickHouse; veja https://github.com/ClickHouse/ClickHouse/issues/30323. Isso não deve afetar a maioria dos modelos, mas é preciso ter cuidado com onde um modelo efêmero é colocado nas definições de modelo e em outras instruções SQL.
Fivetran
dbt-clickhouse também está disponível para uso em transformações do Fivetran, permitindo integração e transformação de forma fluida diretamente na plataforma Fivetran com dbt.