03 Cargar los datos — dos métodos
Los mismos 26,5 millones de ticks cargados dos veces: primero con ClickPipes, la canalización gestionada que usarías en producción, y después con una única llamada a s3(); aprende cuándo elegir cada método.
Los datos están en un bucket S3 público, así que no necesitas claves ni credenciales: basta con indicar la URL. La transferencia se ejecuta en el servidor, de S3 a ClickHouse; no envía 26,5 millones de filas a través de tu portátil ni depende de la red wifi del recinto.
Cargarás los mismos 26,5 millones de ticks de dos formas distintas para conocer ambas. El
método 1 utiliza ClickPipes, la canalización gestionada y guiada desde la interfaz que usarías en
producción. El método 2 consiste en una sola línea de SQL, la forma más rápida de introducir datos
durante una demostración. Hazlos en orden; un TRUNCATE entre ambos mantiene limpia la cuenta.
Método 1 — ClickPipes, la opción gestionada para producción
ClickPipes es un servicio de ingesta totalmente gestionado: conéctalo a almacenamiento de objetos o a un stream y seguirá cargando sin que tengas que construir un conector. Este es el flujo completo.
- En el menú izquierdo, haz clic en Data sources y después en Create ClickPipe.

En Data sources también se encuentran «Upload file» y «Add sample data».
- En Select the data source, elige Amazon S3 (al principio de la lista Popular).

- En Setup your ClickPipe connection, escribe cualquier name, selecciona Authentication method → Public (el bucket es público) y pega lo siguiente en S3 file path:
https://partner-workshop.s3.ap-southeast-1.amazonaws.com/fx/ticks.parquetDeja Continuous ingestion desactivado —es un archivo único— y pulsa Incoming data →.

- En Incoming data, ClickHouse muestra una vista previa del archivo coincidente: verás
fx/ticks.parquetcon 158,43 MB. Confirma File type → Parquet, deja la compresión en Detect automatically y pulsa Parse information →.

- En Parse information, ClickHouse muestra una fila de ejemplo y detecta las columnas. En
Upload data to, elige Existing table, selecciona la Database que contiene tu tabla
(normalmente
default) y establece Table →forex. Comprueba que los campos de origen (datetime,bid,ask,base,quote) coincidan con sus columnas: deberían asignarse automáticamente. Deja sin asignar los campos adicionales_path/_file/_size. Después, pulsa Details and settings →.

La captura muestra la base de datos techthai del presentador; utiliza la que contenga tu tabla.
- En Details and settings, conserva las Permissions predeterminadas (ClickPipes crea un usuario de escritura dedicado) y pulsa Create ClickPipe.

Sin trabajos de Spark ni cargadores personalizados.
- Volverás a Data sources, donde aparecerá tu ClickPipe. En pocos segundos, el Status cambiará a Completed y Records mostrará 26.488.218: todos los ticks cargados desde almacenamiento de objetos.

Comprueba qué se ha cargado. Ejecuta esto en SQL Console:
-- expect 26,488,218 ticks across 12 pairs
SELECT count() AS ticks, uniqExact(concat(base,'/',quote)) AS pairs FROM forex;Deberías ver
ticks = 26.488.218 y pairs = 12. Son unos 26,5 millones de filas cargadas desde almacenamiento de objetos en cuestión de segundos.
Método 2 — una línea con s3(), lo más rápido para una demostración
Ahora carga exactamente los mismos datos con una única sentencia SQL, directamente desde el archivo público. Primero, vacía la tabla para que la cuenta no se duplique y después inserta:
-- clear the rows ClickPipes just loaded so we don't double up
TRUNCATE TABLE forex;
-- load all ~26.5M ticks from the public S3 file in one line (server-side)
INSERT INTO forex
SELECT * FROM s3('https://partner-workshop.s3.ap-southeast-1.amazonaws.com/fx/ticks.parquet', NOSIGN, 'Parquet');
-- and check again (expect 26,488,218)
SELECT count() AS ticks, uniqExact(concat(base,'/',quote)) AS pairs FROM forex;NOSIGN significa «sin credenciales»: eso es todo lo necesario para leer un bucket público.
SELECT * funciona porque el orden de las columnas de la tabla coincide con el del archivo.
ClickPipes frente a la función s3() — cuándo usar cada uno
Las mismas 26.488.218 filas se han cargado de dos formas. La diferencia está en lo que ocurre después de la primera carga: si buscas una canalización continua y gestionada o una lectura rápida y puntual.
| ClickPipes | Función de tabla s3() | |
|---|---|---|
| Qué es | Un servicio de ingesta totalmente gestionado que configuras en la consola | Una función SQL que llamas dentro de una consulta |
| Ideal para | Cargas continuas de producción que quieres configurar y dejar en marcha | Cargas puntuales rápidas, exploración ad hoc y scripts |
| Nuevos archivos / continuidad | Puede seguir observando un bucket o stream y cargar datos nuevos continuamente | Ejecución única: solo lee lo que haya cada vez que la ejecutas |
| Configuración | Interfaz guiada, sin necesidad de SQL | Una única sentencia INSERT … SELECT |
| Supervisión y reintentos | Integrados: estado, gestión de errores y reintentos en la consola | Ninguno: si falla, debes volver a ejecutarla |
| Orígenes | Muchos: S3, GCS, Azure, Kafka y otros streams, CDC de Postgres/MySQL y más | Solo almacenamiento de objetos (funciones relacionadas: gcs(), azureBlobStorage(), url()) |
Regla práctica: elige ClickPipes cuando sigan llegando datos y quieras gestionarlos; elige
s3() cuando solo necesites traer un archivo ahora mismo. Hoy has usado la línea única para
empezar a consultar cuanto antes; ahora vamos a explorar los datos.
02 Crear la tabla
Un CREATE TABLE para 26,5 millones de ticks de divisas y por qué base y quote encabezan la clave de ordenación: una decisión cuyo efecto notarás en el módulo 04.
04 Ejecutar las consultas de mercado
Siete consultas sobre 26,5 millones de ticks, cada una capaz de sustituir una página de SQL: recuentos aproximados, topK, velas OHLC, percentiles, combinadores -If, argMax y el desafío final de la clave de ordenación.