
Azure voor Beginners - Orchestrating Pipelines
In this installment of our Azure for Beginners series, we will build upon what we have created in the previous part of the guide (in which we have created a data flow and pipeline) and create a new pipeline to ingest data (from Google BigQuery) and copy it to our Azure Storage Account, from which we will send it to our existing pipeline, where we will join it with the data we already had in it.
In det deel van onze Azure voor Beginners handleiding bouwen we voort op wat we in het vorige deel van de handleiding hebben gedaan. (We hebben een data flow en pipeline gemaakt.) We gaan een nieuwe pipeline maken om data vanuit Google BigQuery te importeren en naar ons Azure Storage Account te kopiëren. Van daaruit zullen we de data naar onze reeds bestaande pipeline sturen, waar we het zullen door middel van een join zullen samenvoegen met de reeds bestaande data.
Note: het uiterlijk van Azure verandert regelmatig. Uw scherm ziet er mogelijk net iets anders uit dan op de afbeeldingen in deze handleiding. Sommige functies zijn bijvoorbeeld mogelijk naar een ander tabblad verplaatst, maar de algemene stappen zullen hetzelfde zijn.
Note: deze beginnershandleiding is gemaakt op basis van de Engelstalige UI. Om deze reden zullen wij in dit artikel de Engelse benamingen hanteren.
Note: houd er rekening mee dat de services binnen Azure betaalde services zijn. De kosten zijn afhankelijk van uw gebruik en configuratie. (Meer informatie vindt u hier.) Het is verstandig om dit te doen onder toezicht van een databasebeheerder of een data-engineer.
Google BigQuery - Data Uploaden
In dit geval zullen we geen data set uit ons Azure Storage Account gebruiken, maar een data set die is opgeslagen in Google BigQuery, de datawarehouseoplossing van Google. Deze data set zullen we als CSV-bestand naar ons Azure Storage Account kopiëren.
Om data naar Google BigQuery te kunnen uploaden gaat u eerst naar de Google Cloud Console website. Hier zult u moeten inloggen met een bestaand account of zult u een nieuw account moeten aanmaken. Zodra u bent ingelogd, navigeert u naar BigQuery Studio. Omdat we slechts een kleine data set zullen gebruiken volstaat een gratis account. Dit betekent dat u uw creditcardgegevens niet hoeft in te voeren. (Uw account staat standaard in de 'sandbox'-modus, wat prima werkt.)

Het is mogelijk dat er automatisch een nieuw project voor u is aangemaakt. Als dat niet het geval is zult u handmatig een nieuw project moeten aanmaken. Dit kan op verschillende manieren, waaronder door bovenaan op 'Select a project' te klikken, en vervolgens op 'New Project'.
Verzin een naam voor uw nieuwe project en klik op de knop 'Create'. Schrijf deze projectnaam op voor uzelf of kopieer en plak deze naam in Kladblok, want u zult deze naam later nodig hebben als we een verbinding tussen BigQuery en Azure tot stand brengen.
Vervolgens zullen we binnen ons nieuwe project een nieuwe dataset moeten aanmaken. Klik op de drie puntjes naast uw nieuwe project en selecteer 'Create dataset' in het menu.
Geef uw nieuwe dataset een naam en selecteer de regio('s) waarin u uw data set wilt opslaan. Klik op de knop 'Create dataset' wanneer u klaar bent.
Daarna maken we de tabel aan die de data uit ons orders_details.csv bestand zal gaan bevatten. Klik op de drie puntjes naast de dataset die u zojuist hebt aangemaakt en selecteer 'Create table'. (Mogelijk zult u eerst het menu moeten uitvouwen door op het driehoekje naast uw nieuwe project te klikken.)
Nu is het tijd om onze dataset naar Google BigQuery te uploaden.
• Selecteer 'Upload' in het 'Create table from' veld en klik op 'Browse' om naar het orders_details.csv bestand op uw computer te navigeren. Als het goed is zal het bestandsformaat automatisch meeveranderen naar CSV.
• Verzin een naam voor uw nieuwe tabel en vul deze in onder het kopje 'Table'. Wij hebben voor de naam 'orders_details' gekozen.
• Als u wilt dat BigQuery automatisch het schema van uw CSV-bestand detecteert, selecteert u 'Auto detect' onder het kopje Schema.
• Click the 'Create Table' button when you're finished.
• Zodra u klaar bent klikt u op de knop 'Create Table'.
Als alles goed is gegaan zou uw nieuwe tabel nu zichtbaar moeten zijn zodra u op het kleine driehoekje naast uw dataset klikt. (Zo niet, ververs dan eerst de pagina.) Selecteer de tabel door erop te klikken.
Nadat u uw nieuwe tabel heeft geselecteerd zult u meer informatie over uw tabel te zien krijgen. Bovenaan kunt u naar verschillende tabbladen navigeren.
Wanneer we op het 'Preview' tabblad klikken, ziet u in de preview van onze tabel dat deze dezelfde data bevat als ons orders_details.csv bestand. Dit betekent dat onze upload succesvol is verlopen.
Google BigQuery - Een sleutel verkrijgen
Om onze data van Google BigQuery naar Azure Data Factory te krijgen, zullen we een verbinding tot stand moeten brengen. Dit kan op verschillende manieren. Een van de eenvoudigste manieren is om een JSON-bestand van BigQuery te downloaden en naar Azure Data Factory te uploaden.
Klik op de hamburgerknop (de drie horizontale lijnen) linksboven in uw scherm om het menu uit te vouwen. Navigeer vervolgens naar 'IAM & Admin' en klik op 'Service Accounts'.
Zorg ervoor dat uw project is geselecteerd in het drop-down menu bovenaan en klik op de knop '+ Create Service Account'.
Verzin een naam voor uw nieuwe serviceaccount en klik op 'Create and Continue'.
Optioneel kunt u een rol selecteren voor uw serviceaccount. Voor onze beginnershandleiding kiezen we 'Basic' en 'Owner'.
Klik op de knop 'Continue'.
U kunt vervolgens ook andere gebruikers toegang verlenen tot dit serviceaccount, maar voor deze beginnershandleiding slaan we dit over en klikken we op de knop 'Done'.
Als alles goed is gegaan, zou u nu uw nieuwe serviceaccount moeten kunnen zien. Klik op de blauwe link om details over uw serviceaccount te bekijken.
Klik op het 'Keys' tabblad bovenaan.
Klik vervolgens op de 'Add Key' knop en selecteer 'Create new key'.
Onder het knopje Key type selecteert u 'JSON'. Klik daarna op de knop 'Create'. Dit zal automatisch een JSON-bestand naar uw computer downloaden. Zorg ervoor dat u weet waar dit bestand op uw computer is opgeslagen, want u zult dit bestand later naar uw Azure Data Factory moeten uploaden.
Als alles is goedgegaan zal uw sleutel de status 'Active' moeten hebben. Nu is het tijd om terug te keren naar Azure.
Log in bij Azure Data Factory
We zullen nu terugschakelen naar Azure Data Factory. Zoals u al vaker heeft gedaan, logt u in bij uw Azure-account en navigeert u naar Azure Data Factory. U kunt dit doen door te klikken op het Data factories icoon in de snelkoppelingenlade bovenaan, of, als het daar niet in staat, door te klikken op More services aan de rechterkant van de snelkoppelingenlade en vervolgens naar beneden te scrollen naar het kopje Analytics, waar u Data factories ook zult zien. Nadat u de Data Factory-omgeving heeft geladen, voert u de Data Factory in die u tijdens een eerdere les heeft gemaakt.
Zoals u in vorige lessen heeft gedaan, start u Azure Data Factory Studio door op de knop 'Launch studio' te klikken.
In plaats van op 'Transform data' te klikken, klikken we deze keer op 'Orchestrate'.
Orchestrating met Azure Data Factory
Wat is orchestration (orkestratie) in Azure Data Factory? In ADF draait orchestration om het instrueren van services binnen Azure m.b.t. wat ze moeten doen en wanneer ze het moeten doen. Orchestration komt neer op het coördineren en beheren van de uitvoering van verschillende taken of activiteiten binnen een data pipeline. Orchestration draait dus niet om het daadwerkelijk uitvoeren van de activiteiten (zoals het transformeren van de data), maar om het instrueren van specifieke services om dit te doen. Hiermee kunnen we ervoor zorgen dat alles in de juiste volgorde en op het juiste moment wordt uitgevoerd, wat vaak complexe controlestromen, planning en afhankelijkheidsbeheer met zich meebrengt.
Zoals we in het vorige artikel hebben vermeld, laat Azure Data Factory ons verbinding maken met verschillende data bronnen door een object te maken dat een 'Linked Service' wordt genoemd. Een Linked Service is in wezen een set configuratie-instellingen die de verbinding met onze data bron definieert. Zodra we een gekoppelde service hebben gedefinieerd om verbinding te maken met, laten we zeggen, een bestand in ons Azure Storage Account of een tabel in onze SQL-database, kan Azure Data Factory toegang krijgen tot onze data via een 'Dataset'-object. Een Dataset is een representatie van de datastructuur binnen ons opslagaccount of onze database.
Deze datasets kunnen worden gebruikt door een proces binnen Azure Data Factory dat een 'Activity' (activiteit) wordt genoemd. Dit zijn de acties die u op uw data kunt uitvoeren. (Bijvoorbeeld het transformeren van uw gegevens).
In het vorige deel van onze Azure voor beginners handleiding hebben we een zogenaamde 'pipeline' gemaakt, wat in feite een logische groepering van Activities is. Door Activities te groeperen in een pipeline, kunnen we de volgorde definiëren waarin deze Activities moeten worden uitgevoerd, ze volgens een bepaald schema uitvoeren, triggers instellen om het proces te starten, enz., maar we kunnen hun uitvoering nog steeds als één geheel bewaken. Denk bijvoorbeeld aan een scenario waarin u data uit een bron moet extraheren, de data moet transformeren en vervolgens in een SQL-database moet laden. Om dit in Azure Data Factory te doen, zou u een pipeline moeten maken waarin u een Copy Data Activity zou gebruiken om de data naar de cloud te verplaatsen, gevolgd door een Data Flow Activity om de benodigde transformaties uit te voeren, om ten slotte uw data naar uw SQL-database te verplaatsen via een sink of Copy Data Activity. Orchestration zorgt ervoor dat elk van deze stappen in de juiste volgorde en onder de juiste omstandigheden plaatsvinden.
Uw BigQuery tabel met uw Azure Data Factory verbinden
We beginnen met het creëren van een nieuwe pipeline.
Aangezien we een tabel uit Google BigQuery gaan ophalen, wat in feite gewoon ons orders_details.csv bestand welke we naar BigQuery hebben geüpload, noemen we onze pipeline 'OrdersDetailsRetrievalPipeline'.
Vervolgens slepen we een Copy Data Activity naar het canvas (ook wel 'graph' genoemd). Met de Copy Data Activity kopiëren we data van ons BigQuery-account naar Azure Data Factory.
Met de Copy Data Activity geselecteerd, ziet u de configuratie-instellingen onder het canvas verschijnen. Indien nodig kunt u de Copy Data Activity hier ook een nieuwe naam geven. (Wij hebben de standaard naam ongewijzigd gelaten.) Klik vervolgens op het 'Source' tabblad.
Om een nieuwe bron dataset toe te voegen, klikt u op het + teken naast 'New'.
Selecteer vervolgens de Google BigQuery connector.
Bedenk een passende naam voor uw dataset. Aangezien we het orders_details.csv bestand van BigQuery gaan halen, hebben we de dataset 'BigQueryOrdersDetailsRetrieval' genoemd. Klik vervolgens op de caret om een gekoppelde service te selecteren en selecteer '+ New' in het dropdownmenu.
Het volgende scherm heeft een aantal velden. Dit zijn de belangrijkste:
• Onder Name zult u uw nieuwe gekoppelde service een naam moeten geven. Wij hebben gekozen voor de naam 'BigQueryOrdersDetails'.
• Vervolgens zult u moeten specificeren hoe er verbinding wordt gemaakt met de tabel die we in Google BigQuery hebben gemaakt. In ons geval maken we verbinding via 'AutoResolveIntegrationRuntime'.
• Vul onder Project ID de projectnaam in die u in BigQuery heeft gebruikt. (De naam die u heeft opgeschreven of heeft gekopieerd en in Kladblok heeft geplakt.) Zorg ervoor dat u alle spaties voor en na uw projectnaam verwijdert.
• Kies 'Service Authentication' als uw Authentication type.
• Selecteer Key file als de methode waarmee u wilt verifiëren.
• Daaronder zult u het JSON-bestand moeten uploaden welke u vanuit BigQuery heeft gedownload. Klik op 'Choose file' om naar het bestand op uw computer te bladeren en selecteer het JSON-bestand.
Om te controleren of de verbinding tussen uw BigQuery-tabel en uw Azure Data Factory naar behoren werkt, klikt u op 'Test connection' in de rechteronderhoek. Na het testen zou er 'Connection successful' moeten staan. Als dat zo is, klikt u op de knop 'Create'.
Als de verbinding werkt, kunt u onder het kopje Table name de tabel selecteren die we in BigQuery hebben gemaakt. (Het kan even duren voordat de naam zichtbaar wordt. Als dat niet het geval is, klikt u op de knop aan de rechterkant om de lijst te vernieuwen.)
Vervolgens gaan we door naar het Sink tabblad. Klik op 'New' om een nieuwe sink te maken.
Selecteer 'Azure Blob Storage'.
Omdat we het als CSV-bestand willen opslaan, selecteren we 'DelimitedText'.
Voer een naam in, selecteer een gekoppelde service en selecteer map waarnaar u het CSV-bestand wilt kopiëren. Vergeet niet het vinkje bij 'First row as header' te plaatsen. Onder het kopje Import schema selecteren we ook de optie 'From connection/store'. Klik op 'OK' als u klaar bent.
Zorg ervoor dat u de bestandsextensie .csv kiest als u de data naar een CSV-bestand kopieert.
Voor onze doeleinden kunnen we de tabbladen Mapping, Settings en User properties overslaan.
Vervolgens verbinden we de pipeline die we in een vorige les hebben gemaakt met onze nieuwe Copy Data Activity. Selecteer de Activity en klik op de blauwe knop met de witte pijl.
Nadat u op de blauwe knop heeft geklikt zal er een menu met Activities verschijnen. Scroll naar beneden en selecteer 'Execute Pipeline'.
De 'Execute Pipeline' Activity verschijnt op het canvas, gekoppeld aan uw Copy Data Activity. Zorg ervoor dat u de Execute Pipeline Activity heeft geselecteerd (zodat deze blauw wordt).
Als u de Execute Pipeline Activity heeft geselecteerd, ziet u onder het canvas tabbladen met de bijbehorende instellingen.
Navigeer vervolgens naar het Settings tabblad. Hier zult u de pipeline moeten selecteren die we tijdens de vorige les hebben gemaakt.
Als we teruggaan naar het canvas en de Copy Data Activity selecteren, zien we kleine blokjes die aan de Activity vastzitten. Dit zijn conditional paths (voorwaardelijke paden). Hiermee kunnen we andere Activities verbinden die worden uitgevoerd op basis van de uitkomst van de huidige Activity:
• Grijze pijl (bij overslaan) - dit pad wordt uitgevoerd als de huidige Activity zelf niet is uitgevoerd.
• Groen vinkje (bij succes) - dit pad wordt uitgevoerd als de huidige Activity is geslaagd.
• Rood kruis (bij mislukking) - dit pad wordt uitgevoerd als de huidige Activity is mislukt.
• Blauwe pijl (bij voltooiing) - dit pad wordt uitgevoerd nadat de huidige Activity is voltooid, ongeacht of deze is geslaagd of niet.
Deze voorwaardelijke paden stellen ons in staat om voorwaardelijke logica te gebruiken. Wanneer we bijvoorbeeld kijken naar de verbinding tussen onze Copy Data Activity en onze Execute Pipeline Activity, zien we dat ze verbonden zijn via het groene vinkje van de Copy Data Activity. Dit betekent dat de Execute Pipeline Activity alleen wordt uitgevoerd als de Copy Data Activity is geslaagd.
Omdat het fijn zou zijn om een waarschuwing te krijgen als de Copy Data Activity mislukt, gaan we een Activity toevoegen aan het rode kruis. Met de Copy Data Activity geselecteerd klikt u op de blauwe knop met de witte pijl.
In het menu wat verschijnt, selecteer de 'Fail' Activity.
Omdat het pad bij succes (groen vinkje) het standaardpad is, zal de Fail Activity hoogstwaarschijnlijk ook aan dit pad worden gekoppeld in plaats van aan het rode kruis.
Als dat het geval is, verwijder dan de verbinding (rechtermuisklik + delete) en verbind de Activities via het rode kruispad.
Met de Fail Activity geselecteerd, kunt u onder het canvas de Activity ook een naam geven.
Op het Settings tabblad kunnen we een bericht en foutcode invoeren dat we krijgen bij een foutmelding. Kies hier een bericht en foutcode welke het beste bij uw situatie passen.
Als u klaar bent, zou het canvas er zo uit moeten zien.
Valideer vervolgens de wijzigingen die we hebben aangebracht en publiceer ze.
Activeer de pipeline, zodat deze één keer wordt uitgevoerd.
Wijzig de Eerder Gemaakte Data Flow
In de pipeline die we zojuist hebben gemaakt, hebben we data van Google BigQuery gekopieerd naar ons Azure Storage Account, en (na succes) de pipeline uitgevoerd die we in de vorige les hadden gemaakt. We gaan nu die data samenvoegen met de data in onze eerder gemaakte Dataflow, onderdeel van onze eerder gemaakte pipeline. Selecteer hiervoor de Data flow in de zijbalk links van het canvas.
Klik op de 'Add Source' knop om een bron toe te voegen. Dit is de dataset die we uit BigQuery hebben gekopieerd en in onze Azure Storage Account hebben opgeslagen.
Geef de bron een naam, selecteer een brontype en klik op het + teken om een nieuwe dataset toe te voegen.
Omdat we de data (van BigQuery) naar ons Azure Storage Account hebben gekopieerd, selecteren we 'Azure Blob Storage'.
We hebben de data opgeslagen als een CSV-bestand, wat betekent dat we 'DelimitedText' als opmaaktype kiezen.
Inmiddels bent u waarschijnlijk enigszins bekend met deze stappen:
• Geef de Dataset een naam en selecteer een gekoppelde service.
• Aangezien we de zojuist gemaakte pipeline hebben uitgevoerd (met behulp van 'Trigger now'), zou er nu een nieuw CSV-bestand moeten zijn opgeslagen in de blob-opslag in ons Azure Storage Account. Navigeer daar naartoe door te klikken op het map icoon (rechts) onder het kopje File path.
• Zorg ervoor dat u een vinkje plaatst naast First row as header.
• Selecteer 'From connection/store' onder de het kopje Import Schema.
• Klik op de knop 'OK' zodra u klaar bent.
De nieuwe bron (in ons geval OrdersDetailsStream) zou nu zichtbaar moeten zijn op het canvas. We zullen nu de data uit onze nieuwe bron (die de orders_details.csv data bevat welke we hebben gekopieerd uit BigQuery) aan de bestaande data toevoegen door middel van een zogeheten 'join'.
Klik op het + teken naast OrdersCustomersJoin.
Selecteer 'Join' in het menu dat verschijnt.
Selecteer de nieuwe join-stream. Zoals gebruikelijk zullen we onder het canvas de join moeten instellen:
• Geef de join een naam.
• Optioneel kunt u een beschrijving invoeren.
• Selecteer de linker- en rechterstream. Wij hebben respectievelijk 'OrdersCustomersJoin' en 'OrdersDetailsStream' gekozen.
• Kies een join-type. We hebben gekozen voor een left outer join, wat betekent dat alle rijen van de OrdersCustomersJoin behouden blijven én alleen bepaalde rijen van de OrdersDetailsStream. De reden hiervoor is dat er mogelijk niet voor alle orders details bestaan.
• We hebben 'fuzzy matching' niet aangevinkt. Als de waarden in de kolommen waarop u uw join wilt baseren (de join condition) mogelijk niet voor 100% overeenkomen, kunt u deze optie gebruiken. Bijvoorbeeld, als u klant-id '001' uit uw linkerstream wilt matchen met klant-id '01' uit uw rechterstream, zal fuzzy matching hiervoor zorgen. Wanneer ingeschakeld, kunt u een drempelwaarde moeten kiezen, wat een percentage is (60-100%) van hoe vergelijkbaar de waarden in de linker- en rechterstream moeten zijn.
• Kies een join condition (join-voorwaarde). Dit zijn de kolommen van de linker- en rechterstream die in relatie tot elkaar moeten staan. In ons geval gebruiken we de operator '=='. Dit betekent dat we de rijen willen retourneren waar de waarden in beide kolommen overeenkomen. Aangezien we een left outer join maken, willen we alle rijen van de linkerstream retourneren en alleen de rijen van de rechterstream waar de waarden van de orderid-kolommen overeenkomen.
Wanneer we naar het Data preview tabblad kijken, zien we dat de join werkt zoals bedoeld.
Nadat de nieuwe join is gemaakt, zou het canvas er zo uit moeten zien.
Hoewel we in totaal 28 kolommen hebben (23 van de OrdersCustomersJoin die we in de vorige les hebben gemaakt, waaraan we 5 kolommen van onze OrdersDetailsStream hebben toegevoegd), worden er slechts 26 kolommen weergegeven. De reden hiervoor is dat we meerdere kolommen met dezelfde naam hebben, wat een resultaat is van de joins die we hebben gemaakt.
Met de OrdersCustomersToDB-sink geselecteerd, navigeert u in de sink-eigenschappen (onder het canvas) naar het tabblad Mapping. Zoals we in de vorige les hebben gezien, hebben de invoerkolommen met identieke namen een @ erin. Bijvoorbeeld, wanneer we een invoerkolom zien zoals OrdersStream@orderid, betekent dit dat er ook een orderid-kolom uit een andere stream komt. In ons geval zal er ergens in de lijst ook OrdersDetailsStream@orderid staan. Hoewel het voor ons geen probleem zou zijn om deze kolommen uit de uiteindelijke dataset te laten, zou het kunnen dat u deze kolommen toch wilt behouden. In dat geval hernoemt u gewoon een van de dubbele kolommen.
Door de kolommen een nieuwe naam te geven houdt u alle 28 kolommen over.
Tot slot valideren en publiceren we de wijzigingen die we hebben aangebracht.
De pipeline(s) uitvoeren
Nu we klaar zijn met het bouwen en aanpassen van de pipeline en de Data flow, is het tijd om ze uit te voeren.
Selecteer in de zijbalk aan de linkerkant de pipeline die we aan het begin van deze les hebben gemaakt. In ons geval is dat OrdersDetailsRetrievalPipeline.
Voordat we de pipeline activeren, zult u ervoor moeten zorgen dat uw Azure SQL Database actief is. In ons geval betekent dit dat we verbinding maken met Azure Data Studio. (Voor een how-to: bekijk dit deel van de gids. Scrol omlaag naar het Azure Data Studio gedeelte.) Activeer vervolgens de pipeline.
Wanneer we overschakelen naar Azure Data Studio en de tabellen vernieuwen (zoals we eerder hebben gedaan), kunnen we zien dat de kolommen uit orders_details.csv succesvol zijn samengevoegd met de andere data.
Hiermee zijn we aan het einde gekomen van dit deel van de Azure for Beginners handleiding. Goed gedaan!










































































