Meerdere tabellen bulksgewijs kopiëren met behulp van Azure Data Factory met PowerShell
VAN TOEPASSING OP: Azure Data Factory
Azure Synapse Analytics
Tip
Probeer Data Factory uit in Microsoft Fabric, een alles-in-één analyseoplossing voor ondernemingen. Microsoft Fabric omvat alles, van gegevensverplaatsing tot gegevenswetenschap, realtime analyses, business intelligence en rapportage. Meer informatie over het gratis starten van een nieuwe proefversie .
Deze zelfstudie demonstreert het kopiëren van een aantal tabellen uit Azure SQL Database naar Azure Synapse Analytics. U kunt hetzelfde patroon toepassen in andere kopieerscenario's. Bijvoorbeeld het kopiëren van tabellen van SQL Server/Oracle naar Azure SQL Database/Data Warehouse/Azure Blob, verschillende paden kopiëren van Blob naar Azure SQL Database-tabellen.
Op hoog niveau bevat deze zelfstudie de volgende stappen:
- Een data factory maken.
- Gekoppelde services maken voor Azure SQL Database, Azure Synapse Analytics en Azure Storage.
- Gegevenssets maken voor Azure SQL Database en Azure Synapse Analytics.
- Een pijplijn maken om de te kopiëren tabellen op te zoeken en een andere pijplijn om de kopieerbewerking daadwerkelijk uit te voeren.
- Een pijplijnuitvoering starten.
- De uitvoering van de pijplijn en van de activiteit controleren.
In deze zelfstudie wordt gebruikgemaakt van Azure PowerShell. Zie Quickstarts (Snelstartgidsen) voor meer informatie over het gebruik van andere hulpprogramma's/SDK's voor het maken van een gegevensfactory.
End-to-end werkstroom
In dit scenario hebben we een aantal tabellen in Azure SQL Database die we willen kopiëren naar Azure Synapse Analytics. Dit is de logische volgorde van de stappen in de werkstroom die in pijplijnen plaatsvindt:
- De eerste pijplijn zoekt de lijst op met tabellen die moeten worden gekopieerd naar de sinkgegevensopslag. U kunt ook een metagegevenstabel bijhouden waarin alle tabellen worden vermeld die moeten worden gekopieerd naar de sinkgegevensopslag. De pijplijn activeert vervolgens een andere pijplijn, die elke tabel in de database langsloopt en de bewerking uitvoert waarmee de gegevens worden gekopieerd.
- De tweede pijplijn voert de daadwerkelijke kopieerbewerking uit. De lijst met tabellen wordt gebruikt als parameter. Kopieer voor elke tabel in de lijst de specifieke tabel in Azure SQL Database naar de bijbehorende tabel in Azure Synapse Analytics met behulp van gefaseerd kopiëren via Blob storage en PolyBase voor de beste prestaties. In dit voorbeeld wordt de lijst met tabellen in de eerste pijplijn doorgegeven als een waarde voor de parameter.
Als u geen Azure-abonnement hebt, maakt u een gratis account voordat u begint.
Vereisten
Notitie
Het wordt aanbevolen de Azure Az PowerShell-module te gebruiken om te communiceren met Azure. Zie Azure PowerShell installeren om aan de slag te gaan. Raadpleeg Azure PowerShell migreren van AzureRM naar Az om te leren hoe u naar de Azure PowerShell-module migreert.
- Azure PowerShell. Volg de instructies in How to install and configure Azure PowerShell (Azure PowerShell installeren en configureren).
- Azure Storage-account. Het Azure Storage-account wordt gebruikt als faseringsblobopslag in de bulksgewijze kopieerbewerking.
- Azure SQL-database. Deze database bevat de brongegevens.
- Azure Synapse Analytics. Dit datawarehouse bevat de uit de SQL Database gekopieerde gegevens.
SQL Database en Azure Synapse Analytics voorbereiden
De Azure SQL Database-bron voorbereiden:
Maak een database met Adventure Works LT-testgegevens in SQL Database door het artikel Create an Azure SQL database (Een database in Azure SQL Database maken) te volgen. In deze zelfstudie worden alle tabellen van deze voorbeelddatabase naar Azure Synapse Analytics gekopieerd.
Bereid de sink Azure Synapse Analytics voor:
Als u geen Azure Synapse Analytics-werkruimte hebt, raadpleegt u het artikel Aan de slag met Azure Synapse Analytics voor de stappen om er een te maken.
Maak corresponderende tabelschema's in Azure Synapse Analytics. U gebruikt Azure Data Factory om gegevens in een latere stap te migreren/kopiëren.
Azure-services voor toegang tot SQL-server
Voor zowel SQL Database als Azure Synapse Analytics moet u Azure-services toegang verlenen tot SQL Server. Zorg ervoor dat de instelling Toegang tot Azure-services toestaan voor uw server op AAN staat. Met deze instelling kan de Data Factory-service gegevens lezen uit uw Azure SQL Database en schrijven naar Azure Synapse Analytics. Voer de volgende stappen uit om dit te controleren en de instelling in te schakelen:
- Klik op Alle services aan de linkerkant en klik op SQL-servers.
- Selecteer uw server en klik op Firewall onder INSTELLINGEN.
- Klik op de pagina Firewallinstellingen op AAN bij Toegang tot Azure-services toestaan.
Een data factory maken
Start PowerShell. Houd Azure PowerShell open tot het einde van deze zelfstudie. Als u het programma sluit en opnieuw opent, moet u de opdrachten opnieuw uitvoeren.
Voer de volgende opdracht uit en geef de gebruikersnaam en het wachtwoord op waarmee u zich aanmeldt bij Azure Portal:
Connect-AzAccount
Voer de volgende opdracht uit om alle abonnementen voor dit account weer te geven:
Get-AzSubscription
Voer de volgende opdracht uit om het abonnement te selecteren waarmee u wilt werken. Vervang SubscriptionId door de id van uw Azure-abonnement:
Select-AzSubscription -SubscriptionId "<SubscriptionId>"
Voer de cmdlet Set-AzDataFactoryV2 uit om een data factory te maken. Vervang voordat u de opdracht uitvoert de tijdelijke aanduidingen door uw eigen waarden.
$resourceGroupName = "<your resource group to create the factory>" $dataFactoryName = "<specify the name of data factory to create. It must be globally unique.>" Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location "East US" -Name $dataFactoryName
Let op de volgende punten:
De naam van de Azure-gegevensfactory moet wereldwijd uniek zijn. Als de volgende fout zich voordoet, wijzigt u de naam en probeert u het opnieuw.
The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
Als u Data Factory-exemplaren wilt maken, moet u bijdrager of beheerder zijn van het Azure-abonnement.
Voor een lijst met Azure-regio’s waarin Data Factory momenteel beschikbaar is, selecteert u op de volgende pagina de regio’s waarin u geïnteresseerd bent, vouwt u vervolgens Analytics uit en gaat u naar Data Factory: Beschikbare producten per regio. De gegevensopslagexemplaren (Azure Storage, Azure SQL Database, enzovoort) en berekeningen (HDInsight, enzovoort) die worden gebruikt in Data Factory, kunnen zich in andere regio's bevinden.
Gekoppelde services maken
In deze zelfstudie maakt u drie gekoppelde services maken voor respectievelijk de bron-, sink- en faseringsblob, met verbindingen met uw gegevensopslag:
Maak de gekoppelde Azure SQL Database-bronservice
Maak een JSON-bestand met de naam AzureSqlDatabaseLinkedService.json in de map C:\ADFv2TutorialBulkCopy met de volgende inhoud (maak de map ADFv2TutorialBulkCopy als deze nog niet bestaat):
Belangrijk
Vervang <servernaam, <databasenaam>>, <gebruikersnaam>@<servernaam> en <wachtwoord> door waarden van uw Azure SQL Database voordat u het bestand opslaat.
{ "name": "AzureSqlDatabaseLinkedService", "properties": { "type": "AzureSqlDatabase", "typeProperties": { "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" } } }
Schakel in Azure PowerShell over naar de map ADFv2TutorialBulkCopy.
Voer de cmdlet Set-AzDataFactoryV2LinkedService uit om de gekoppelde service te maken: AzureSqlDatabaseLinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseLinkedService" -File ".\AzureSqlDatabaseLinkedService.json"
Hier volgt een voorbeeld van uitvoer:
LinkedServiceName : AzureSqlDatabaseLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDatabaseLinkedService
De gekoppelde service voor de sink Azure Synapse Analytics-service maken
Maak een JSON-bestand met de naam AzureSqlDWLinkedService.json in de map C:\ADFv2TutorialBulkCopy. Geef dit bestand de volgende inhoud:
Belangrijk
Vervang <servernaam, <databasenaam>>, <gebruikersnaam>@<servernaam> en <wachtwoord> door waarden van uw Azure SQL Database voordat u het bestand opslaat.
{ "name": "AzureSqlDWLinkedService", "properties": { "type": "AzureSqlDW", "typeProperties": { "connectionString": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30" } } }
Voer de cmdlet Set-AzDataFactoryV2LinkedService uit om de gekoppelde service te maken: AzureSqlDWLinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWLinkedService" -File ".\AzureSqlDWLinkedService.json"
Hier volgt een voorbeeld van uitvoer:
LinkedServiceName : AzureSqlDWLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDWLinkedService
De gekoppelde Azure Storage-faseringsservice maken
In deze zelfstudie gebruikt u Azure Blob-opslag als een tussentijds faseringsgebied voor het inschakelen van PolyBase voor betere kopieerprestaties.
Maak een JSON-bestand met de naam AzureStorageLinkedService.json in de map C:\ADFv2TutorialBulkCopy met de volgende inhoud:
Belangrijk
Vervang <accountName> en <accountKey> door de naam en sleutel van uw Azure Storage-account voordat u het bestand opslaat.
{ "name": "AzureStorageLinkedService", "properties": { "type": "AzureStorage", "typeProperties": { "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>" } } }
Voer de cmdlet Set-AzDataFactoryV2LinkedService uit om de gekoppelde service te maken: AzureStorageLinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ".\AzureStorageLinkedService.json"
Hier volgt een voorbeeld van uitvoer:
LinkedServiceName : AzureStorageLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureStorageLinkedService
Gegevenssets maken
In deze zelfstudie maakt u bron- en sinkgegevenssets, waarmee de locatie wordt opgegeven waar de gegevens zijn opgeslagen:
Een gegevensset maken voor bron SQL-Database
Maak een JSON-bestand met de naam AzureSqlDatabaseDataset.json in de map C:\ADFv2TutorialBulkCopy. Geef dit bestand de volgende inhoud. De 'tableName' is a dummy; u gebruikt later de SQL-query in de kopieeractiviteit om gegevens op te halen.
{ "name": "AzureSqlDatabaseDataset", "properties": { "type": "AzureSqlTable", "linkedServiceName": { "referenceName": "AzureSqlDatabaseLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": "dummy" } } }
Voer de cmdlet Set-AzDataFactoryV2Dataset uit om de gegevensset te maken: AzureSqlDatabaseDataset.
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseDataset" -File ".\AzureSqlDatabaseDataset.json"
Hier volgt een voorbeeld van uitvoer:
DatasetName : AzureSqlDatabaseDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset
Een gegevensset maken voor de sink Azure Synapse Analytics
Maak een JSON-bestand met de naam AzureSqlDWDataset.json in de map C:\ADFv2TutorialBulkCopy, met de volgende inhoud: De tableName' wordt ingesteld als een parameter; de kopieeractiviteit waarin naar deze gegevensset wordt verwezen, geeft later de werkelijke waarde door naar de gegevensset.
{ "name": "AzureSqlDWDataset", "properties": { "type": "AzureSqlDWTable", "linkedServiceName": { "referenceName": "AzureSqlDWLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": { "value": "@{dataset().DWTableName}", "type": "Expression" } }, "parameters":{ "DWTableName":{ "type":"String" } } } }
Voer de cmdlet Set-AzDataFactoryV2Dataset uit om de gegevensset te maken: AzureSqlDWDataset.
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWDataset" -File ".\AzureSqlDWDataset.json"
Hier volgt een voorbeeld van uitvoer:
DatasetName : AzureSqlDWDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDwTableDataset
Pijplijnen maken
In deze zelfstudie maakt u twee pijplijnen:
De pijplijn 'IterateAndCopySQLTables' maken
In deze pijplijn wordt een lijst met tabellen gebruikt als parameter. Voor elke tabel in de lijst worden gegevens uit de tabel in Azure SQL Database naar Azure Synapse Analytics gekopieerd met behulp van gefaseerd kopiëren en PolyBase.
Maak een JSON-bestand met de naam IterateAndCopySQLTables.json in de map C:\ADFv2TutorialBulkCopy. Geef dit bestand de volgende inhoud:
{ "name": "IterateAndCopySQLTables", "properties": { "activities": [ { "name": "IterateSQLTables", "type": "ForEach", "typeProperties": { "isSequential": "false", "items": { "value": "@pipeline().parameters.tableList", "type": "Expression" }, "activities": [ { "name": "CopyData", "description": "Copy data from Azure SQL Database to Azure Synapse Analytics", "type": "Copy", "inputs": [ { "referenceName": "AzureSqlDatabaseDataset", "type": "DatasetReference" } ], "outputs": [ { "referenceName": "AzureSqlDWDataset", "type": "DatasetReference", "parameters": { "DWTableName": "[@{item().TABLE_SCHEMA}].[@{item().TABLE_NAME}]" } } ], "typeProperties": { "source": { "type": "SqlSource", "sqlReaderQuery": "SELECT * FROM [@{item().TABLE_SCHEMA}].[@{item().TABLE_NAME}]" }, "sink": { "type": "SqlDWSink", "preCopyScript": "TRUNCATE TABLE [@{item().TABLE_SCHEMA}].[@{item().TABLE_NAME}]", "allowPolyBase": true }, "enableStaging": true, "stagingSettings": { "linkedServiceName": { "referenceName": "AzureStorageLinkedService", "type": "LinkedServiceReference" } } } } ] } } ], "parameters": { "tableList": { "type": "Object" } } } }
Voer de cmdlet Set-AzDataFactoryV2Pipeline uit om de pijplijn te maken: IterateAndCopySQLTables.
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "IterateAndCopySQLTables" -File ".\IterateAndCopySQLTables.json"
Hier volgt een voorbeeld van uitvoer:
PipelineName : IterateAndCopySQLTables ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {IterateSQLTables} Parameters : {[tableList, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
De pijplijn 'GetTableListAndTriggerCopyData' maken
Deze pijplijn voert twee stappen uit:
- Zoekt de systeemtabel van Azure SQL Database op om de lijst met te kopiëren tabellen op te halen.
- Activeert de pijplijn 'IterateAndCopySQLTables' om het kopiëren van de gegevens daadwerkelijk uit te voeren.
Maak een JSON-bestand met de naam GetTableListAndTriggerCopyData.json in de map C:\ADFv2TutorialBulkCopy. Geef dit bestand de volgende inhoud:
{ "name":"GetTableListAndTriggerCopyData", "properties":{ "activities":[ { "name": "LookupTableList", "description": "Retrieve the table list from Azure SQL database", "type": "Lookup", "typeProperties": { "source": { "type": "SqlSource", "sqlReaderQuery": "SELECT TABLE_SCHEMA, TABLE_NAME FROM information_schema.TABLES WHERE TABLE_TYPE = 'BASE TABLE' and TABLE_SCHEMA = 'SalesLT' and TABLE_NAME <> 'ProductModel'" }, "dataset": { "referenceName": "AzureSqlDatabaseDataset", "type": "DatasetReference" }, "firstRowOnly": false } }, { "name": "TriggerCopy", "type": "ExecutePipeline", "typeProperties": { "parameters": { "tableList": { "value": "@activity('LookupTableList').output.value", "type": "Expression" } }, "pipeline": { "referenceName": "IterateAndCopySQLTables", "type": "PipelineReference" }, "waitOnCompletion": true }, "dependsOn": [ { "activity": "LookupTableList", "dependencyConditions": [ "Succeeded" ] } ] } ] } }
Voer de cmdlet Set-AzDataFactoryV2Pipeline uit om de pijplijn te maken: GetTableListAndTriggerCopyData.
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "GetTableListAndTriggerCopyData" -File ".\GetTableListAndTriggerCopyData.json"
Hier volgt een voorbeeld van uitvoer:
PipelineName : GetTableListAndTriggerCopyData ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {LookupTableList, TriggerCopy} Parameters :
Pijplijnuitvoering starten en controleren
Start een pijplijnuitvoering voor de pijplijn GetTableListAndTriggerCopyData en leg de id voor de pijplijnuitvoering vast voor toekomstige controle. Onder wordt het uitvoeren van de pijplijn 'IterateAndCopySQLTables' geactiveerd zoals opgegeven in de activiteit ExecutePipeline.
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName 'GetTableListAndTriggerCopyData'
Voer het volgende script uit om continu de uitvoeringsstatus van de pijplijn GetTableListAndTriggerCopyData te controleren, en druk het eindresultaat van de pijplijnuitvoering en de uitvoering van de activiteit af.
while ($True) { $run = Get-AzDataFactoryV2PipelineRun -ResourceGroupName $resourceGroupName -DataFactoryName $DataFactoryName -PipelineRunId $runId if ($run) { if ($run.Status -ne 'InProgress') { Write-Host "Pipeline run finished. The status is: " $run.Status -ForegroundColor "Yellow" Write-Host "Pipeline run details:" -ForegroundColor "Yellow" $run break } Write-Host "Pipeline is running...status: InProgress" -ForegroundColor "Yellow" } Start-Sleep -Seconds 15 } $result = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $runId -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30) Write-Host "Activity run details:" -ForegroundColor "Yellow" $result
Hier volgt een voorbeeld van de voorbeelduitvoering:
Pipeline run details: ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> RunId : 0000000000-00000-0000-0000-000000000000 PipelineName : GetTableListAndTriggerCopyData LastUpdated : 9/18/2017 4:08:15 PM Parameters : {} RunStart : 9/18/2017 4:06:44 PM RunEnd : 9/18/2017 4:08:15 PM DurationInMs : 90637 Status : Succeeded Message : Activity run details: ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> ActivityName : LookupTableList PipelineRunId : 0000000000-00000-0000-0000-000000000000 PipelineName : GetTableListAndTriggerCopyData Input : {source, dataset, firstRowOnly} Output : {count, value, effectiveIntegrationRuntime} LinkedServiceName : ActivityRunStart : 9/18/2017 4:06:46 PM ActivityRunEnd : 9/18/2017 4:07:09 PM DurationInMs : 22995 Status : Succeeded Error : {errorCode, message, failureType, target} ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> ActivityName : TriggerCopy PipelineRunId : 0000000000-00000-0000-0000-000000000000 PipelineName : GetTableListAndTriggerCopyData Input : {pipeline, parameters, waitOnCompletion} Output : {pipelineRunId} LinkedServiceName : ActivityRunStart : 9/18/2017 4:07:11 PM ActivityRunEnd : 9/18/2017 4:08:14 PM DurationInMs : 62581 Status : Succeeded Error : {errorCode, message, failureType, target}
U kunt de run-id van de pijplijn 'IterateAndCopySQLTables' ophalen en vervolgens het gedetailleerde uitvoeringsresultaat van de activiteit controleren.
Write-Host "Pipeline 'IterateAndCopySQLTables' run result:" -ForegroundColor "Yellow" ($result | Where-Object {$_.ActivityName -eq "TriggerCopy"}).Output.ToString()
Hier volgt een voorbeeld van de voorbeelduitvoering:
{ "pipelineRunId": "7514d165-14bf-41fb-b5fb-789bea6c9e58" }
$result2 = Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId <copy above run ID> -RunStartedAfter (Get-Date).AddMinutes(-30) -RunStartedBefore (Get-Date).AddMinutes(30) $result2
Maak verbinding met de sink Azure Synapse Analytics en bevestig dat de gegevens juist zijn gekopieerd vanuit Azure SQL Database.
Gerelateerde inhoud
In deze zelfstudie hebt u de volgende stappen uitgevoerd:
- Een data factory maken.
- Gekoppelde services maken voor Azure SQL Database, Azure Synapse Analytics en Azure Storage.
- Gegevenssets maken voor Azure SQL Database en Azure Synapse Analytics.
- Een pijplijn maken om de te kopiëren tabellen op te zoeken en een andere pijplijn om de kopieerbewerking daadwerkelijk uit te voeren.
- Een pijplijnuitvoering starten.
- De uitvoering van de pijplijn en van de activiteit controleren.
Ga door naar de volgende zelfstudie voor informatie over het incrementeel kopiëren van gegevens uit een bron naar een bestemming: