ELT con Data Factory y Snowflake
Category : Noticias
Por exigencias del guión estoy trabajando con Data Factoy y Snowflake. Y cuando hay cosas que están bien hechas están bien hechas.
Uno de los entornos problemáticos en cualquier proceso ETL tradicional es cuando te tienes que bajar datos de un webservice y transformarlos. Sobretodo cuando tienes webservices tan cambiantes como los que consumo yo.
Data Factoy permite «mover datos» de una forma relativamente secilla. Y con el nuevo paradigma ELT puedes salvar muchos de los problemas que se derivan de tener un webservice que te cambia datos de sitio, te entrega cosas nuevas, etc.
La idea es que descargas los datos del webservice a un json en un blob storage que tienes en tu portal de azure.
Una vez que has descargado tu json. Lo puedes cargar en snowflake en un segundo paso a una tabla temporal.
create or replace table tmp.exchange ( json_col variant ) ;
Una vez que tenemos los datos en esa tabla. Se puden enviar a la tabla de destino. Por ejemplo. Si lo que he metido en mi tabla temporal es:
{
"data": [
{ "nombre": "juan", "apellido": "perez", "edad": 20 },
{ "nombre": "pepe" , "apellido": "belez", "edad": 30 }
]
}
se puede acceder a la información mediante una vista que se monta con una consulta parecida a esto:
create or replace view my_data as
SELECT
f.value:"persona"."nombre"::string AS nombre,
f.value:"persona"."apellido"::string AS nombre,
f.value:"persona"."edad"::int AS edad
FROM mi_tabla t,
LATERAL FLATTEN( t.json_col:"data") f;
Tambien, si queremos tener más control y crear una tabla intermedia de respaldo y que la tabla de exchange no sea volatil lo podemos hacer en dos pasos:
- A una tabla de control:
create table destino_control as
SELECT current_timestamp() as fecha_insercion,
f.value AS registro
FROM TMP.mi_tabla t,
LATERAL FLATTEN( t.JSON:"data") f;
- consultar de esta tabla de control / persistencia.
select registro:"nombre"::string as nombre,
registro:"edad"::int AS edad
from destino_control;
De este modo tenemos la tabla destino_control con la informaicón en bruto para poder recuperarla cuando queramos.



