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

> Descripción de las características y las configuraciones generales disponibles

# Características y configuraciones

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>;
};

En esta sección, ofrecemos documentación sobre algunas de las funcionalidades disponibles de dbt con ClickHouse.

<div id="profile-yml-configurations">
  ## Configuración de `profiles.yml`
</div>

Para conectarte a ClickHouse desde dbt, tendrás que añadir un [perfil](https://docs.getdbt.com/docs/core/connect-data-platform/connection-profiles) a tu archivo `profiles.yml`. Un perfil de ClickHouse sigue la siguiente sintaxis:

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

      # Opcional
      schema: [default] # Base de datos de ClickHouse para modelos dbt
      driver: [http] # http o native. Si no se establece, se determinará automáticamente según la configuración del puerto
      host: [localhost] 
      port: [8123]  # Si no se establece, el valor predeterminado es 8123, 8443, 9000 o 9440 según la configuración de secure y driver 
      user: [default] # Usuario para todas las operaciones de base de datos
      password: [<empty string>] # Contraseña del usuario
      cluster: [<empty string>] # Si se establece, ciertas operaciones DDL/de tabla se ejecutarán con la cláusula `ON CLUSTER` usando este clúster. Las materializaciones distribuidas requieren esta configuración para funcionar. Consulte la sección clúster de ClickHouse a continuación para más detalles.
      verify: [True] # Valida el certificado TLS si se usa TLS/SSL
      secure: [False] # Usa TLS (protocolo nativo) o HTTPS (protocolo http)
      client_cert: [null] # Ruta a un certificado de cliente TLS en formato .pem
      client_cert_key: [null] # Ruta a la clave privada del certificado de cliente TLS
      retries: [1] # Número de reintentos ante una excepción de base de datos "reintentable" (como un error 503 'Service Unavailable')
      compression: [<empty string>] # Usa compresión gzip si el valor es verdadero (http), o especifica el tipo de compresión para una conexión nativa
      connect_timeout: [10] # Tiempo de espera en segundos para establecer una conexión con ClickHouse
      send_receive_timeout: [300] # Tiempo de espera en segundos para recibir datos del servidor ClickHouse
      cluster_mode: [False] # Usa configuraciones específicas diseñadas para mejorar el funcionamiento en bases de datos Replicated (recomendado para ClickHouse Cloud)
      use_lw_deletes: [False] # Usa la estrategia `delete+insert` como estrategia incremental predeterminada.
      check_exchange: [True] # Valida que ClickHouse admita el comando atómico EXCHANGE TABLES. (No es necesario para la mayoría de las versiones de ClickHouse)
      local_suffix: [_local] # Sufijo de las tablas locales en los segmentos para materializaciones distribuidas.
      local_db_prefix: [<empty string>] # Prefijo de base de datos de las tablas locales en los segmentos para materializaciones distribuidas. Si está vacío, usa la misma base de datos que la tabla distribuida.
      allow_automatic_deduplication: [False] # Habilita la deduplicación automática de ClickHouse para tablas Replicated
      tcp_keepalive: [False] # Solo para cliente nativo; especifica la configuración de TCP keepalive. Indique configuraciones personalizadas de keepalive como [idle_time_sec, interval_sec, probes].
      custom_settings: [{}] # Diccionario/mapa de configuraciones personalizadas de ClickHouse para la conexión; el valor predeterminado es vacío.
      database_engine: '' # Motor de base de datos a usar al crear nuevos esquemas (bases de datos) de ClickHouse. Si no se establece (valor predeterminado), las nuevas bases de datos usarán el motor de base de datos predeterminado de ClickHouse (generalmente Atomic).
      threads: [1] # Número de hilos a usar al ejecutar consultas. Antes de establecerlo en un valor mayor que 1, asegúrese de leer la sección [read-after-write consistency](#read-after-write-consistency).
      
      # Configuración de conexión nativa (clickhouse-driver)
      sync_request_timeout: [5] # Tiempo de espera para el ping al servidor
      compress_block_size: [1048576] # Tamaño del bloque de compresión si la compresión está habilitada
```

<div id="schema-vs-database">
  ### Esquema vs base de datos
</div>

El identificador de relación del modelo de dbt `database.schema.table` no es compatible con ClickHouse porque ClickHouse no
admite `schema`.
Por eso, usamos un enfoque simplificado: `schema.table`, donde `schema` es la database de ClickHouse. No se recomienda usar la database `default`.

<div id="set-statement-warning">
  ### Advertencia sobre la sentencia SET
</div>

En muchos entornos, usar la sentencia SET para hacer persistente una configuración de ClickHouse en todas las consultas de DBT no es fiable
y puede provocar fallos inesperados. Esto es especialmente cierto cuando se usan conexiones HTTP a través de un balanceador de carga que
distribuye las consultas entre varios nodos (como ClickHouse Cloud), aunque en algunas circunstancias esto también puede
ocurrir con conexiones nativas de ClickHouse. En consecuencia, recomendamos configurar cualquier ajuste de ClickHouse necesario en la
propiedad "custom\_settings" del perfil de DBT como práctica recomendada, en lugar de depender de una sentencia "SET" en un pre-hook, como
se ha sugerido en ocasiones.

<div id="setting-quote_columns">
  ### Configuración de `quote_columns`
</div>

Para evitar una advertencia, asegúrate de establecer explícitamente un valor para `quote_columns` en tu archivo `dbt_project.yml`. Consulta la [documentación sobre quote\_columns](https://docs.getdbt.com/reference/resource-configs/quote_columns) para obtener más información.

```yaml theme={null}
seeds:
  +quote_columns: false  #o `true` si tienes encabezados de columna CSV con espacios
```

<div id="about-the-clickhouse-cluster">
  ### Acerca del clúster de ClickHouse
</div>

Al usar un clúster de ClickHouse, debes tener en cuenta dos aspectos:

* Configurar el parámetro `cluster`.
* Garantizar la consistencia de lectura después de la escritura, especialmente si `threads` es mayor que 1.

<div id="cluster-setting">
  #### Configuración de clúster
</div>

La configuración `cluster` del perfil permite que dbt-clickhouse se ejecute en un clúster de ClickHouse. Si `cluster` está definida en el perfil, **todos los modelos se crearán con la cláusula `ON CLUSTER`** de forma predeterminada, excepto los que usan un motor **Replicated**. Esto incluye:

* Creación de bases de datos
* Materializaciones de vistas
* Materializaciones de tablas e incrementales
* Materializaciones Distributed

Los motores Replicated **no** incluirán la cláusula `ON CLUSTER`, ya que están diseñados para gestionar la replicación internamente.

Para **desactivar** la creación basada en clúster para un modelo específico, agrega la configuración `disable_on_cluster`:

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

```

las materializaciones de tabla e incrementales con motor no replicado no se verán afectadas por la configuración de `cluster` (el modelo
se creará únicamente en el nodo conectado).

**Compatibilidad**

Si un modelo se ha creado sin una configuración de `cluster`, dbt-clickhouse detectará esta situación y ejecutará todo el DDL/DML
sin la cláusula `on cluster` para ese modelo.

<div id="read-after-write-consistency">
  #### Consistencia de lectura después de la escritura
</div>

dbt se basa en un modelo de consistencia de lectura después de la inserción. Esto no es compatible con clústeres de ClickHouse que tienen más de una réplica si no puedes garantizar que todas las operaciones se dirijan a la misma réplica. Puede que no tengas problemas en el uso diario de dbt, pero hay algunas estrategias, según tu clúster, para contar con esa garantía:

* Si usas un clúster de ClickHouse Cloud, solo necesitas establecer `select_sequential_consistency: 1` en la propiedad `custom_settings` de tu perfil. Puedes encontrar más información sobre esta configuración [aquí](/es/reference/settings/session-settings#select_sequential_consistency).
* Si usas un clúster autohospedado, asegúrate de que todas las solicitudes de dbt se envíen a la misma réplica de ClickHouse. Si tienes un balanceador de carga delante, intenta usar algún mecanismo de `replica aware routing`/`sticky sessions` para poder llegar siempre a la misma réplica. [No se recomienda](/es/reference/settings/session-settings#select_sequential_consistency) añadir la configuración `select_sequential_consistency = 1` en clústeres fuera de ClickHouse Cloud.

<div id="additional-clickhouse-macros">
  ## Macros adicionales de ClickHouse
</div>

<div id="model-materialization-utility-macros">
  ### Macros utilitarias de materialización de modelos
</div>

Se incluyen las siguientes macros para facilitar la creación de tablas y vistas específicas de ClickHouse:

* `engine_clause` -- Usa la propiedad de configuración `engine` del modelo para asignar un motor de tabla de ClickHouse. dbt-clickhouse
  usa el engine `MergeTree` de forma predeterminada.
* `partition_cols` -- Usa la propiedad de configuración `partition_by` del modelo para asignar una clave de partición de ClickHouse. De forma predeterminada, no
  se asigna ninguna clave de partición.
* `order_cols` -- Usa la configuración `order_by` del modelo para asignar una clave de ORDER BY/ordenación de ClickHouse. Si no se especifica,
  ClickHouse usará una Tuple() vacía y la tabla no tendrá ordenación.
* `primary_key_clause` -- Usa la propiedad de configuración `primary_key` del modelo para asignar una clave primaria de ClickHouse. De
  forma predeterminada, se establece una clave primaria y ClickHouse usará la cláusula ORDER BY como clave primaria.
* `on_cluster_clause` -- Usa la propiedad `cluster` del perfil para añadir una cláusula `ON CLUSTER` a determinadas operaciones de dbt:
  materializaciones distribuidas, creación de vistas y creación de bases de datos.
* `ttl_config` -- Usa la propiedad de configuración `ttl` del modelo para asignar una expresión de TTL de tabla de ClickHouse. De forma predeterminada, no se
  asigna ningún TTL.

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

La macro `s3source` simplifica el proceso de seleccionar datos de ClickHouse directamente desde S3 mediante la función de tabla S3 de ClickHouse.
Funciona
rellenando los parámetros de la función de tabla S3 a partir de un diccionario de configuración con nombre (el nombre del diccionario debe terminar
en `s3`). La macro
primero busca el diccionario en las `vars` del perfil y luego en la configuración del modelo. El diccionario puede contener
cualquiera de las siguientes
claves utilizadas para rellenar los parámetros de la función de tabla S3:

| Argument Name            | Description                                                                                                                                                                                                                            |
| ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| bucket                   | La URL base del bucket, como `https://datasets-documentation.s3.eu-west-3.amazonaws.com/nyc-taxi`. Se asume `https://` si no se proporciona ningún protocolo.                                                                          |
| path                     | La ruta de S3 que se usará para la consulta de la tabla, como `/trips_4.gz`. Se admiten comodines de S3.                                                                                                                               |
| fmt                      | El formato de entrada de ClickHouse esperado (como `TSV` o `CSVWithNames`) de los objetos S3 referenciados.                                                                                                                            |
| structure                | La estructura de columnas de los datos del bucket, como una lista de pares nombre/tipo de dato, por ejemplo `['id UInt32', 'date DateTime', 'value String']`. Si no se proporciona, ClickHouse inferirá la estructura.                 |
| aws\_access\_key\_id     | El ID de la clave de acceso de S3.                                                                                                                                                                                                     |
| aws\_secret\_access\_key | La clave secreta de S3.                                                                                                                                                                                                                |
| role\_arn                | El ARN de un rol de IAM de ClickHouseAccess que se usará para acceder de forma segura a los objetos S3. Consulta esta [documentación](/es/products/cloud/guides/data-sources/accessing-s3-data-securely) para obtener más información. |
| compression              | El método de compresión utilizado con los objetos S3. Si no se proporciona, ClickHouse intentará determinar la compresión en función del nombre del archivo.                                                                           |

Consulta
el [archivo de prueba de S3](https://github.com/ClickHouse/dbt-clickhouse/blob/main/tests/integration/adapter/clickhouse/test_clickhouse_s3.py)
para ver ejemplos de cómo usar esta macro.

<div id="cross-database-macro-support">
  ### Compatibilidad con macros entre bases de datos
</div>

dbt-clickhouse ya admite la mayoría de las macros entre bases de datos incluidas en `dbt Core`, con las siguientes excepciones:

* La función SQL `split_part` está implementada en ClickHouse mediante la función splitByChar. Esta función requiere
  usar una cadena constante como delimitador de "split", por lo que el parámetro `delimeter` usado para esta macro se
  interpretará como una cadena, no como un nombre de columna
* Del mismo modo, la función SQL `replace` en ClickHouse requiere cadenas constantes para los parámetros `old_chars` y `new_chars`,
  por lo que esos parámetros se interpretarán como cadenas en lugar de como nombres de columna al invocar esta macro.

<div id="catalog-support">
  ## Soporte para catálogos
</div>

<div id="dbt-catalog-integration-status">
  ### Estado de la integración de catálogos en dbt
</div>

dbt Core v1.10 introdujo compatibilidad con la integración de catálogos, lo que permite a los adaptadores materializar modelos en catálogos externos que gestionan formatos de tabla abiertos como Apache Iceberg. **Esta funcionalidad aún no está implementada de forma nativa en dbt-clickhouse.** Puedes seguir el progreso de la implementación de esta funcionalidad en el [issue n.º 489 de GitHub](https://github.com/ClickHouse/dbt-clickhouse/issues/489).

<div id="clickhouse-catalog-support">
  ### Soporte de catálogos en ClickHouse
</div>

ClickHouse ha añadido recientemente compatibilidad nativa con tablas Apache Iceberg y catálogos de datos. La mayoría de estas funciones siguen siendo `experimental`, pero ya puede usarlas si utiliza una versión reciente de ClickHouse.

* Puede usar ClickHouse para **consultar tablas Iceberg almacenadas en almacenamiento de objetos** (S3, Azure Blob Storage, Google Cloud Storage) mediante el [motor de tabla Iceberg](/es/reference/engines/table-engines/integrations/iceberg) y la [función de tabla Iceberg](/es/reference/functions/table-functions/iceberg).

* Además, ClickHouse proporciona el [motor de base de datos DataLakeCatalog](/es/reference/engines/database-engines/datalake), que permite la **conexión a catálogos de datos externos** como AWS Glue Catalog, Databricks Unity Catalog, Hive Metastore y catálogos REST. Esto le permite consultar datos en formatos de tabla abiertos (Iceberg, Delta Lake) directamente desde catálogos externos sin duplicar los datos.

<div id="workarounds-iceberg-catalogs">
  ### Soluciones alternativas para trabajar con Iceberg y catálogos
</div>

Puedes leer datos de tablas Iceberg o de catálogos desde tu proyecto de dbt si ya los has definido en tu clúster de ClickHouse con las herramientas mencionadas anteriormente. Puedes usar la funcionalidad `source` de dbt para hacer referencia a estas tablas en tus proyectos de dbt. Por ejemplo, si quieres acceder a tus tablas en un REST Catalog, puedes:

1. **Crear una base de datos que apunte a un catálogo externo:**

```sql theme={null}
-- Ejemplo con 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 la base de datos del catálogo y sus tablas como fuentes en dbt:** recuerde que las tablas ya deben estar disponibles en ClickHouse

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

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

3. **Usa las tablas del catálogo en tus modelos de 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">
  ### Notas sobre las soluciones alternativas
</div>

Lo positivo de estas soluciones alternativas es:

* Tendrá acceso inmediato a distintos tipos de tablas externas y catálogos externos sin tener que esperar a la integración nativa de catálogos en dbt.
* Tendrá una vía de migración fluida cuando la compatibilidad nativa con catálogos esté disponible.

Pero actualmente hay algunas limitaciones:

* **Configuración manual:** Las tablas Iceberg y las bases de datos de catálogo deben crearse manualmente en ClickHouse antes de poder referenciarse en dbt.
* **Sin DDL a nivel de catálogo:** dbt no puede gestionar operaciones a nivel de catálogo, como crear o eliminar tablas Iceberg en catálogos externos. Por lo tanto, ahora mismo no podrá crearlas desde el conector de dbt. La creación de tablas con los motores Iceberg() podría añadirse en el futuro.
* **Operaciones de escritura:** Actualmente, la escritura en tablas Iceberg/Data Catalog es limitada. Consulte la documentación de ClickHouse para conocer qué opciones están disponibles.
