Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Carga de datos desde BigQuery a ClickHouse

Esta guía es compatible con ClickHouse Cloud y con ClickHouse autogestionado v23.5+.

Esta guía muestra cómo migrar datos de BigQuery a ClickHouse.

Primero exportamos una tabla al almacenamiento de objetos de Google (GCS) y luego importamos esos datos en ClickHouse Cloud. Estos pasos deben repetirse para cada tabla que desee exportar de BigQuery a ClickHouse.

¿Cuánto tarda exportar datos a ClickHouse?

El tiempo necesario para exportar datos de BigQuery a ClickHouse depende del tamaño del conjunto de datos. Como referencia, exportar el conjunto de datos público de Ethereum de 4 TB de BigQuery a ClickHouse con esta guía lleva aproximadamente una hora.

Tabla Filas Archivos exportados Tamaño de los datos Exportación desde BigQuery Tiempo de slot Importación a ClickHouse
blocks 16,569,489 73 14.53GB 23 s 37 min 15.4 s
transactions 1,864,514,414 5169 957GB 1 min 38 s 1 día 8 h 18 min 5 s
traces 6,325,819,306 17,985 2.896TB 5 min 46 s 5 días 19 h 34 min 55 s
contracts 57,225,837 350 45.35GB 16 s 1 h 51 min 39.4 s
Total 8.26 mil millones 23,577 3.982TB 8 min 3 s > 6 días 5 h 53 min 45 s

Exportar datos de una tabla a GCS

En este paso, utilizamos el workspace de SQL de BigQuery para ejecutar nuestros comandos SQL. A continuación, exportamos una tabla de BigQuery llamada mytable a un bucket de GCS mediante la sentencia EXPORT DATA.

DECLARE export_path STRING;
DECLARE n INT64;
DECLARE i INT64;
SET i = 0;

-- We recommend setting n to correspond to x billion rows. So 5 billion rows, n = 5
SET n = 100;

WHILE i < n DO
  SET export_path = CONCAT('gs://mybucket/mytable/', i,'-*.parquet');
  EXPORT DATA
    OPTIONS (
      uri = export_path,
      format = 'PARQUET',
      overwrite = true
    )
  AS (
    SELECT * FROM mytable WHERE export_id = i
  );
  SET i = i + 1;
END WHILE;

En la consulta anterior, exportamos nuestra tabla de BigQuery al formato de datos Parquet. También tenemos un carácter * en nuestro parámetro uri. Esto garantiza que la salida se divida en varios archivos, con un sufijo numérico ascendente, si la exportación supera 1 GB de datos.

Este enfoque tiene varias ventajas:

  • Google permite exportar hasta 50 TB al día a GCS de forma gratuita. Los usuarios solo pagan por el almacenamiento en GCS.
  • Las exportaciones generan varios archivos automáticamente y limitan cada uno a un máximo de 1 GB de datos de la tabla. Esto es beneficioso para ClickHouse, ya que permite paralelizar las importaciones.
  • Parquet, como formato orientado a columnas, es un mejor formato de intercambio, ya que está comprimido de forma inherente y BigQuery lo exporta más rápido, además de que ClickHouse lo consulta con mayor rapidez

Importación de datos en ClickHouse desde GCS

Una vez completada la exportación, podemos importar estos datos a una tabla de ClickHouse. Puede usar la consola SQL de ClickHouse o clickhouse-client para ejecutar los siguientes comandos.

Primero debe crear la tabla en ClickHouse:

-- If your BigQuery table contains a column of type STRUCT, you must enable this setting
-- to map that column to a ClickHouse column of type Nested
SET input_format_parquet_import_nested = 1;

CREATE TABLE default.mytable
(
        `timestamp` DateTime64(6),
        `some_text` String
)
ENGINE = MergeTree
ORDER BY (timestamp);

Después de crear la tabla, habilita el ajuste parallel_distributed_insert_select si tienes varias réplicas de ClickHouse en tu clúster para acelerar la exportación. Si solo tienes un nodo de ClickHouse, puedes omitir este paso:

SET parallel_distributed_insert_select = 1;

Por último, podemos insertar los datos de GCS en nuestra tabla de ClickHouse usando el comando INSERT INTO SELECT, que inserta datos en una tabla a partir de los resultados de una consulta SELECT.

Para obtener los datos para INSERT, podemos usar la función s3Cluster para recuperar datos de nuestro bucket de GCS, ya que GCS es interoperable con Amazon S3. Si solo tiene un nodo de ClickHouse, puede usar la función de tabla s3 en lugar de la función s3Cluster.

INSERT INTO mytable
SELECT
    timestamp,
    ifNull(some_text, '') AS some_text
FROM s3Cluster(
    'default',
    'https://storage.googleapis.com/mybucket/mytable/*.parquet.gz',
    '<ACCESS_ID>',
    '<SECRET>'
);

El ACCESS_ID y el SECRET usados en la consulta anterior corresponden a su clave HMAC asociada con su bucket de GCS.

Comprobar que la exportación de datos se realizó correctamente

Para comprobar si tus datos se insertaron correctamente, simplemente ejecuta una consulta SELECT en tu nueva tabla:

SELECT * FROM mytable LIMIT 10;

Para exportar más tablas de BigQuery, simplemente vuelve a seguir los pasos anteriores para cada tabla adicional.

Lecturas complementarias y soporte

Además de esta guía, también te recomendamos leer nuestra entrada del blog, donde mostramos cómo usar ClickHouse para acelerar BigQuery y gestionar importaciones incrementales.

Si tienes problemas para transferir datos de BigQuery a ClickHouse, no dudes en ponerte en contacto con nosotros en support@clickhouse.com.

Navigation