Zbiorcze kopiowanie wielu tabel przy użyciu usługi Azure Data Factory przy użyciu programu PowerShell
DOTYCZY: Azure Data Factory Azure Synapse Analytics
Napiwek
Wypróbuj usługę Data Factory w usłudze Microsoft Fabric — rozwiązanie analityczne typu all-in-one dla przedsiębiorstw. Usługa Microsoft Fabric obejmuje wszystko, od przenoszenia danych do nauki o danych, analizy w czasie rzeczywistym, analizy biznesowej i raportowania. Dowiedz się, jak bezpłatnie rozpocząć nową wersję próbną !
W tym samouczku pokazano kopiowanie wielu tabel z usługi Azure SQL Database do usługi Azure Synapse Analytics. Tego samego wzorca można użyć także w innych scenariuszach kopiowania. Na przykład kopiowanie tabel z programu SQL Server/Oracle do usługi Azure SQL Database/Data Warehouse/Azure Blob, kopiowanie różnych ścieżek z obiektów blob do tabeli bazy danych Azure SQL Database.
Na poziomie ogólnym ten samouczek obejmuje następujące kroki:
- Tworzenie fabryki danych.
- Tworzenie połączonych usług Azure SQL Database, Azure Synapse Analytics i Azure Storage.
- Tworzenie zestawów danych usługi Azure SQL Database i Azure Synapse Analytics.
- Tworzenie potoku w celu wyszukania tabel do skopiowania i innego potoku w celu wykonania samej operacji kopiowania.
- Uruchom potok.
- Monitorowanie uruchomień potoku i działań.
W tym samouczku jest używany program Azure PowerShell. Aby dowiedzieć się więcej o zastosowaniu innych narzędzi/zestawów SDK do tworzenia fabryki danych, zapoznaj się z przewodnikami Szybki start.
Kompletny przepływ pracy
W tym scenariuszu mamy kilka tabel w usłudze Azure SQL Database, które chcemy skopiować do usługi Azure Synapse Analytics. Oto sekwencja logiczna kroków przepływu pracy, który następuje w potokach:
- Pierwszy potok wyszukuje listę tabel, które należy skopiować do magazynów danych ujścia. Alternatywnie można utrzymywać tabelę metadanych, która zawiera listę wszystkich tabel do skopiowania do magazynu danych ujścia. Następnie potok wywołuje inny potok, który działa na wszystkich tabelach w bazie danych i wykonuje operację kopiowania danych.
- Drugi potok przeprowadza rzeczywiste kopiowanie. Pobiera listę tabel jako parametr. Dla każdej tabeli na liście skopiuj określoną tabelę w usłudze Azure SQL Database do odpowiedniej tabeli w usłudze Azure Synapse Analytics przy użyciu kopii etapowej za pośrednictwem usługi Blob Storage i technologii PolyBase , aby uzyskać najlepszą wydajność. W tym przykładzie pierwszy potok przekazuje listę tabel jako wartość parametru.
Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.
Wymagania wstępne
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.
- Azure PowerShell. Wykonaj instrukcje podane w temacie Instalowanie i konfigurowanie programu Azure PowerShell.
- Konto usługi Azure Storage. Konto usługi Azure Storage jest używane jako przejściowy magazyn obiektów blob w operacji kopiowania zbiorczego.
- Usługa Azure SQL Database. Ta baza danych zawiera dane źródłowe.
- Azure Synapse Analytics. Ten magazyn danych służy do przechowywania danych skopiowanych z bazy SQL Database.
Przygotowywanie usługi SQL Database i Azure Synapse Analytics
Przygotowywanie źródłowej bazy Azure SQL Database:
Utwórz bazę danych z przykładowymi danymi Adventure Works LT w usłudze SQL Database, postępując zgodnie z artykułem Tworzenie bazy danych w usłudze Azure SQL Database . Ten samouczek kopiuje wszystkie tabele z tej przykładowej bazy danych do usługi Azure Synapse Analytics.
Przygotowywanie ujścia usługi Azure Synapse Analytics:
Jeśli nie masz obszaru roboczego usługi Azure Synapse Analytics, zobacz artykuł Rozpoczynanie pracy z usługą Azure Synapse Analytics , aby uzyskać instrukcje tworzenia.
Utwórz odpowiednie schematy tabel w usłudze Azure Synapse Analytics. Usługa Azure Data Factory służy do migrowania/kopiowania danych na późniejszym etapie.
Usługi platformy Azure umożliwiające dostęp do serwera SQL
W przypadku usług SQL Database i Azure Synapse Analytics zezwól usługom platformy Azure na dostęp do serwera SQL. Upewnij się, że ustawienie Zezwalaj na dostęp do usług platformy Azure jest włączone dla serwera. To ustawienie umożliwia usłudze Data Factory odczytywanie danych z usługi Azure SQL Database i zapisywanie danych w usłudze Azure Synapse Analytics. W celu sprawdzenia i włączenia tego ustawienia wykonaj następujące kroki:
- Kliknij pozycję Wszystkie usługi po lewej stronie, a następnie kliknij pozycję Serwery SQL.
- Wybierz swój serwer, a następnie kliknij przycisk Zapora w obszarze USTAWIENIA.
- Na stronie Ustawienia zapory kliknij pozycję WŁĄCZ dla ustawienia Zezwalaj na dostęp do usług platformy Azure.
Tworzenie fabryki danych
Uruchom program PowerShell. Nie zamykaj programu Azure PowerShell, zanim nie wykonasz wszystkich instrukcji z tego samouczka. Jeśli go zamkniesz i otworzysz ponownie, musisz uruchomić te polecenia jeszcze raz.
Uruchom poniższe polecenie i wprowadź nazwę użytkownika oraz hasło, których używasz do logowania się w witrynie Azure Portal:
Connect-AzAccount
Uruchom poniższe polecenie, aby wyświetlić wszystkie subskrypcje dla tego konta:
Get-AzSubscription
Uruchom poniższe polecenie, aby wybrać subskrypcję, z którą chcesz pracować. Zastąp parametr SubscriptionId identyfikatorem Twojej subskrypcji platformy Azure:
Select-AzSubscription -SubscriptionId "<SubscriptionId>"
Uruchom polecenie cmdlet Set-AzDataFactoryV2, aby utworzyć fabrykę danych. Przed uruchomieniem polecenia zastąp symbole zastępcze własnymi wartościami.
$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
Należy uwzględnić następujące informacje:
Nazwa fabryki danych platformy Azure musi być globalnie unikatowa. Jeśli zostanie wyświetlony następujący błąd, zmień nazwę i spróbuj ponownie.
The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
Aby tworzyć wystąpienia usługi Data Factory, musisz być współautorem lub administratorem subskrypcji platformy Azure.
Aby uzyskać listę regionów platformy Azure, w których obecnie jest dostępna usługa Data Factory, wybierz dane regiony na poniższej stronie, a następnie rozwiń węzeł Analiza, aby zlokalizować pozycję Data Factory: Produkty dostępne według regionu. Magazyny danych (Azure Storage, Azure SQL Database itp.) i jednostki obliczeniowe (HDInsight itp.) używane przez fabrykę danych mogą mieścić się w innych regionach.
Tworzenie połączonych usług
W tym samouczku utworzysz trzy połączone usługi dla źródłowego, ujściowego i przejściowego magazynu obiektów blob, co obejmuje połączenia z magazynami danych:
Tworzenie źródłowej połączonej usługi Azure SQL Database
Utwórz plik JSON o nazwie AzureSQLDatabaseLinkedService.json w folderze C:\ADFv2TutorialBulkCopy o następującej zawartości: (utwórz folder ADFv2TutorialBulkCopy, jeśli jeszcze nie istnieje).
Ważne
Przed zapisaniem pliku zastąp ciąg <servername>, <databasename>, <username>@<servername> i <password> wartościami usługi Azure SQL Database.
{ "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" } } }
W programie Azure PowerShell przejdź do folderu ADFv2TutorialBulkCopy.
Uruchom polecenie cmdlet Set-AzDataFactoryV2LinkedService, aby utworzyć połączoną usługę: AzureSqlDatabaseLinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseLinkedService" -File ".\AzureSqlDatabaseLinkedService.json"
Oto przykładowe dane wyjściowe:
LinkedServiceName : AzureSqlDatabaseLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDatabaseLinkedService
Tworzenie połączonej usługi Azure Synapse Analytics ujścia
W folderze C:\ADFv2TutorialBulkCopy utwórz plik JSON o nazwie AzureSqlDWLinkedService.json z następującą zawartością:
Ważne
Przed zapisaniem pliku zastąp ciąg <servername>, <databasename>, <username>@<servername> i <password> wartościami usługi Azure SQL Database.
{ "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" } } }
Aby utworzyć połączoną usługę: AzureSqlDWLinkedService, uruchom polecenie cmdlet Set-AzDataFactoryV2LinkedService .
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWLinkedService" -File ".\AzureSqlDWLinkedService.json"
Oto przykładowe dane wyjściowe:
LinkedServiceName : AzureSqlDWLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDWLinkedService
Tworzenie przejściowej połączonej usługi Azure Storage
W tym samouczku magazyn obiektów blob platformy Azure służy jako obszar przejściowy, pozwalający na włączenie programu PolyBase w celu podniesienia wydajności kopiowania.
W folderze C:\ADFv2TutorialBulkCopy utwórz plik JSON o nazwie AzureStorageLinkedService.json z następującą zawartością:
Ważne
Przed zapisaniem pliku zastąp wartości <accountName> i <accountKey> nazwą i kluczem konta usługi Azure Storage.
{ "name": "AzureStorageLinkedService", "properties": { "type": "AzureStorage", "typeProperties": { "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>" } } }
Aby utworzyć połączoną usługę: AzureStorageLinkedService, uruchom polecenie cmdlet Set-AzDataFactoryV2LinkedService .
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ".\AzureStorageLinkedService.json"
Oto przykładowe dane wyjściowe:
LinkedServiceName : AzureStorageLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureStorageLinkedService
Tworzenie zestawów danych
W tym samouczku utworzysz zestawy danych źródła i ujścia, określające lokalizację przechowywania danych:
Tworzenie zestawu danych źródłowej bazy danych SQL Database
W folderze C:\ADFv2TutorialBulkCopy utwórz plik JSON o nazwie AzureSqlDatabaseDataset.json z następującą zawartością. Nazwa „tableName” to nazwa tymczasowa, ponieważ w późniejszym czasie do pobierania danych używane jest zapytanie SQL w działaniu kopiowania.
{ "name": "AzureSqlDatabaseDataset", "properties": { "type": "AzureSqlTable", "linkedServiceName": { "referenceName": "AzureSqlDatabaseLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": "dummy" } } }
Aby utworzyć zestaw danych: AzureSqlDatabaseDataset, uruchom polecenie cmdlet Set-AzDataFactoryV2Dataset .
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseDataset" -File ".\AzureSqlDatabaseDataset.json"
Oto przykładowe dane wyjściowe:
DatasetName : AzureSqlDatabaseDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset
Tworzenie zestawu danych dla ujścia usługi Azure Synapse Analytics
Utwórz plik JSON o nazwie AzureSqlDWDataset.json w folderze C:\ADFv2TutorialBulkCopy, z następującą zawartością: „tableName” ustawione jako parametr, następnie działanie kopiowania odwołujące się do tego zestawu danych przekazuje rzeczywistą wartość do zestawu danych.
{ "name": "AzureSqlDWDataset", "properties": { "type": "AzureSqlDWTable", "linkedServiceName": { "referenceName": "AzureSqlDWLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": { "value": "@{dataset().DWTableName}", "type": "Expression" } }, "parameters":{ "DWTableName":{ "type":"String" } } } }
Aby utworzyć zestaw danych: AzureSqlDWDataset, uruchom polecenie cmdlet Set-AzDataFactoryV2Dataset .
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWDataset" -File ".\AzureSqlDWDataset.json"
Oto przykładowe dane wyjściowe:
DatasetName : AzureSqlDWDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDwTableDataset
Tworzenie potoków
W tym samouczku utworzysz dwa potoki:
Tworzenie potoku „IterateAndCopySQLTables”
Ten potok pobiera listę tabel jako parametr. Dla każdej tabeli na liście kopiuje dane z tabeli w usłudze Azure SQL Database do usługi Azure Synapse Analytics przy użyciu kopiowania etapowego i technologii PolyBase.
W folderze C:\ADFv2TutorialBulkCopy utwórz plik JSON o nazwie IterateAndCopySQLTables.json z następującą zawartością:
{ "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" } } } }
Aby utworzyć potok: IterateAndCopySQLTables, uruchom polecenie cmdlet Set-AzDataFactoryV2Pipeline .
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "IterateAndCopySQLTables" -File ".\IterateAndCopySQLTables.json"
Oto przykładowe dane wyjściowe:
PipelineName : IterateAndCopySQLTables ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {IterateSQLTables} Parameters : {[tableList, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
Tworzenie potoku „GetTableListAndTriggerCopyData”
Ten potok wykonuje dwie czynności:
- Wyszukuje tabelę systemową bazy Azure SQL Database w celu pobrania listy tabel do skopiowania.
- Wyzwala potok „IterateAndCopySQLTables”, który przeprowadza rzeczywiste kopiowanie danych.
W folderze C:\ADFv2TutorialBulkCopy utwórz plik JSON o nazwie GetTableListAndTriggerCopyData.json z następującą zawartością:
{ "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" ] } ] } ] } }
Aby utworzyć potok: GetTableListAndTriggerCopyData, uruchom polecenie cmdlet Set-AzDataFactoryV2Pipeline .
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "GetTableListAndTriggerCopyData" -File ".\GetTableListAndTriggerCopyData.json"
Oto przykładowe dane wyjściowe:
PipelineName : GetTableListAndTriggerCopyData ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {LookupTableList, TriggerCopy} Parameters :
Uruchamianie i monitorowanie działania potoku
Uruchom działanie potoku dla głównego potoku „GetTableListAndTriggerCopyData” i zarejestruj identyfikator uruchomienia potoku do przyszłego monitorowania. Potok dodatkowo uruchamia potok „IterateAndCopySQLTables” zgodnie z definicją w działaniu ExecutePipeline.
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName 'GetTableListAndTriggerCopyData'
Uruchom następujący skrypt, aby stale sprawdzać stan uruchomienia potoku GetTableListAndTriggerCopyData oraz wydrukować ostateczny wynik uruchomienia potoku i działania.
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
Oto dane wyjściowe przykładowego przebiegu:
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}
Możesz uzyskać identyfikator uruchomienia potoku „IterateAndCopySQLTables” i sprawdzić szczegółowe wyniki uruchomienia działania zgodnie z poniższymi instrukcjami.
Write-Host "Pipeline 'IterateAndCopySQLTables' run result:" -ForegroundColor "Yellow" ($result | Where-Object {$_.ActivityName -eq "TriggerCopy"}).Output.ToString()
Oto dane wyjściowe przykładowego przebiegu:
{ "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
Połącz się z ujściem usługi Azure Synapse Analytics i upewnij się, że dane zostały prawidłowo skopiowane z usługi Azure SQL Database.
Powiązana zawartość
W ramach tego samouczka wykonano następujące procedury:
- Tworzenie fabryki danych.
- Tworzenie połączonych usług Azure SQL Database, Azure Synapse Analytics i Azure Storage.
- Tworzenie zestawów danych usługi Azure SQL Database i Azure Synapse Analytics.
- Tworzenie potoku w celu wyszukania tabel do skopiowania i innego potoku w celu wykonania samej operacji kopiowania.
- Uruchom potok.
- Monitorowanie uruchomień potoku i działań.
Przejdź do poniższego samouczka, aby dowiedzieć się, jak przyrostowo kopiować dane z lokalizacji źródłowej do docelowej: