Instalar dlt con ClickHouse
Para instalar la biblioteca dlt con las dependencias de ClickHouse:
Guía de configuración
1
Inicializa el proyecto dlt
Empieza inicializando un nuevo proyecto El comando anterior genera varios archivos y directorios, incluidos o con
dlt de la siguiente manera:Este comando inicializará tu pipeline con chess como origen y ClickHouse como destino.
.dlt/secrets.toml y un archivo de requisitos para ClickHouse. Puedes instalar las dependencias necesarias especificadas en el archivo de requisitos ejecutando lo siguiente:pip install dlt[clickhouse], que instala la biblioteca dlt y las dependencias necesarias para trabajar con ClickHouse como destino.2
Configura la base de datos de ClickHouse
Para cargar datos en ClickHouse, necesitas crear una base de datos en ClickHouse. Aquí tienes un resumen general de lo que debes hacer:
- Puedes usar una base de datos de ClickHouse existente o crear una nueva.
-
Para crear una base de datos nueva, conéctate a tu servidor ClickHouse con la herramienta de línea de comandos
clickhouse-cliento con el cliente SQL que prefieras. - Ejecuta los siguientes comandos SQL para crear una nueva base de datos, un usuario y conceder los permisos necesarios:
3
Agrega las credenciales
A continuación, configura las credenciales de ClickHouse en el archivo Puedes pasar una cadena de conexión a la base de datos similar a la que usa la biblioteca
.dlt/secrets.toml como se muestra a continuación:HTTP_PORTEl parámetro
http_port especifica el número de puerto que se debe usar al conectarse a la interfaz HTTP del servidor ClickHouse. Esto es diferente del puerto predeterminado 9000, que se usa para el protocolo TCP nativo.Debes establecer http_port si no estás usando staging externo (es decir, no configuras el parámetro staging en tu pipeline). Esto se debe a que el staging integrado del almacenamiento local de ClickHouse usa la biblioteca clickhouse-connect, que se comunica con ClickHouse a través de HTTP.Asegúrate de que tu servidor ClickHouse esté configurado para aceptar conexiones HTTP en el puerto especificado por http_port. Por ejemplo, si estableces http_port = 8443, entonces ClickHouse debería estar escuchando solicitudes HTTP en el puerto 8443. Si estás usando staging externo, puedes omitir el parámetro http_port, ya que clickhouse-connect no se usará en este caso.clickhouse-driver. Las credenciales anteriores se verán así:Disposición de escritura
merge, deberá especificar una primary_key para el recurso. Puede obtener más información aquí.
Append: Esta es la disposición predeterminada. Añade los datos a los datos existentes en el destino, ignorando el campo primary_key.
Carga de datos
- Para los archivos locales, se utiliza la biblioteca
clickhouse-connectpara cargarlos directamente en tablas de ClickHouse mediante el comandoINSERT. - Para los archivos en almacenamiento remoto como
S3,Google Cloud StorageoAzure Blob Storage, se utilizan funciones de tabla de ClickHouse, como s3, gcs y azureBlobStorage, para leer los archivos e insertar los datos en las tablas.
Conjuntos de datos
ClickHouse no admite varios conjuntos de datos en una misma base de datos, mientras que dlt depende de ellos por varios motivos. Para que ClickHouse funcione con dlt, los nombres de las tablas generadas por dlt en tu base de datos ClickHouse llevarán el prefijo del nombre del conjunto de datos, separado por el dataset_table_separator configurable. Además, se creará una tabla centinela especial que no contendrá ningún dato, lo que permitirá a dlt reconocer qué conjuntos de datos virtuales ya existen en un destino de ClickHouse.
Formatos de archivo compatibles
- jsonl es el formato preferido tanto para la carga directa como para el staging.
- parquet es compatible tanto con la carga directa como con el staging.
clickhouse presenta algunas diferencias específicas con respecto a los destinos SQL predeterminados:
ClickHousetiene un tipo de datoobjectexperimental, pero hemos comprobado que puede ser algo impredecible, por lo que el destino ClickHouse de dlt cargará el tipo de dato complejo en una columna de texto. Si necesita esta funcionalidad, póngase en contacto con nuestra comunidad de Slack y estudiaremos incorporarla.ClickHouseno admite el tipo de datotime.timese cargará en una columnatext.ClickHouseno admite el tipo de datobinary. En su lugar, los datos binarios se cargarán en una columnatext. Al cargar desdejsonl, los datos binarios serán una cadena en base64, y al cargar desde parquet, el objetobinaryse convertirá entext.ClickHousepermite agregar columnas no nulas a una tabla con datos.ClickHousepuede producir errores de redondeo en determinadas condiciones al usar el tipo de dato float o double. Si no puede permitirse errores de redondeo, asegúrese de usar el tipo de dato decimal. Por ejemplo, al cargar el valor 12.7001 en una columna double con el formato de archivo del cargador establecido enjsonl, se producirá de forma predecible un error de redondeo.
Indicadores de columna compatibles
primary_key- marca la columna como parte de la clave primaria. Varias columnas pueden tener este indicador para crear una clave primaria compuesta.
Motor de tabla
ReplicatedMergeTree en ClickHouse. Puede especificar un motor de tabla alternativo mediante table_engine_type con el adaptador ClickHouse:
merge_tree- crea tablas con el motorMergeTreereplicated_merge_tree(predeterminado) - crea tablas con el motorReplicatedMergeTree
Compatibilidad con staging
dlt subirá archivos Parquet o jsonl a la ubicación de staging y usará las funciones de tabla de ClickHouse para cargar los datos directamente desde los archivos en staging.
Consulta la documentación del sistema de archivos para obtener información sobre cómo configurar las credenciales de los destinos de staging:
Para ejecutar un pipeline con staging habilitado:
Uso de Google Cloud Storage como área de staging
- Cree claves HMAC para su cuenta de servicio de GCS siguiendo la guía de Google Cloud.
-
Configure las claves HMAC, así como
client_email,project_idyprivate_keyde su cuenta de servicio en la configuración del destino ClickHouse de su proyecto de dlt enconfig.toml:
bashgcp_access_key_id y gcp_secret_access_key), ahora también debes proporcionar client_email, project_id y private_key de tu cuenta de servicio en [destination.filesystem.credentials]. Esto se debe a que el soporte de staging de GCS está implementado actualmente como una solución temporal y aún no está optimizado.
dlt pasará estas credenciales a ClickHouse, que se encargará de la autenticación y del acceso a GCS.
Se está trabajando activamente para simplificar y mejorar en el futuro la configuración del staging de GCS para el destino ClickHouse de dlt. El soporte adecuado para el staging de GCS se está siguiendo en estos issues de GitHub:
- Hacer que el destino filesystem funcione con gcs en modo de compatibilidad con s3
- Soporte para el área de staging de Google Cloud Storage