(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa

Cómo hacer merge incremental de archivos Parquet en Azure Data Factory

João Barros 02 de November de 2026 4 min de lectura

Este tutorial explica cómo implementar un proceso de merge incremental de archivos Parquet en Azure Data Factory (ADF) para mantener un Lakehouse actualizado. Es útil para evitar duplicados y aplicar actualizaciones o eliminaciones en datos analíticos sin reconstruir todo.

Requisitos previos

  • Cuenta Azure con permisos para crear recursos.
  • Azure Data Factory v2 creado.
  • Azure Data Lake Storage Gen2 (ADLS Gen2) o contenedor con archivos Parquet de origen y destino.
  • Conocimientos básicos de Parquet, SQL y actividad Copy/Data Flow en ADF.

Paso 1: Concepto y estrategia del merge incremental

Antes de crear el pipeline, definimos la estrategia: vamos a identificar archivos Parquet de origen que representan nuevos registros o actualizaciones, y aplicar un merge para actualizar la tabla destino almacenada como Parquet. El patrón común es usar una columna de clave natural (id) y una columna de control de versión/updated_at.

Paso 2: Preparar carpetas y naming

Organiza los archivos en ADLS Gen2 en dos carpetas: /bronze/incremental/ para archivos de input y /silver/tables/<nombre>/ para el destino. Usa nombres con timestamp para facilidad de rastreo.

Paso 3: Crear Linked Services y Datasets en ADF

Configura un Linked Service para ADLS Gen2 con Managed Identity o Service Principal. Luego crea dos Datasets Parquet: uno para la fuente incremental y otro para la tabla destino.

// Exemplo conceptual de JSON do dataset (simplificado)
{
  "name": "ParquetDatasetSource",
  "properties": {
    "linkedServiceName": { "referenceName": "LS_ADLSGen2", "type": "LinkedServiceReference" },
    "type": "Parquet",
    "typeProperties": { "location": { "type": "AzureBlobFSLocation", "fileSystem": "data", "folderPath": "bronze/incremental" } }
  }
}

Paso 4: Usar Mapping Data Flow para efectuar el merge

El componente más práctico es un Mapping Data Flow que lee origen incremental y destino y hace un join por clave para decidir insertar, actualizar o mantener. El Data Flow permite operaciones tipo MERGE usando transformaciones de conditional split y sink con update/insert.

// Fluxo simplificado de transformações no Data Flow
1. SourceA: leitor da origem incremental (Parquet)
2. SourceB: leitor da tabela destino (Parquet)
3. Join: left join SourceA.id == SourceB.id
4. DerivedColumn: calcular action = iif(isNull(SourceB.id), 'insert', iif(SourceA.updated_at > SourceB.updated_at, 'update', 'skip'))
5. FilterInsert: action == 'insert'
6. FilterUpdate: action == 'update'
7. SinkInsert: modo insert para destino Parquet (append)
8. SinkUpdate: modo update com chave id (modo upsert se suportado) ou escrever para staging e substituir

Paso 5: Configurar el Sink para upsert o replace

Parquet no tiene transacciones nativas; para upsert recomiendo dos opciones: (A) usar un formato compatible con Upsert (ej.: Delta Lake) si está disponible; (B) implementar el patrón: escribir el resultado completo actualizado en un directorio temporal y luego sustituir el directorio destino. En ADF Data Flow puedes escribir el archivo actualizado en /silver/tables/<nombre>_tmp y, después, un paso de copy/rename para reemplazar.

Paso 6: Pipeline ADF para orquestación

Crea un pipeline que orqueste: (1) validar archivos nuevos (Get Metadata o Lookup), (2) ejecutar el Mapping Data Flow, (3) mover archivos procesados a archive y (4) reemplazar destino si es necesario. Parametriza con datasetPath y runId para reutilización.

// Exemplo de sequência no pipeline (pseudocode)
- Get Metadata (folder bronze/incremental) -> outputs.list
- If length(outputs.list)>0 then
    - Data Flow activity (mergeFlow) with param sourcePath
    - If write to tmp, então Copy Activity para mover tmp -> silver e Remove antiga pasta
    - Move source files -> /archive/yyyyMMdd

Verificar el resultado

Confirmar que no existen duplicados: abre la carpeta /silver/tables/<nombre> y valida count por id (usar Notebook, Synapse ou Power BI). Verifica timestamps updated_at y compara algunos registros que deberían haber sido actualizados. Confirma también que los archivos en la carpeta bronze fueron movidos a archive.

Conclusión

Con este patrón de merge incremental en Azure Data Factory consigues mantener un Lakehouse actualizado sin reconstrucciones completas. Próximos pasos: adaptar para Delta Lake para upserts nativos, añadir control de versiones y alertas. Consejo: prueba con conjuntos pequeños y valida antes de aplicar en producción — ¿cuál es el mayor desafío que tienes en tu escenario?