Inserciones en ClickHouse frente a las bases de datos OLTP
Buenas prácticas para las inserciones
Insertar en lotes grandes
Garantiza lotes coherentes para reintentos idempotentes
-
- Si el nodo que recibe los datos tiene problemas, la consulta de inserción agotará el tiempo de espera (o devolverá un error más específico) y no enviará una confirmación.
-
- Si el nodo escribió los datos pero la confirmación no puede devolverse al remitente de la consulta debido a interrupciones en la red, el remitente recibirá un tiempo de espera agotado o un error de red.
Insertar en una tabla MergeTree o en una tabla distribuida
internal_replication=true.
Esto permitirá que ClickHouse replique los datos en cualquier réplica disponible y garantice que los datos sean eventualmente coherentes.
Si este balanceo de carga del lado del cliente resulta inconveniente, puede insertar mediante una tabla distribuida, que luego distribuirá las escrituras entre los nodos. De nuevo, se recomienda establecer internal_replication=true.
Sin embargo, debe tenerse en cuenta que este enfoque es algo menos eficiente, ya que las escrituras deben realizarse localmente en el nodo con la tabla distribuida y luego enviarse a los segmentos.
Utilice inserciones asíncronas para lotes pequeños
Usa clientes oficiales de ClickHouse
Prefiera el formato nativo
Usa la interfaz HTTP
Ejemplo básico
INSERT INTO TABLE con ClickHouse. Vamos a insertar algunos datos en la tabla que creamos en la guía de inicio “Creación de tablas en ClickHouse”.
SELECT:
Cargar datos desde Postgres
ClickPipes, una herramienta ETL diseñada específicamente para la replicación de bases de datos PostgreSQL. Está disponible en:- ClickHouse Cloud: a través de nuestro servicio de ingestión gestionado en ClickPipes.
- Autogestionado: mediante el proyecto open-source PeerDB.
- El PostgreSQL table engine para leer datos directamente, como se muestra en los ejemplos anteriores. Suele ser adecuado si basta con una replicación por lotes basada en un watermark conocido, por ejemplo, un timestamp, o si se trata de una migración puntual. Este enfoque puede escalar a decenas de millones de filas. Los usuarios que quieran migrar datasets más grandes deberían considerar múltiples solicitudes, cada una sobre un fragmento de los datos. Se pueden usar tablas de staging para cada fragmento antes de mover sus particiones a una tabla final. Esto permite reintentar las solicitudes fallidas. Para obtener más información sobre esta estrategia de carga masiva, consulte aquí.
- Los datos pueden exportarse desde PostgreSQL en formato CSV. Luego pueden insertarse en ClickHouse desde archivos locales o mediante object storage usando funciones de tabla.
¿Necesita ayuda para insertar grandes volúmenes de datos?Si necesita ayuda para insertar grandes volúmenes de datos o encuentra errores al importar datos a ClickHouse Cloud, póngase en contacto con nosotros en support@clickhouse.com y podremos ayudarle.
Insertar datos desde la línea de comandos
- Has instalado ClickHouse
clickhouse-serverestá en ejecución- Tienes acceso a una terminal con
wget,zcatycurl
clickhouse-client en modo batch. Para obtener más información y ver más ejemplos de inserción de datos desde la línea de comandos con clickhouse-client en modo batch, consulta “Batch mode”.
Usaremos el Hacker News dataset en este ejemplo, que contiene 28 millones de filas de datos de Hacker News.
Descargar el CSV
Ejecuta el siguiente comando para descargar una versión en CSV del dataset desde nuestro bucket público de S3:Crear la tabla
Conclickhouse-server en ejecución, puedes crear una tabla vacía con el siguiente esquema directamente desde la línea de comandos usando clickhouse-client en modo batch:_EOF) para evitar cualquier interpolación. Sin comillas simples, sería necesario escapar las comillas invertidas que rodean los nombres de las columnas.Insertar los datos desde la línea de comandos
A continuación, ejecuta el siguiente comando para insertar en tu tabla los datos del archivo que descargaste antes:gzip, zcat o similar, y luego canalizar los datos descomprimidos a clickhouse-client con la instrucción INSERT y el FORMAT adecuados.Al insertar datos con
clickhouse-client en modo interactivo, puedes dejar que ClickHouse gestione la descompresión durante la inserción usando la cláusula COMPRESSION. ClickHouse puede detectar automáticamente el tipo de compresión a partir de la extensión del archivo, aunque también puedes especificarlo explícitamente.La consulta de inserción tendría este aspecto:hackernews:Insertar datos mediante la línea de comandos con curl
En los pasos anteriores, primero descargaste el archivo CSV en tu máquina local usandowget. También es posible insertar directamente los datos desde la URL remota con un solo comando.Ejecuta el siguiente comando para truncar los datos de la tabla hackernews y poder insertarlos de nuevo sin el paso intermedio de descargarlos en tu máquina local: