Flujo ETL de una base de datos a otra

Cómo crear un flujo ETL de una base de datos a otra sin codificar con DataK

https://www.data-k.io

Watch it on YouTube
https://youtu.be/41CMiQO5DFQ

DataK tiene muchos tipos de tareas para este ejemplo usaremos el DbToDb el cual te permite ejecutar una consulta en una primera base de datos (fuente), crear un DDL basado en los resultados obtenidos e importar los resultados de la ejecución de la consulta en la segunda (destino) .

Para este ejemplo usaremos una base de datos MySQL como fuente y un ClickHouse como destino.

ClickHouse es una base de datos columnar en memoria muy rápida y adecuada para ser utilizada como Data Ware House.

Para este ejemplo usaremos la famosa base de datos "northwind" en versión MySQL descargable desde aquí:

Y lo importaremos a MySQL usando una secuencia SQL simple.

Primero vamos a crear un nuevo proyecto en el DataK llamado "Northwind Ejemplo"

Creamos los recursos, es decir, las conexiones a las dos bases de datos MySQL y ClickHouse.

Tareas

Luego creamos una tarea que crea el esquema Northwind en MySQL e inserta los datos en la base de datos.
Para ello creamos una tarea de tipo "SQL"
Esta tarea contiene 2 consultas SQL.
Uno para crear el esquema y otro para cargar los datos.

Luego creamos un flujo que contiene la tarea recién creada.
Para agregar una tarea a un flujo, simplemente arrástrela a la etapa de flujo y conéctela a la tarea inicial o anterior usando las flechas.

Una vez conectada la tarea, puede guardar el flujo y ejecutarlo haciendo clic en "Guardar y ejecutar"

Explorar los datos

Ahora podemos usar el Explorador de datos para verificar que los datos se hayan importado a la base de datos. En el menú de la izquierda, haga clic en Explorador

Perfecto los datos han sido importados.

Ahora construyamos la consulta que nos permitirá extraer los datos que nos interesan, por ejemplo desnormalizando la tabla de pedidos.
Para hacer esto, podemos usar el "constructor de consultas" que nos permite crear consultas incluso complejas usando JOIN a otras tablas.
Primero seleccionamos la tabla de "orders" y hacemos clic en el icono de unirse a la tabla de "employees".

En la parte superior aparece una fila en la que podemos definir la condición de unión.

En este punto, puede seleccionar los campos de interés arrastrándolos al área de "dimensiones".

Al activar el SQL avanzado, puede ver la consulta resultante y modificarla para nuestras necesidades.

ETL

En este punto, podemos crear una tarea de base de datos a base de datos para ejecutar una consulta personalizada y traer los resultados a nuestro "DataWareHouse"

SELECT
  products.product_code AS product_code,
  CAST(order_details.unit_price AS Decimal(12, 2)) AS unit_price,
  CAST(order_details.quantity AS Int) AS quantity,
  orders.ship_city AS ship_city,
  customers.company AS company,
  orders.order_date AS order_date,
  CAST((order_details.quantity * order_details.unit_price) AS Decimal(12, 2)) AS total
FROM
  products
  JOIN order_details ON products.id = order_details.product_id
  JOIN orders ON order_details.order_id = orders.id
  JOIN customers ON orders.customer_id = customers.id

Finalmente podemos crear el DDL para ClickHouse

CREATE TABLE IF NOT EXISTS orders_details_full
(
    product_code Nullable(String),
    unit_price Nullable(Decimal64(2)),
    quantity Nullable(Int64),
    ship_city Nullable(String),
    company Nullable(String),
    order_date Nullable(DateTime),
    total Nullable(Decimal64(2))
) ENGINE = Log

Guardamos la tarea y creamos un flujo con esa tarea o lo agregamos al flujo creado anteriormente

Finalmente guardamos y ejecutamos el flujo.

Echo

Comprobamos con el Explorador de datos si nuestros datos se han guardado correctamente

Todo esto y mucho más es posible gracias a DataK