Configuración de profiles.yml
profiles.yml. Un perfil de ClickHouse sigue la siguiente sintaxis:
Esquema vs base de datos
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.
Advertencia sobre la sentencia SET
Configuración de quote_columns
quote_columns en tu archivo dbt_project.yml. Consulta la documentación sobre quote_columns para obtener más información.
Acerca del clúster de ClickHouse
- Configurar el parámetro
cluster. - Garantizar la consistencia de lectura después de la escritura, especialmente si
threadses mayor que 1.
Configuración de clúster
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
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:
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.
Consistencia de lectura después de la escritura
- Si usas un clúster de ClickHouse Cloud, solo necesitas establecer
select_sequential_consistency: 1en la propiedadcustom_settingsde tu perfil. Puedes encontrar más información sobre esta configuración aquí. - 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 sessionspara poder llegar siempre a la misma réplica. No se recomienda añadir la configuraciónselect_sequential_consistency = 1en clústeres fuera de ClickHouse Cloud.
Macros adicionales de ClickHouse
Macros utilitarias de materialización de modelos
engine_clause— Usa la propiedad de configuraciónenginedel modelo para asignar un motor de tabla de ClickHouse. dbt-clickhouse usa el engineMergeTreede forma predeterminada.partition_cols— Usa la propiedad de configuraciónpartition_bydel 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ónorder_bydel 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ónprimary_keydel 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 propiedadclusterdel perfil para añadir una cláusulaON CLUSTERa determinadas operaciones de dbt: materializaciones distribuidas, creación de vistas y creación de bases de datos.ttl_config— Usa la propiedad de configuraciónttldel modelo para asignar una expresión de TTL de tabla de ClickHouse. De forma predeterminada, no se asigna ningún TTL.
macro auxiliar s3Source
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:
Consulta
el archivo de prueba de S3
para ver ejemplos de cómo usar esta macro.
Compatibilidad con macros entre bases de datos
dbt Core, con las siguientes excepciones:
- La función SQL
split_partestá 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ámetrodelimeterusado para esta macro se interpretará como una cadena, no como un nombre de columna - Del mismo modo, la función SQL
replaceen ClickHouse requiere cadenas constantes para los parámetrosold_charsynew_chars, por lo que esos parámetros se interpretarán como cadenas en lugar de como nombres de columna al invocar esta macro.
Soporte para catálogos
Estado de la integración de catálogos en dbt
Soporte de catálogos en ClickHouse
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 y la función de tabla Iceberg.
- Además, ClickHouse proporciona el motor de base de datos DataLakeCatalog, 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.
Soluciones alternativas para trabajar con Iceberg y catálogos
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:
- Crear una base de datos que apunte a un catálogo externo:
- 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
- Usa las tablas del catálogo en tus modelos de dbt:
Notas sobre las soluciones alternativas
- 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.
- 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.