Cómo detectar esquemas dinámicos en Azure Data Factory
Este tutorial muestra cómo crear un pipeline en Azure Data Factory que detecta cambios de esquema en datos (por ejemplo, nuevos campos en un CSV/Parquet) y activa transformaciones condicionales. Detectar esquemas dinámicos evita fallos en cargas y permite adaptar pipelines automáticamente.
Requisitos previos
- Cuenta Azure con permiso para crear recursos (Data Factory, Storage).
- Azure Data Factory (v2) creado y acceso al portal ADF o integración con Git.
- Azure Blob Storage o ADLS Gen2 con archivos de ejemplo (CSV/Parquet).
- Conocimientos básicos de pipelines, activities y Linked Services en ADF.
Paso 1: Concepto y estrategia
Se explica el enfoque: usar la actividad Get Metadata para leer esquema/columnas del archivo, comparar con un esquema de referencia almacenado (en un archivo JSON en el Storage o en una tabla SQL) y, si hay diferencias, marcar el evento (por ejemplo con un archivo de control o Trigger). Esta estrategia evita fallos en transformaciones y permite revisiones manuales o automáticas.
Paso 2: Preparar el esquema de referencia
Crear un archivo JSON simple en el Storage que contenga la lista de columnas esperadas. Ese archivo será el punto de comparación.
{
"columns": ["id","name","date","amount"]
}
Coloque este archivo, por ejemplo, en el container 'control' como reference_schema.json.
Paso 3: Pipeline - obtener metadatos del archivo de datos
Creé un pipeline en el ADF con una actividad Get Metadata apuntando al dataset del archivo de datos (CSV o Parquet). Configure la Field list a 'structure' o 'columnCount' y 'childItems' según el formato. El objetivo es obtener la lista de columnas detectadas.
// Ejemplo de output esperado de la actividad Get Metadata (pseudo-JSON)
{
"structure": [
{"name":"id","type":"String"},
{"name":"name","type":"String"},
{"name":"date","type":"String"},
{"name":"amount","type":"Decimal"},
{"name":"new_col","type":"String"}
]
}
Paso 4: Leer el esquema de referencia
Agregue una actividad Lookup que lea el archivo reference_schema.json del mismo Storage. Configure el Lookup en 'First row only' = false si devuelve un array. El output contendrá la lista de columnas esperadas.
// Ejemplo de output del Lookup
{
"value": [{"columns": ["id","name","date","amount"]}]
}
Paso 5: Comparar esquemas con una actividad If Condition
Agregue una actividad If Condition que compare los arrays de columnas. Use una expresión que verifique si existe alguna columna en el esquema detectado que no esté en el esquema de referencia, o viceversa. Para simplificar, convierta listas en strings ordenadas y compare o use funciones contains.
// Ejemplo de expresión (ADF expression language)
@greater(length(arrayExcept(activity('GetMetadata').output.structure[*].name, activity('Lookup').output.value[0].columns)), 0)
// arrayExcept no existe nativamente; alternativa: usar una Azure Function/Databricks para comparación cuando sea necesario.
Nota: si necesita lógica más compleja (diferencias en tipos), invoque una Azure Function o un Databricks Notebook desde el pipeline para comparar y devolver un booleano y la lista de diferencias.
Paso 6: Acciones según el resultado
En la rama true (diferencia encontrada) haga una de estas acciones: crear un archivo de alerta en el Storage, enviar un e‑mail vía Logic App, o grabar la diferencia en una tabla SQL para análisis. En la rama false, continúe con el ETL normal.
// Ejemplo: actividad Web para llamar a Logic App (body simplificado)
{
"differences": "@string(activity('Compare').output)"
}
Paso 7: Automatizar y versionar el esquema de referencia
Automatice la actualización del archivo reference_schema.json cuando se aprueben cambios: por ejemplo, tener un pipeline separado que, tras la validación manual, actualice el archivo. Guarde historial con timestamps para auditoría.
Verificar el resultado
Para confirmar que la detección funciona: coloque un archivo con una nueva columna en el Storage y ejecute el pipeline. Verifique la ejecución en Monitor del ADF; confirme que la actividad If Condition entró en la rama de diferencia y que la acción elegida (archivo de alerta, e‑mail, registro SQL) se ejecutó. Revise los outputs de las actividades Get Metadata y Lookup en el panel de salida para ver las listas de columnas.
Conclusión
Detectar esquemas dinámicos en Azure Data Factory protege los pipelines contra fallos y facilita la gobernanza de datos. Siguientes pasos: implementar lógica más rica (tipos, renombres, columnas obligatorias) usando Azure Function o Databricks para comparación, y añadir tests automáticos. Consejo: empiece por registrar siempre el esquema detectado para facilitar el debugging; ¿cuál es el primer cambio de esquema que espera encontrar?