> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-c8329da0.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Descrição das funcionalidades e das configurações gerais disponíveis

# Funcionalidades e configurações

export const ClickHouseSupportedBadge = () => {
  return <div className="ClickHouseSupportedBadge">
            <div className="ClickHouseSupportedIcon">
                <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                    <path d="M1.30762 1.39073C1.30762 1.3103 1.37465 1.22986 1.46849 1.22986H2.64824C2.72868 1.22986 2.80912 1.29689 2.80912 1.39073V14.4886C2.80912 14.5691 2.74209 14.6495 2.64824 14.6495H1.46849C1.38805 14.6495 1.30762 14.5825 1.30762 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M4.2832 1.39073C4.2832 1.3103 4.35023 1.22986 4.44408 1.22986H5.62383C5.70427 1.22986 5.7847 1.29689 5.7847 1.39073V14.4886C5.7847 14.5691 5.71767 14.6495 5.62383 14.6495H4.44408C4.36364 14.6495 4.2832 14.5825 4.2832 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M7.25977 1.39073C7.25977 1.3103 7.3268 1.22986 7.42064 1.22986H8.60039C8.68083 1.22986 8.76127 1.29689 8.76127 1.39073V14.4886C8.76127 14.5691 8.69423 14.6495 8.60039 14.6495H7.42064C7.3402 14.6495 7.25977 14.5825 7.25977 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M10.2354 1.39073C10.2354 1.3103 10.3024 1.22986 10.3962 1.22986H11.576C11.6564 1.22986 11.7369 1.29689 11.7369 1.39073V14.4886C11.7369 14.5691 11.6698 14.6495 11.576 14.6495H10.3962C10.3158 14.6495 10.2354 14.5825 10.2354 14.4886V1.39073Z" fill="currentColor" />
                    <path d="M13.2256 6.6057C13.2256 6.52526 13.2926 6.44482 13.3865 6.44482H14.5662C14.6466 6.44482 14.7271 6.51186 14.7271 6.6057V9.27354C14.7271 9.35398 14.6601 9.43442 14.5662 9.43442H13.3865C13.306 9.43442 13.2256 9.36739 13.2256 9.27354V6.6057Z" fill="currentColor" />
                </svg>
            </div>
            ClickHouse Supported
        </div>;
};

Nesta seção, apresentamos a documentação de alguns dos recursos disponíveis para o dbt com ClickHouse.

<div id="profile-yml-configurations">
  ## Configurações do Profile.yml
</div>

Para se conectar ao ClickHouse pelo dbt, você precisará adicionar um [perfil](https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles) ao arquivo `profiles.yml`. Um perfil do ClickHouse segue a sintaxe abaixo:

```yaml theme={null}
your_profile_name:
  target: dev
  outputs:
    dev:
      type: clickhouse

      # Opcional
      schema: [default] # Banco de dados ClickHouse para modelos dbt
      driver: [http] # http ou native. Se não definido, será determinado automaticamente com base na configuração de porta
      host: [localhost] 
      port: [8123]  # If not set, defaults to 8123, 8443, 9000, 9440 depending on the secure and driver settings 
      user: [default] # Usuário para todas as operações de banco de dados
      password: [<empty string>] # Senha do usuário
      cluster: [<empty string>] # Se definido, certas operações DDL/de tabela serão executadas com a cláusula `ON CLUSTER` usando este cluster. As materializações distribuídas exigem esta configuração para funcionar. Consulte a seção ClickHouse Cluster a seguir para mais detalhes.
      verify: [True] # Valida o certificado TLS ao usar TLS/SSL
      secure: [False] # Usa TLS (protocolo native) ou HTTPS (protocolo http)
      client_cert: [null] # Caminho para um certificado TLS de cliente no formato .pem
      client_cert_key: [null] # Caminho para a chave privada do certificado TLS de cliente
      retries: [1] # Número de tentativas para uma exceção de banco de dados "retriable" (como um erro 503 'Service Unavailable')
      compression: [<empty string>] # Usa compressão gzip se verdadeiro (http), ou tipo de compressão para uma conexão native
      connect_timeout: [10] # Timeout em segundos para estabelecer uma conexão com o ClickHouse
      send_receive_timeout: [300] # Timeout em segundos para receber dados do servidor ClickHouse
      cluster_mode: [False] # Usa configurações específicas para melhorar a operação em bancos de dados Replicated (recomendado para ClickHouse Cloud)
      use_lw_deletes: [False] # Usa a estratégia `delete+insert` como estratégia incremental padrão.
      check_exchange: [True] # Valida se o ClickHouse suporta o comando atômico EXCHANGE TABLES. (Não necessário para a maioria das versões do ClickHouse)
      local_suffix: [_local] # Sufixo de tabela das tabelas locais nos shards para materializações distribuídas.
      local_db_prefix: [<empty string>] # Prefixo de banco de dados das tabelas locais nos shards para materializações distribuídas. Se vazio, usa o mesmo banco de dados da tabela distribuída.
      allow_automatic_deduplication: [False] # Habilita a desduplicação automática do ClickHouse para tabelas Replicated
      tcp_keepalive: [False] # Somente para cliente native; especifica a configuração de TCP keepalive. Especifique configurações personalizadas de keepalive como [idle_time_sec, interval_sec, probes].
      custom_settings: [{}] # Um dicionário/mapeamento de configurações personalizadas do ClickHouse para a conexão - o padrão é vazio.
      database_engine: '' # Motor de banco de dados a ser usado ao criar novos schemas (bancos de dados) do ClickHouse. Se não definido (padrão), os novos bancos de dados usarão o motor de banco de dados padrão do ClickHouse (geralmente Atomic).
      threads: [1] # Número de threads a serem usadas ao executar consultas. Antes de definir um valor maior que 1, certifique-se de ler a seção [read-after-write consistency](#read-after-write-consistency).
      
      # Configurações de conexão Native (clickhouse-driver)
      sync_request_timeout: [5] # Timeout para ping do servidor
      compress_block_size: [1048576] # Tamanho do bloco de compressão se a compressão estiver habilitada
```

<div id="schema-vs-database">
  ### Schema vs Banco de dados
</div>

O identificador de relation do model do dbt `database.schema.table` não é compatível com o ClickHouse porque o ClickHouse não
dá suporte a `schema`.
Por isso, usamos uma abordagem simplificada, `schema.table`, em que `schema` é o banco de dados do ClickHouse. Não é
recomendável usar o banco de dados `default`.

<div id="set-statement-warning">
  ### Aviso sobre a instrução SET
</div>

Em muitos ambientes, usar a instrução SET para fazer com que uma configuração do ClickHouse persista em todas as consultas do DBT não é confiável
e pode causar falhas inesperadas. Isso é particularmente verdadeiro ao usar conexões HTTP por meio de um balanceador de carga que
distribui as consultas entre vários nós (como no ClickHouse Cloud), embora, em algumas circunstâncias, isso também possa
acontecer com conexões nativas do ClickHouse. Assim, recomendamos definir as configurações necessárias do ClickHouse na
propriedade "custom\_settings" do perfil do DBT como prática recomendada, em vez de depender de uma instrução "SET" em um pre-hook, como
tem sido sugerido ocasionalmente.

<div id="setting-quote_columns">
  ### Configurando `quote_columns`
</div>

Para evitar um aviso, certifique-se de definir explicitamente um valor para `quote_columns` no seu `dbt_project.yml`. Consulte a [documentação sobre quote\_columns](https://docs.getdbt.com/reference/resource-configs/quote_columns) para mais informações.

```yaml theme={null}
seeds:
  +quote_columns: false  #ou `true` se os cabeçalhos de coluna do CSV tiverem espaços
```

<div id="about-the-clickhouse-cluster">
  ### Sobre o cluster do ClickHouse
</div>

Ao usar um cluster do ClickHouse, você precisa considerar dois pontos:

* Definir a configuração `cluster`.
* Garantir a consistência de leitura após escrita, especialmente se você estiver usando mais de um `threads`.

<div id="cluster-setting">
  #### Configuração de cluster
</div>

A configuração `cluster` no perfil permite que o dbt-clickhouse seja executado em um cluster ClickHouse. Se `cluster` estiver definida no perfil, **todos os modelos serão criados com a cláusula `ON CLUSTER`** por padrão — exceto os que usam o motor **Replicated**. Isso inclui:

* Criação de banco de dados
* Materializações de view
* Materializações de tabela e incrementais
* Materializações distribuídas

Motores Replicated **não** incluirão a cláusula `ON CLUSTER`, pois foram projetados para gerenciar a replicação internamente.

Para **desativar** a criação baseada em cluster para um modelo específico, adicione a config `disable_on_cluster`:

```sql theme={null}
{{ config(
        engine='MergeTree',
        materialized='table',
        disable_on_cluster='true'
    )
}}

```

materializações do tipo table e incremental com engine não replicado não serão afetadas pela configuração `cluster` (o modelo
será criado apenas no nó ao qual você está conectado).

**Compatibilidade**

Se um modelo tiver sido criado sem a configuração `cluster`, o dbt-clickhouse detectará essa situação e executará todo o DDL/DML
sem a cláusula `on cluster` para esse modelo.

<div id="read-after-write-consistency">
  #### Consistência de leitura após escrita
</div>

O dbt depende de um modelo de consistência de leitura após inserção. Isso não é compatível com clusters do ClickHouse com mais de uma réplica se você não puder garantir que todas as operações sejam direcionadas à mesma réplica. Você pode até não encontrar problemas no uso diário do dbt, mas, dependendo do seu cluster, há algumas estratégias para garantir isso:

* Se você estiver usando um cluster do ClickHouse Cloud, basta definir `select_sequential_consistency: 1` na propriedade `custom_settings` do seu perfil. Você pode encontrar mais informações sobre essa configuração [aqui](/pt-BR/reference/settings/session-settings#select_sequential_consistency).
* Se você estiver usando um cluster self-hosted, certifique-se de que todas as solicitações do dbt sejam enviadas para a mesma réplica do ClickHouse. Se houver um balanceador de carga na frente dele, tente usar algum mecanismo de `replica aware routing`/`sticky sessions` para sempre alcançar a mesma réplica. Adicionar a configuração `select_sequential_consistency = 1` em clusters fora do ClickHouse Cloud [não é recomendado](/pt-BR/reference/settings/session-settings#select_sequential_consistency).

<div id="additional-clickhouse-macros">
  ## Macros adicionais do ClickHouse
</div>

<div id="model-materialization-utility-macros">
  ### Macros utilitárias de materialização de modelos
</div>

As macros a seguir estão incluídas para facilitar a criação de tabelas e views específicas do ClickHouse:

* `engine_clause` -- Usa a propriedade de configuração `engine` do modelo para definir um engine de tabela do ClickHouse. O dbt-clickhouse
  usa o engine `MergeTree` por padrão.
* `partition_cols` -- Usa a propriedade de configuração `partition_by` do modelo para definir uma chave de partição do ClickHouse. Nenhuma
  chave de partição é definida por padrão.
* `order_cols` -- Usa a configuração `order_by` do modelo para definir uma chave de ordenação/ORDER BY do ClickHouse. Se não for especificada,
  o ClickHouse usará uma `tuple()` vazia e a tabela não será ordenada
* `primary_key_clause` -- Usa a propriedade de configuração `primary_key` do modelo para definir uma chave primária do ClickHouse. Por
  padrão, a chave primária é definida, e o ClickHouse usará a cláusula ORDER BY como chave primária.
* `on_cluster_clause` -- Usa a propriedade `cluster` do perfil para adicionar uma cláusula `ON CLUSTER` a determinadas operações do dbt:
  materializações distribuídas, criação de views e criação de banco de dados.
* `ttl_config` -- Usa a propriedade de configuração `ttl` do modelo para definir uma expressão de TTL de tabela do ClickHouse. Nenhum TTL é
  definido por padrão.

<div id="s3source-helper-macro">
  ### Macro auxiliar `s3Source`
</div>

A macro `s3source` simplifica o processo de selecionar dados no ClickHouse diretamente do S3 usando a função de tabela S3 do ClickHouse.
Ela funciona
preenchendo os parâmetros da função de tabela S3 a partir de um dicionário de configuração nomeado (o nome do dicionário deve terminar
em `s3`). A macro
primeiro procura o dicionário nas `vars` do perfil e, depois, na configuração do modelo. O dicionário pode conter
qualquer uma das seguintes
chaves usadas para preencher os parâmetros da função de tabela S3:

| Nome do argumento        | Descrição                                                                                                                                                                                                              |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| bucket                   | A URL base do bucket, como `https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi`. `https://` é presumido se nenhum protocolo for informado.                                                             |
| path                     | O caminho do S3 a ser usado na consulta da tabela, como `/trips_4.gz`. Os curingas do S3 são compatíveis.                                                                                                              |
| fmt                      | O formato de entrada esperado pelo ClickHouse (como `TSV` ou `CSVWithNames`) dos objetos S3 referenciados.                                                                                                             |
| structure                | A estrutura de colunas dos dados no bucket, como uma lista de pares nome/tipo de dado, como `['id UInt32', 'date DateTime', 'value String']`. Se não for fornecida, o ClickHouse inferirá a estrutura.                 |
| aws\_access\_key\_id     | O ID da chave de acesso do S3.                                                                                                                                                                                         |
| aws\_secret\_access\_key | A chave secreta do S3.                                                                                                                                                                                                 |
| role\_arn                | O ARN de uma IAM role ClickhouseAccess a ser usada para acessar com segurança os objetos S3. Consulte esta [documentação](/pt-BR/products/cloud/guides/data-sources/accessing-s3-data-securely) para mais informações. |
| compression              | O método de compressão usado com os objetos S3. Se não for fornecido, o ClickHouse tentará determinar a compressão com base no nome do arquivo.                                                                        |

Consulte
o [arquivo de teste do S3](https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/clickhouse/test_clickhouse_s3.py)
para ver exemplos de como usar esta macro.

<div id="cross-database-macro-support">
  ### Suporte a macros entre bancos de dados
</div>

Atualmente, o dbt-clickhouse oferece suporte à maioria das macros entre bancos de dados incluídas no `dbt Core`, com as seguintes exceções:

* A função SQL `split_part` é implementada no ClickHouse usando a função splitByChar. Essa função exige
  o uso de uma string constante como delimitador de divisão, portanto o parâmetro `delimeter` usado nessa macro será
  interpretado como uma string, e não como um nome de coluna
* Da mesma forma, a função SQL `replace` no ClickHouse exige strings constantes para os parâmetros `old_chars` e `new_chars`,
  portanto esses parâmetros serão interpretados como strings, e não como nomes de colunas, ao invocar essa macro.

<div id="catalog-support">
  ## Suporte a catálogos
</div>

<div id="dbt-catalog-integration-status">
  ### Status da integração de catálogo do dbt
</div>

O dbt Core v1.10 introduziu suporte à integração de catálogo, permitindo que adaptadores materializem modelos em catálogos externos que gerenciam formatos de tabela abertos, como o Apache Iceberg. **Esse recurso ainda não foi implementado nativamente no dbt-clickhouse.** Você pode acompanhar o progresso da implementação desse recurso na [issue #489 do GitHub](https://github.com/ClickHouse/dbt-clickhouse/issues/489).

<div id="clickhouse-catalog-support">
  ### Suporte a catálogos no ClickHouse
</div>

O ClickHouse adicionou recentemente suporte nativo a tabelas Apache Iceberg e catálogos de dados. A maioria dos recursos ainda é `experimental`, mas você já pode usá-los com uma versão recente do ClickHouse.

* Você pode usar o ClickHouse para **consultar tabelas Iceberg armazenadas em armazenamento de objetos** (S3, Azure Blob Storage, Google Cloud Storage) usando o [motor de tabela Iceberg](/pt-BR/reference/engines/table-engines/integrations/iceberg) e a [função de tabela iceberg](/pt-BR/reference/functions/table-functions/iceberg).

* Além disso, o ClickHouse oferece o [motor de banco de dados DataLakeCatalog](/pt-BR/reference/engines/database-engines/datalake), que permite a **conexão com catálogos de dados externos**, incluindo AWS Glue Catalog, Databricks Unity Catalog, Hive Metastore e REST Catalogs. Isso permite consultar dados em formatos de tabela abertos (Iceberg, Delta Lake) diretamente de catálogos externos, sem duplicação de dados.

<div id="workarounds-iceberg-catalogs">
  ### Alternativas para trabalhar com Iceberg e catálogos
</div>

Você pode ler dados de tabelas Iceberg ou catálogos no seu projeto dbt se já os tiver definido no seu cluster ClickHouse com as ferramentas mencionadas acima. Você pode usar a funcionalidade `source` do dbt para referenciar essas tabelas nos seus projetos dbt. Por exemplo, se quiser acessar suas tabelas em um REST Catalog, você pode:

1. **Criar um banco de dados apontando para um catálogo externo:**

```sql theme={null}
-- Exemplo com REST Catalog
SET allow_experimental_database_iceberg = 1;

CREATE DATABASE iceberg_catalog
ENGINE = DataLakeCatalog('http://rest:8181/v1', 'admin', 'password')
SETTINGS 
    catalog_type = 'rest', 
    storage_endpoint = 'http://minio:9000/lakehouse', 
    warehouse = 'demo'
```

2. **Defina o banco de dados do catálogo e suas tabelas como sources no dbt:** lembre-se de que as tabelas já devem estar disponíveis no ClickHouse

```yaml theme={null}
version: 2

sources:
  - name: external_catalog
    database: iceberg_catalog
    tables:
      - name: orders
      - name: customers
```

3. **Use as tabelas de catálogo em seus modelos dbt:**

```sql theme={null}
SELECT 
    o.order_id,
    c.customer_name,
    o.order_date
FROM {{ source('external_catalog', 'orders') }} o
INNER JOIN {{ source('external_catalog', 'customers') }} c
    ON o.customer_id = c.customer_id
```

<div id="benefits-workarounds">
  ### Observações sobre as soluções alternativas
</div>

Os pontos positivos dessas soluções alternativas são:

* Você terá acesso imediato a diferentes tipos de tabelas externas e catálogos externos sem precisar esperar pela integração nativa de catálogos do dbt.
* Você terá um caminho de migração tranquilo quando o suporte nativo a catálogos estiver disponível.

Mas, no momento, há algumas limitações:

* **Configuração manual:** tabelas Iceberg e bancos de dados de catálogo precisam ser criados manualmente no ClickHouse antes de poderem ser referenciados no dbt.
* **Sem DDL no nível de catálogo:** o dbt não consegue gerenciar operações no nível de catálogo, como criar ou excluir tabelas Iceberg em catálogos externos. Portanto, no momento, você não poderá criá-las pelo conector do dbt. A criação de tabelas com os motores Iceberg() poderá ser adicionada no futuro.
* **Operações de escrita:** no momento, a escrita em tabelas Iceberg/Data Catalog é limitada. Consulte a documentação do ClickHouse para entender quais opções estão disponíveis.
