Data Science
January 26, 2023

Willkommen zurück zum zweiten Artikel unserer Azure ETL-Serie. Im letzten Artikel haben wir gesehen, wie man erstellen Ressourcen in Azure .
In dieser Folge zeigen wir Ihnen, wie Sie eine Azure Data Factory (ADF) einrichten, wie Sie mit Kosten innerhalb von ADF umgehen und wie Sie einen Beispieldatensatz verarbeiten. Wie in der Einleitung beschrieben, verwenden wir die Northwind-Daten, laden sie in eine MS SQL-Datenbank und übertragen sie von dort in einem täglich laufenden Verfahren mit ADF in den Azure Data Lake-Speicher.
1. Azure Data Factory
Azure Data Factory ist ein Cloud-basierter ETL- und Datenintegrationsdienst zur Erstellung von Workflows zum Verschieben und Umwandeln von Daten. Mit Data Factory können Sie geplante Workflows (Pipelines) auf codefreie Weise erstellen. Jeder grafisch programmierte Block in der Pipeline stellt ein Stück JSON-Code dar, der auch manuell kodiert oder aus einem GIT-Repository übernommen werden kann, anstatt per Drag & Drop. Der grundlegende Arbeitsablauf in Data Factory ist in Pipelines strukturiert. Die Datenein- und -ausgänge (hier Quellen und Senken) werden als so genannte Datensätze definiert. Jede Data Factory besteht normalerweise aus einer oder mehreren Pipelines, die Aktivitäten enthalten und ausführen.
Die Konzepte von Datensätzen, Pipelines und Aktivitäten werden später in diesem Artikel erklärt. Alle Änderungen an einer Data Factory müssen veröffentlicht werden, um für die nächste Sitzung gespeichert zu werden, es sei denn, Sie haben die Versionskontrolle aktiviert! Denken Sie auch daran, dass fast alles, was Sie in ADF tun, einen Preis hat:
Nicht nur die Ausführung eines Workflows, sondern auch der Aufbau einer Pipeline, die Überwachung von Läufen oder einfach nur die Speicherung des Codes. Das meiste davon ist jedoch recht billig, so dass es hauptsächlich auf die Verarbeitungszeit ankommt:
Die Laufzeitkosten betragen $0,25/DIU-Stunde¹ für die Datenbewegung und $0,005/Stunde pro Aktivität
Die Laufzeit eines Datenflusses kostet $0,193-$0,343 pro vCore-Stunde, je nach Art der Kerne.
Jedes Stück Laufzeit wird für eine einzelne Aktivität berechnet und auf eine Minute aufgerundet! => Es ist kosteneffektiver, wenige komplexe Aktivitäten mit lang anhaltender Ausführung zu haben als viele einfache.
¹ DIU-Stunde = Data Integration Unit Stunde, im Wesentlichen Rechenknoten pro Stunde
1.1. Erstellen einer Azure Data Factory
Um eine Data Factory-Ressource zu erstellen, gehen Sie zum Azure-Portal. Suchen Sie nach "Data Factories" und erstellen/hinzufügen Sie eine. Wählen Sie einen weltweit eindeutigen Namen. Wählen Sie die Version 2.
Platzieren Sie die Data Factory in der von Ihnen erstellten Ressourcengruppe und wählen Sie die gleiche Region (=Ort) wie für den Speicher und die Ressourcengruppe, die Sie in der ersten Episode erstellt haben. Sie müssen GIT vorerst nicht aktivieren. Es ist jedoch empfehlenswert, eine Versionskontrolle einzubauen. Sie können dafür auch das Azure DevOps Repo verwenden.
Jede Veröffentlichung, die Sie auf ADF vornehmen, wird auch in dieses Repository übertragen. Das Speichern Ihres Codes im Repo bedeutet jedoch nicht automatisch, dass er veröffentlicht wird. Wir stellen den kompletten Code für unser ADF als JSONs auf unserem Github. Sie können die JSONs zu Ihrem Repo hinzufügen und eine Data Factory einschließlich der Ressource aus dem Repo bereitstellen. Jetzt ist alles bereit, um mit der ETL-Vorbereitung zu beginnen. Sie können zu Ihrer Data Factory gehen und sie durch Klicken auf "Author & Monitor" eingeben.
2. Grundlegendes ETL-Beispiel
In diesem Abschnitt werden wir eine einfache Pipeline erstellen, die bereits viele Tools in ADF enthält. Außerdem erklären wir die grundlegenden Ideen, wie verknüpfte Dienste, Datensätze, Aktivitäten und Pipelines.
2.0. Vorbereitung
Wie bereits erwähnt, werden wir die Daten in den Azure SQL-Server injizieren. Die Daten selbst finden Sie hier als SQL-Datei mit CREATE- und INSERT-Anweisungen. Die Erstellung und Eingabe einer Azure SQL-DB ähnelt der Erstellung des Synapse DWH, die wir in Teil 3 vornehmen werden. Wenn Sie sich nicht sicher sind, können Sie es in unserem nächsten Artikel nachlesen Erstellen des Data Data Warehouse Warehouse-Schemas. Die Northwind-Daten sind in einem OLTP-ähnlichen Datenschema organisiert:
Northwind Data Schema Bildquelle
2.1. Die Pipeline
In Data Factory ist eine Pipeline eine Gruppe von Aktivitäten, die jeweils Teile des Arbeitsablaufs ausführen, wie z.B. das Kopieren, Transformieren oder Überprüfen von Daten. Diese Aktivitäten sind in einer DAG-ähnlichen grafischen Programmieroberfläche zusammengefasst. Um den Workflow zu steuern, verfügt eine Pipeline über zwei weitere grundlegende Eigenschaften: Auslöser und Parameter/Variablen. Außerdem kann die Pipeline den Arbeitsablauf ändern, wenn ein Fehler auftritt. In unserem Szenario erstellen wir nur eine Pipeline.
Die Kopieraktivitäten in der Vorbereitungspipeline haben keine Abhängigkeiten. Sie werden alle parallel ausgeführt. Hier stellen wir sie einfach nebeneinander, um einen besseren Überblick zu erhalten.
Sie liest Partitionen aus der Auftragstabelle zusammen mit allen anderen benötigten Tabellen und übergibt sie an ADLS. Diese Pipeline enthält lediglich neun Kopiervorgänge. Eine für jede Tabelle, die wir für das DWH-Modell verwenden: Kategorien, Kunden, Mitarbeiter, Mitarbeiter-Territorien, Bestellungsdetails, Produkte, Lieferanten, Territorien und Bestellungen. Außerdem enthält es einen Parameter "Datum". Dieser Parameter kann später für die Terminplanung verwendet werden. Jede Kopieraktivität hat eine Quelle und eine Senke. Für beide müssen Sie ein Dataset erstellen, das an verknüpfte Dienste gebunden ist.
2.1.1. Verknüpfte Dienste und Datensätze
Der Linked Service (LS) ist im Wesentlichen ein Verbindungsstring zu den Daten, die zusammen mit der Laufzeit, die dafür verwendet werden soll, verarbeitet werden müssen. Ein Datensatz ist im Grunde eine Ansicht oder eine Darstellung von Daten, die von Aktivitäten innerhalb einer Pipeline verwendet wird. Um einen LS zu erstellen, müssen Sie in Ihrem ADF auf die Registerkarte "Verwalten" wechseln. Hier benötigen wir drei verknüpfte Dienste:
Einen für den Key Vault, einen für den Speicher und einen für die SQL-Datenbank. Gehen Sie zur Registerkarte Verwalten und erstellen Sie die verknüpften Dienste. Wählen Sie die entsprechenden Kacheln. In diesem Beispiel stellen wir den Zugriffsschlüssel für den Speicher über Key Vault bereit. Dies ist der sicherere Weg, wie er von Azure vorgeschlagen wird.
Erstellen Sie zunächst den mit Key Vault verknüpften Dienst. Sie werden aufgefordert, dem Data Factory-Dienst Zugriff auf den Key Vault zu gewähren. Kopieren Sie die Objekt-ID und klicken Sie auf diesen Link. Sie werden zu einer Seite im Key Vault weitergeleitet, auf der Sie Zugriffsrichtlinien hinzufügen können.
Fügen Sie eine Zugriffsrichtlinie hinzu, indem Sie ihr die erforderlichen geheimen Berechtigungen und Ihre Objekt-ID geben. Nachdem Sie die Richtlinie hinzugefügt haben, klicken Sie auf "Speichern". Für die anderen Services können Sie die Geheimnisse des Schlüsseltresors für den Zugriff auf die Daten verwenden. Sie können die Verbindung jederzeit testen. Stellen Sie sicher, dass alle Dienste laufen, wenn Sie die Verbindung zu ihnen testen.
Sie benötigen wahrscheinlich viele Data Factory-Ressourcen, insbesondere Datensätze. Stellen Sie daher sicher, dass Sie diese in eine schöne Struktur bringen. Arbeiten Sie mit Ordnern. Geben Sie ihnen einen aussagekräftigen Namen. Wir erstellen alle Datasets, die die Data in den SQL DB-Tabellen darstellen. Außerdem erstellen wir alle Datasets, die die Daten im Ziel (ADLS2 - Parquet-Datei) darstellen. Hier definieren wir das Ziel-Parkett dynamisch. Der Zielordner ist parametrisiert. Dadurch wird eine Art Datenpartition erstellt.
2.1.2. Die Aktivitäten zum Kopieren
Die Kopieraktivität kopiert Daten aus einer Quelle in einen Sink-Datensatz. Außerdem erlaubt sie ein einfaches Mapping (kein bedingtes Mapping) wie Umbenennung oder Typecasting. Es sind verschiedene Datenquellen wie Azure Blob Storage, Amazon Redshift oder S3 zulässig, während die Senken mehr oder weniger auf die Azure-Speichersysteme wie Azure SQL, Azure Synapse oder Azure Blob Storage beschränkt sind. In unserem Szenario legen wir für jede Tabelle eine Kopieraktivität mit den entsprechenden Quell- und Sink-Datensätzen fest. Im Sink-Datensatz geben wir in den Datensatzeigenschaften die Parameter Jahr, Monat, Tag an.
Bei der Erstellung von Aufträgen möchten wir jedoch nur die Daten eines bestimmten Auftragsdatums lesen. Daher müssen wir auf der Registerkarte Quelle eine Abfrage eingeben. Da wir das Datum parametrisieren müssen, müssen wir der Abfrage einen dynamischen Inhalt hinzufügen. Hier müssen wir ein einfaches Anführungszeichen auslassen. In der dynamischen Ausdruckserstellung von Azures wird dies durch ein weiteres einfaches Anführungszeichen erreicht.
2.1.3. Der Auslöser
In unserem Szenario wollen wir den Dump täglich durchführen. Da die Daten jedoch aus den Jahren 1996-1998 stammen, benötigen wir einen Mechanismus für das Backfilling. Daher wählen wir einen sogenannten Tumbling Window (TW) Trigger.
Eine ausführlichere Diskussion über die Vor- und Nachteile dieses Triggers finden Sie in unserem letzten Artikel Aufbau einer Azure Data Factory Pipeline für professionelles Data Warehousing. Um einen Trigger zu erstellen, gehen Sie zu Ihrer Pipeline und klicken Sie auf die Registerkarte Trigger. Fügen Sie einen neuen Tumbling Window Trigger hinzu und wählen Sie das entsprechende Start- und Enddatum. Sie können ihn entweder direkt aktivieren, was dazu führt, dass er direkt nach der Veröffentlichung einige Läufe auslöst, oder Sie können ihn auf inaktiv setzen und ihn später auf der Registerkarte "Verwalten" aktivieren. Wenn Sie den Parameter "Datum" in der Pipeline definiert haben, werden Sie gefragt, welchen Wert dieser Parameter haben soll. Hier können Sie die @trigger().outputs.windowStartTime als dynamischen Inhalt eingeben.
Wenn Sie diese letzten Änderungen veröffentlichen, können Sie auf die Registerkarte Monitor gehen und Sie werden erkennen, dass die Pipeline für die Tage, die Sie im Trigger angegeben haben, ausgelöst wird. Damit ist unsere Folge über die grundlegende Verarbeitung mit ADF abgeschlossen.
Einpacken
Zusammenfassend lässt sich sagen, dass wir eine Data Factory zusammen mit einer Pipeline erstellt haben, die mehrere Kopieraktivitäten enthält. Wir haben gesehen, wie wir verknüpfte Dienste und Datensätze erstellen, die wir für die Verarbeitung benötigen. Wir haben auch gesehen, wie wir einen Auslöser dynamisch planen und die Pipeline hinsichtlich der zu lesenden Daten und deren Speicherort parametrisieren können. In der nächsten Folge erfahren wir, wie wir ein Synapse Data Warehousemit einem Schema einrichten, das für Business Analytics geeignet ist. In der letzten Folge stellen wir Ihnen die DataFactory-Pipeline vor, die die Daten, die in das Data Warehouse gehen, aggregiert.
Quellen
Data Science
Erstellen des Data Warehouse-Schemas - 3/4
Data Science
Aufbau einer Azure Data Factory Pipeline für professionelles Data Warehousing - 4/4
Data Science
Data Engineering auf Azure - Die Einrichtung - 1/4
Abonnieren Sie jetzt die frischen Inhalte