ADF (Azure Data Factory)

Complete gids voor cloud data integratie

Azure Data Factory: De Ultieme Cloud Data Integratie Service

Wat is Azure Data Factory?

Azure Data Factory (ADF) is Microsoft's cloudgebaseerde ETL/ELT-service (Extract, Transform, Load) voor het bouwen van data-integratieoplossingen. Het is een volledig beheerde, serverless service waarmee je complexe data transformatiepijplijnen kunt ontwerpen, plannen en beheren.

Belangrijkste kenmerken:
  • Serverless architectuur: Geen infrastructuur om te beheren
  • Hybride data integratie: Werkt met zowel cloud als on-premises bronnen
  • Code-optioneel: Visuele interface of code (JSON, Python, .NET)
  • Schaling op aanvraag: Automatisch schalen voor grote workloads
  • Pay-as-you-go: Alleen betalen voor wat je gebruikt

ADF Architectuur: Hoe Werkt Het?

ADF bestaat uit vier hoofdcomponenten die samenwerken:

1. Integration Runtime (IR)

De rekeninfrastructuur die ADF gebruikt om activiteiten uit te voeren. Er zijn drie typen:

2. Linked Services

Vergelijkbaar met verbindingsstrings - definiëren de verbinding met externe data bronnen:

{
  "name": "AzureSqlDatabaseLinkedService",
  "properties": {
    "type": "AzureSqlDatabase",
    "typeProperties": {
      "connectionString": "Server=tcp:myserver.database.windows.net;Database=mydb;Authentication=Active Directory Integrated"
    },
    "connectVia": {
      "referenceName": "AutoResolveIntegrationRuntime",
      "type": "IntegrationRuntimeReference"
    }
  }
}

3. Datasets

Representaties van data structuren in linked services:

{
  "name": "AzureSqlTableDataset",
  "properties": {
    "linkedServiceName": {
      "referenceName": "AzureSqlDatabaseLinkedService",
      "type": "LinkedServiceReference"
    },
    "schema": [
      {
        "name": "UserId",
        "type": "Int32"
      },
      {
        "name": "Name",
        "type": "String"
      }
    ],
    "type": "AzureSqlTable",
    "typeProperties": {
      "tableName": "Users"
    }
  }
}

4. Pipelines en Activiteiten

Pipelines zijn logische groepen van activiteiten die samen een workflow vormen:

{
  "name": "ProcessUserDataPipeline",
  "properties": {
    "activities": [
      {
        "name": "CopyFromBlobToSql",
        "type": "Copy",
        "inputs": [
          {
            "referenceName": "InputBlobDataset",
            "type": "DatasetReference"
          }
        ],
        "outputs": [
          {
            "referenceName": "OutputSqlDataset",
            "type": "DatasetReference"
          }
        ],
        "typeProperties": {
          "source": {
            "type": "BlobSource"
          },
          "sink": {
            "type": "SqlSink",
            "writeBatchSize": 10000
          }
        }
      }
    ]
  }
}

Data Transformatie in ADF

ADF biedt verschillende opties voor data transformatie:

1. Mapping Data Flows

Visuele data transformaties zonder code, uitgevoerd op Spark clusters:

source(output(
        CustomerID as integer,
        Name as string,
        Email as string,
        SignupDate as timestamp
      ),
      allowSchemaDrift: true,
      validateSchema: false) ~> Source1
    Source1 filter(Email != null()) ~> FilterNullEmails
    FilterNullEmails aggregate(groupBy(Name),
        count(CustomerID) as CustomerCount) ~> Aggregate1
    Aggregate1 sink(allowSchemaDrift: true,
        validateSchema: false) ~> Sink1

2. Externe transformaties

ADF kan transformaties delegeren aan andere services:

3. Wrangling Data Flows

Power Query-achtige interface voor self-service data prep:

# Power Query M script voor Wrangling Data Flow
let
    Source = #"AzureSQLDatabase",
    #"Filtered Rows" = Table.SelectRows(Source, each [Age] > 18),
    #"Grouped Rows" = Table.Group(#"Filtered Rows", {"Country"}, {{"Count", each Table.RowCount(_), Int64.Type}})
in
    #"Grouped Rows"

Geavanceerde ADF Functies

Parameters en Variabelen

Maak dynamische, herbruikbare pipelines:

{
  "name": "DynamicPipeline",
  "properties": {
    "parameters": {
      "tableName": {
        "type": "string",
        "defaultValue": "Customers"
      },
      "outputPath": {
        "type": "string"
      }
    },
    "variables": {
      "tempFileName": "[concat('temp_', pipeline().parameters.tableName)]"
    },
    "activities": [
      {
        "name": "CopyActivity",
        "type": "Copy",
        "inputs": [
          {
            "referenceName": "SourceDataset",
            "type": "DatasetReference",
            "parameters": {
              "tableName": "[pipeline().parameters.tableName]"
            }
          }
        ],
        "outputs": [
          {
            "referenceName": "SinkDataset",
            "type": "DatasetReference",
            "parameters": {
              "path": "[pipeline().parameters.outputPath]"
            }
          }
        ]
      }
    ]
  }
}

Foutafhandeling

Implementeer robuuste foutafhandeling in pipelines:

{
  "name": "PipelineWithErrorHandling",
  "properties": {
    "activities": [
      {
        "name": "MainActivity",
        "type": "Copy",
        "inputs": [...],
        "outputs": [...],
        "policy": {
          "timeout": "7.00:00:00",
          "retry": 3,
          "retryIntervalInSeconds": 30
        }
      },
      {
        "name": "ErrorHandler",
        "type": "WebActivity",
        "dependsOn": [
          {
            "activity": "MainActivity",
            "dependencyConditions": ["Failed"]
          }
        ],
        "typeProperties": {
          "url": "https://your-error-handling-endpoint",
          "method": "POST"
        }
      }
    ]
  }
}

Triggers

Automatiseer pipeline-uitvoeringen met verschillende trigger types:

{
  "name": "DailyTrigger",
  "properties": {
    "type": "ScheduleTrigger",
    "typeProperties": {
      "recurrence": {
        "frequency": "Day",
        "interval": 1,
        "startTime": "2025-01-01T00:00:00Z",
        "timeZone": "UTC",
        "schedule": {
          "hours": [0, 12]
        }
      }
    },
    "pipelines": [
      {
        "pipelineReference": {
          "referenceName": "DailyProcessingPipeline",
          "type": "PipelineReference"
        }
      }
    ]
  }
}

ADF Best Practices

1. Ontwerpprincipes

2. Prestatieoptimalisatie

3. Beveiliging

4. Monitoring en Logging

ADF in de Praktijk: End-to-End Voorbeeld

Scenario: Dagelijkse Verkooprapportage

Een complete pipeline voor dagelijkse verkooprapportage:

{
  "name": "DailySalesReporting",
  "properties": {
    "activities": [
      {
        "name": "CopySalesDataFromSQL",
        "type": "Copy",
        "inputs": [
          {
            "referenceName": "SalesSQLDataset",
            "type": "DatasetReference"
          }
        ],
        "outputs": [
          {
            "referenceName": "SalesDataLakeDataset",
            "type": "DatasetReference"
          }
        ]
      },
      {
        "name": "TransformSalesData",
        "type": "MappingDataFlow",
        "inputs": [
          {
            "referenceName": "SalesDataLakeDataset",
            "type": "DatasetReference"
          }
        ],
        "outputs": [
          {
            "referenceName": "TransformedSalesDataset",
            "type": "DatasetReference"
          }
        ],
        "typeProperties": {
          "dataFlow": {
            "referenceName": "SalesTransformation",
            "type": "DataFlowReference"
          }
        }
      },
      {
        "name": "GeneratePowerBIReport",
        "type": "WebActivity",
        "dependsOn": [
          {
            "activity": "TransformSalesData",
            "dependencyConditions": ["Succeeded"]
          }
        ],
        "typeProperties": {
          "url": "https://api.powerbi.com/datasets/refresh",
          "method": "POST",
          "headers": {
            "Authorization": "Bearer ..."
          }
        }
      },
      {
        "name": "SendCompletionEmail",
        "type": "WebActivity",
        "dependsOn": [
          {
            "activity": "GeneratePowerBIReport",
            "dependencyConditions": ["Succeeded"]
          }
        ],
        "typeProperties": {
          "url": "https://prod-00.westeurope.logic.azure.com:443/workflows/...",
          "method": "POST",
          "body": {
            "message": "Daily sales report generated successfully"
          }
        }
      }
    ]
  }
}

ADF vs Alternatieven

Service Sterke punten Gebruiksscenario's
Azure Data Factory Hybride integratie, serverless, visuele tools Cloud ETL/ELT, data verplaatsing, georkestreerde workflows
Azure Synapse Pipelines Geïntegreerd met Synapse, geavanceerde transformaties Data warehouse workloads, complexe analytics pipelines
SSIS in Azure Rijke transformaties, bestaande SSIS-pakketten Migratie van on-premises ETL, complexe data transformaties
Databricks Workflows Geavanceerde analytics, machine learning Data science pipelines, real-time analytics

Conclusie

Azure Data Factory is een krachtig en flexibel platform voor cloud data integratie dat organisaties helpt bij het bouwen van schaalbare, betrouwbare data pipelines. Met zijn serverless architectuur, uitgebreide connectiviteit en zowel visuele als programmatische authoring-mogelijkheden, is ADF een uitstekende keuze voor moderne data-integratiebehoeften.

Of je nu eenvoudige dataverplaatsingen nodig hebt of complexe ETL/ELT-workflows, ADF biedt de tools om je data pipelines te ontwerpen, plannen en monitoren. Door gebruik te maken van best practices zoals modulair ontwerp, parameterisatie en robuuste foutafhandeling, kun je productieklare data-integratieoplossingen bouwen die schaalbaar, onderhoudbaar en kosteneffectief zijn.

Met de serverless architectuur, visuele interface en uitgebreide connectiviteit is ADF een uitstekende keuze voor organisaties die hun data integratie naar de cloud verplaatsen.

Wil je zelf direct met ADF aan de slag? Bekijk dan mijn complete praktische ADF-handleiding (€9), inclusief voorbeelden, best practices en geavanceerde technieken. Perfect voor data engineers en integratie specialisten die cloud-native pipelines willen bouwen.

← Terug naar Blog Overzicht