03 Aprovisionamiento y migración
Guía del facilitador para aprovisionar ClickHouse y migrar: transferencia desatendida de 40–50 minutos y perfil dbt ausente.
Complemento para 03 Aprovisionamiento y migración.
Tiempo
Unos 60 minutos en total, aunque importa más cómo se distribuyen que la cifra completa:
aproximadamente 10–15 minutos de trabajo práctico —el Paso 1 aprovisiona el servicio de
ClickHouse Cloud mediante Terraform en unos 2–3 minutos; el Paso 2 crea trips_raw,
carga los datos de referencia de las zonas y ejecuta el primer dbt run todavía vacío
en unos pocos minutos más—, seguidos de una transferencia de datos desatendida de entre
40 y 50 minutos. Durante el Paso 3 se mueven 50 millones de filas a una velocidad
aproximada de 20 000 filas por segundo.
Este es el dato de planificación más importante de todo el taller: una vez iniciado el
Paso 3, la sala no tiene nada que hacer durante buena parte de una hora. Ponlo en
marcha y haz aquí la pausa, aprovecha la espera para recuperar el material del guion del
módulo 02 que no cupo antes o celebra una sesión de preguntas en directo sobre las
decisiones de migration-plan.md de los participantes. No programes una pausa en ningún
otro punto de este módulo: resérvala expresamente para este momento.
Guion
- Explica el motivo que ofrece el propio módulo para mover los datos con un script de Python y no con un conector nativo: Snowflake no es un origen compatible con ClickPipes. Kafka, S3, Kinesis y la CDC de PostgreSQL/MySQL sí lo son, pero Snowflake no. Todas las alternativas —exportar a S3 o encadenar Snowflake -> Kafka -> ClickHouse— sustituyen una preparación a escala de laboratorio por infraestructura que no guarda relación directa con la migración: un bucket de S3, un rol de IAM o un clúster de Kafka.
- Conviene nombrar expresamente las ventajas reales del script de Python: no requiere
una cuenta de AWS; es autocontenido, porque los dos paquetes nuevos viven en el mismo
entorno virtual que dbt; puede reanudarse con
--resumea partir de una marca de agua basada enmax(pickup_at); y es lo bastante transparente como para que un participante lea el mapeo de columnas en vez de avanzar a ciegas por un asistente gráfico. - Nombra honestamente la alternativa productiva: por encima de unos 500 M de filas o si importa el coste de recorrer toda la tabla con el warehouse, exportar a S3 es la opción más acertada: permite paralelizar tanto la exportación como la carga. El script de Python es adecuado para la escala del laboratorio, no una recomendación universal.
- Anticipa el desfase: el productor Snowflake sigue escribiendo durante el Paso 3, así que ClickHouse queda atrasado aproximadamente lo que dure la transferencia. Ese desfase es esperable en este punto y es exactamente lo que la transición del módulo 05 está diseñada para cerrar y medir. Explícalo antes de que alguien pregunte si la espera de 40–50 minutos está «perdiendo» datos.
Fallos habituales
- El primer
dbt rundel Paso 2 falla conCould not find profile named 'nyc_taxi_ch'. El laboratorio no crea automáticamente el perfilnyc_taxi_ch, aunquedbt_project.ymllo exige. La lección 03 Aprovisionamiento y migración explica este punto: la sección «Configura el perfil dbt» del Paso 2 muestra cómo incorporar un bloquenyc_taxi_ch:al~/.dbt/profiles.ymlexistente antes de ejecutardbt run. Si se omitió ese paso o se copió mal, remite al participante a él en vez de volver a explicar aquí la solución. - Terraform falla con
401 Unauthorized. VerificaCLICKHOUSE_TOKEN_KEYyCLICKHOUSE_TOKEN_SECRET; ambas se encuentran en Settings -> API keys dentro de la interfaz de ClickHouse Cloud y deben tener alcance Admin. - El script de migración falla a mitad de la ejecución. Repítelo con
--resume; utiliza como marca de agua elmax(pickup_at)ya presente en ClickHouse y omite las filas que ya se cargaron, por lo que reiniciarlo nunca deja una carga parcial e irrecuperable. - El script ni siquiera conecta. Confirma todas las variables (
echo $SNOWFLAKE_ORG $SNOWFLAKE_ACCOUNT $SNOWFLAKE_USER $SNOWFLAKE_PASSWORDyecho $CLICKHOUSE_HOST $CLICKHOUSE_PASSWORD), despuéssource .env && source .clickhouse_statey repite. dbt runfalla conConnection refusedoUnknown host. FaltaCLICKHOUSE_HOSTen la shell actual; ejecutasource .clickhouse_statedesdeworkshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/y vuelve a intentarlo.
Pasos de restablecimiento
- Si el script de migración se interrumpe,
python scripts/02_migrate_trips.py --resumecontinúa desde la marca de agua en vez de reiniciar la transferencia completa de 50 millones de filas. - Para reconstruir el servicio:
source .env && ./teardown.shdesdeworkshop_public/snowflake_migration_lab/03-migrate-to-clickhouse/(destruye servicio y productor de ClickHouse si la transición ya se produjo), y después vuelve a ejecutar./setup.sh. Esto no afecta al entorno de Snowflake del módulo 01, que tiene su propioteardown.shenworkshop_public/snowflake_migration_lab/01-setup-snowflake/. - Un restablecimiento total resulta caro en este módulo: una migración nueva obliga a
repetir los 40–50 minutos íntegros de transferencia. Siempre que el servicio de
ClickHouse siga sano, prefiere
--resumeo una corrección dirigida a desmontarlo todo.
02 Planificación y diseño
Guía del facilitador para planificar: por qué omitirlo debilita lo siguiente y cómo mantener 90 minutos de hojas de trabajo.
04 Reconstrucción de la canalización dbt
Guía del facilitador para reconstruir dbt en ClickHouse y explicar por qué la tabla agregada vacía no es un error.