Több tábla tömeges másolása az Azure Data Factory használatával a PowerShell használatával
A következőkre vonatkozik: Azure Data Factory
Azure Synapse Analytics
Tipp.
Próbálja ki a Data Factoryt a Microsoft Fabricben, amely egy teljes körű elemzési megoldás a nagyvállalatok számára. A Microsoft Fabric az adattovábbítástól az adatelemzésig, a valós idejű elemzésig, az üzleti intelligenciáig és a jelentéskészítésig mindent lefed. Ismerje meg, hogyan indíthat új próbaverziót ingyenesen!
Ez az oktatóanyag bemutatja , hogy több táblát másol az Azure SQL Database-ből az Azure Synapse Analyticsbe. A minta egyéb másolási forgatókönyvek esetén is alkalmazható. Például táblák másolására az SQL Serverről/Oracle-ből az Azure SQL Database-be/Data Warehouse-ba/Azure Blobba, vagy különböző elérési utak másolására a Blobból Azure SQL Database-táblákba.
Az oktatóanyag a következő főbb lépésekből áll:
- Adat-előállító létrehozása
- Azure SQL Database, Azure Synapse Analytics és Azure Storage társított szolgáltatások létrehozása.
- Azure SQL Database- és Azure Synapse Analytics-adatkészletek létrehozása.
- Egy folyamat létrehozása a másolni kívánt táblák megkeresésére, és egy másik folyamat létrehozása a tényleges másolási művelet elvégzésére
- Folyamat futásának indítása
- A folyamat és a tevékenységek futásának monitorozása
Az oktatóanyag az Azure PowerShellt használja. Az adat-előállítók egyéb eszközökkel/SDK-kkal való létrehozásával kapcsolatban lásd rövid útmutatóinkat.
Teljes körű munkafolyamat
Ebben a forgatókönyvben az Azure SQL Database-ben számos táblát szeretnénk másolni az Azure Synapse Analyticsbe. A következők a folyamatokban végbemenő munkafolyamat lépései logikai sorrendben:
- Az első folyamat megkeresi azoknak a tábláknak a listáját, amelyeket át kell másolni a fogadó adattárakba. Másik megoldásként fenntarthat egy metaadattáblát, amely felsorolja az összes, a fogadó adattárba másolandó táblát. A folyamat ezután elindít egy másik folyamatot, amely végigiterál az adatbázis összes tábláján, és elvégzi az adatmásolási műveletet.
- A második folyamat hajtja végre a tényleges másolást. A táblák listáját használja paraméterként. A lista minden táblája esetében másolja az Azure SQL Database adott táblát a megfelelő táblába az Azure Synapse Analyticsben a Blob Storage és a PolyBase szakaszos másolásával a legjobb teljesítmény érdekében. Ebben a példában az első folyamat a táblák listáját adja át a paraméter értékeként.
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Előfeltételek
Feljegyzés
Javasoljuk, hogy az Azure Az PowerShell modult használja az Azure-ral való interakcióhoz. Az első lépésekhez tekintse meg Az Azure PowerShell telepítése témakört. Az Az PowerShell-modulra történő migrálás részleteiről lásd: Az Azure PowerShell migrálása az AzureRM modulból az Az modulba.
- Azure PowerShell. Kövesse az Azure PowerShell telepítését és konfigurálását ismertető cikkben szereplő utasításokat.
- Egy Azure Storage-fiók. Az Azure Storage-fiók a tömeges másolási műveletben átmeneti blobtárolóként működik.
- Azure SQL Database Ez az adatbázis tartalmazza a forrásadatokat.
- Azure Synapse Analytics. Ez az adattárház tárolja az SQL Database-ből átmásolt adatokat.
Az SQL Database és az Azure Synapse Analytics előkészítése
A forrás Azure SQL Database előkészítése:
Adatbázis létrehozása az Adventure Works LT-mintaadatokkal az SQL Database-ben az Adatbázis létrehozása az Azure SQL Database-ben című cikk alapján. Ez az oktatóanyag az összes táblát átmásolja ebből a mintaadatbázisból az Azure Synapse Analyticsbe.
A fogadó Azure Synapse Analytics előkészítése:
Ha nem rendelkezik Azure Synapse Analytics-munkaterülettel, a létrehozás lépéseit az Azure Synapse Analytics használatának első lépéseit ismertető cikkben találja.
Hozzon létre megfelelő táblázatsémákat az Azure Synapse Analyticsben. A későbbiekben az Azure Data Factory segítségével fogja áttelepíteni/másolni az adatokat.
Az SQL Server elérésének engedélyezése az Azure-szolgáltatások számára
Az SQL Database és az Azure Synapse Analytics esetében is engedélyezze az Azure-szolgáltatások számára az SQL Server elérését. Győződjön meg arról, hogy az Azure-szolgáltatásokhoz való hozzáférés engedélyezése beállítás be van kapcsolva a kiszolgálóhoz. Ezzel a beállítással a Data Factory szolgáltatás adatokat olvashat az Azure SQL Database-ből, és adatokat írhat az Azure Synapse Analyticsbe. A beállítás ellenőrzéséhez és bekapcsolásához hajtsa végre a következő lépéseket:
- Kattintson a Minden szolgáltatás elemre a bal oldalon, majd az SQL-kiszolgálók elemre.
- Válassza ki a kiszolgálót, és kattintson a BEÁLLÍTÁSOK területen a Tűzfal elemre.
- A Tűzfalbeállítások lapon kattintson a BE kapcsolóra az Azure-szolgáltatások hozzáférésének engedélyezése beállítás mellett.
Adat-előállító létrehozása
Indítsa el a PowerShellt. Az Azure PowerShellt hagyja megnyitva az oktatóanyag végéig. Ha bezárja és újra megnyitja a programot, akkor újra le kell futtatnia a parancsokat.
Futtassa a következő parancsot, és adja meg az Azure Portalra való bejelentkezéshez használt felhasználónevet és jelszót.
Connect-AzAccount
Futtassa a következő parancsot a fiókhoz tartozó előfizetések megtekintéséhez.
Get-AzSubscription
Futtassa a következő parancsot a használni kívánt előfizetés kiválasztásához. Cserélje le a SubscriptionId kifejezést az Azure-előfizetés azonosítójára:
Select-AzSubscription -SubscriptionId "<SubscriptionId>"
Futtassa a Set-AzDataFactoryV2 parancsmagot egy adat-előállító létrehozásához. A parancs végrehajtása előtt cserélje le a helyőrzőket a saját értékeire.
$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
Vegye figyelembe az alábbiakat:
Az Azure data factory nevének globálisan egyedinek kell lennie. Ha a következő hibaüzenetet kapja, módosítsa a nevet, majd próbálkozzon újra.
The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
Data Factory-példányok létrehozásához az Azure-előfizetés közreműködőjének vagy rendszergazdájának kell lennie.
Azon Azure-régiók megtekintéséhez, amelyekben jelenleg elérhető a Data Factory, a következő lapon válassza ki az Önt érdeklő régiókat, majd bontsa ki az Elemzés részt, és keresse meg a Data Factory: Elérhető termékek régiók szerint szakaszt. Az adat-előállítók által használt adattárak (Azure Storage, Azure SQL Database stb.) és számítási erőforrások (HDInsight stb.) más régiókban is lehetnek.
Társított szolgáltatások létrehozása
Ebben az oktatóanyagban létrehoz három társított szolgáltatást a forrás, a fogadó és az átmeneti blobhoz, beleértve az adattárakkal való kapcsolatot:
A forrás Azure SQL Database-beli társított szolgáltatás létrehozása
Hozzon létre egy AzureSqlDatabaseLinkedService.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal: (Ha még nem létezik, hozza létre az ADFv2TutorialBulkCopy nevű mappát.)
Fontos
A fájl mentése előtt cserélje le <a kiszolgálónevet>, <az adatbázisnevet>, <a felhasználónév>@<kiszolgálónevet> és <a jelszót> az Azure SQL Database értékeire.
{ "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" } } }
Az Azure PowerShellben váltson az ADFv2TutorialBulkCopy mappára.
Futtassa a Set-AzDataFactoryV2LinkedService parancsmagot a társított szolgáltatás létrehozásához: AzureSqlDatabaseLinkedService.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseLinkedService" -File ".\AzureSqlDatabaseLinkedService.json"
Itt látható a minta kimenete:
LinkedServiceName : AzureSqlDatabaseLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDatabaseLinkedService
A fogadó Azure Synapse Analytics társított szolgáltatásának létrehozása
Hozzon létre egy AzureSqlDWLinkedService.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal:
Fontos
A fájl mentése előtt cserélje le <a kiszolgálónevet>, <az adatbázisnevet>, <a felhasználónév>@<kiszolgálónevet> és <a jelszót> az Azure SQL Database értékeire.
{ "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" } } }
Az AzureSqlDWLinkedService társított szolgáltatás létrehozásához futtassa a Set-AzDataFactoryV2LinkedService parancsmagot.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWLinkedService" -File ".\AzureSqlDWLinkedService.json"
Itt látható a minta kimenete:
LinkedServiceName : AzureSqlDWLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDWLinkedService
Az átmeneti Azure Storage-beli társított szolgáltatás létrehozása
Ebben az oktatóanyagban a jobb másolási teljesítmény érdekében az Azure Blob Storage-ot átmeneti területként használja a PolyBase engedélyezéséhez.
Hozzon létre egy AzureStorageLinkedService.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal:
Fontos
A fájl mentése előtt az <accountName> és az <accountKey> kifejezést cserélje le az Azure Storage-fiók nevére és kulcsára.
{ "name": "AzureStorageLinkedService", "properties": { "type": "AzureStorage", "typeProperties": { "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>" } } }
Az AzureStorageLinkedService társított szolgáltatás létrehozásához futtassa a Set-AzDataFactoryV2LinkedService parancsmagot.
Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ".\AzureStorageLinkedService.json"
Itt látható a minta kimenete:
LinkedServiceName : AzureStorageLinkedService ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Properties : Microsoft.Azure.Management.DataFactory.Models.AzureStorageLinkedService
Adatkészletek létrehozása
Ebben az oktatóanyagban létrehozza a forrás és a fogadó adatkészletet, amelyek megadják az adatok tárolásának helyét:
Adatkészlet létrehozása a forrás SQL-adatbázishoz
Hozzon létre egy AzureSqlDatabaseDataset.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal. A „tableName” egy helyőrző, mivel később, a másolási tevékenység során az SQL-lekérdezést fogja használni az adatok lekéréséhez.
{ "name": "AzureSqlDatabaseDataset", "properties": { "type": "AzureSqlTable", "linkedServiceName": { "referenceName": "AzureSqlDatabaseLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": "dummy" } } }
Az adatkészlet létrehozásához futtassa a Set-AzDataFactoryV2Dataset parancsmagot az AzureSqlDatabaseDataset parancsmaggal.
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseDataset" -File ".\AzureSqlDatabaseDataset.json"
Itt látható a minta kimenete:
DatasetName : AzureSqlDatabaseDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset
Adatkészlet létrehozása a fogadó Azure Synapse Analyticshez
Hozzon létre egy AzureSqlDWDataset.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal: A „tableName” paraméterként van beállítva. A másolási tevékenység, amely erre az adatkészletre hivatkozik, később át fogja adni a tényleges értéket az adatkészletnek.
{ "name": "AzureSqlDWDataset", "properties": { "type": "AzureSqlDWTable", "linkedServiceName": { "referenceName": "AzureSqlDWLinkedService", "type": "LinkedServiceReference" }, "typeProperties": { "tableName": { "value": "@{dataset().DWTableName}", "type": "Expression" } }, "parameters":{ "DWTableName":{ "type":"String" } } } }
Az adatkészlet létrehozásához futtassa a Set-AzDataFactoryV2Dataset parancsmagot az AzureSqlDWDataset parancsmaggal.
Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWDataset" -File ".\AzureSqlDWDataset.json"
Itt látható a minta kimenete:
DatasetName : AzureSqlDWDataset ResourceGroupName : <resourceGroupname> DataFactoryName : <dataFactoryName> Structure : Properties : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDwTableDataset
Folyamatok létrehozása
Ebben az oktatóanyagban két folyamatot hoz létre:
Az „IterateAndCopySQLTables” folyamat létrehozása
Ez a folyamat a táblák listáját használja paraméterként. A listában szereplő összes tábla adatait az Azure SQL Database-ben lévő táblából az Azure Synapse Analyticsbe másolja a szakaszos másolás és a PolyBase használatával.
Hozzon létre egy IterateAndCopySQLTables.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal:
{ "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" } } } }
A folyamat létrehozásához: IterateAndCopySQLTables, futtassa a Set-AzDataFactoryV2Pipeline parancsmagot.
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "IterateAndCopySQLTables" -File ".\IterateAndCopySQLTables.json"
Itt látható a minta kimenete:
PipelineName : IterateAndCopySQLTables ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {IterateSQLTables} Parameters : {[tableList, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
A „GetTableListAndTriggerCopyData” folyamat létrehozása
Ez a folyamat két lépést hajt végre:
- Megkeresi az Azure SQL Database rendszertábláját, és lekéri a másolni kívánt táblák listáját.
- Elindítja az „IterateAndCopySQLTables” folyamatot, amely elvégezi a tényleges adatmásolást.
Hozzon létre egy GetTableListAndTriggerCopyData.json nevű JSON-fájlt a C:\ADFv2TutorialBulkCopy mappában a következő tartalommal:
{ "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" ] } ] } ] } }
A folyamat létrehozásához: GetTableListAndTriggerCopyData, futtassa a Set-AzDataFactoryV2Pipeline parancsmagot.
Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "GetTableListAndTriggerCopyData" -File ".\GetTableListAndTriggerCopyData.json"
Itt látható a minta kimenete:
PipelineName : GetTableListAndTriggerCopyData ResourceGroupName : <resourceGroupName> DataFactoryName : <dataFactoryName> Activities : {LookupTableList, TriggerCopy} Parameters :
Folyamat futásának indítása és monitorozása
Indítsa el a fő „GetTableListAndTriggerCopyData” folyamat futását, és őrizze meg a folyamat futtatási azonosítóját későbbi monitorozás céljából. Eközben az ExecutePipeline tevékenységben megadott módon elindítja az „IterateAndCopySQLTables” folyamat futását.
$runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName 'GetTableListAndTriggerCopyData'
Futtassa a következő szkriptet a GetTableListAndTriggerCopyData folyamat futási állapotának folyamatos ellenőrzéséhez, majd nyomtassa ki az utolsó folyamatfuttatás és tevékenységfuttatás eredményét.
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
Itt látható a példa futtatás kimenete:
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}
Az „IterateAndCopySQLTables” folyamat futtatási azonosítójának lekéréséhez és a tevékenységfuttatás részletes eredményének áttekintéséhez tegye a következőket.
Write-Host "Pipeline 'IterateAndCopySQLTables' run result:" -ForegroundColor "Yellow" ($result | Where-Object {$_.ActivityName -eq "TriggerCopy"}).Output.ToString()
Itt látható a példa futtatás kimenete:
{ "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
Csatlakozzon a fogadó Azure Synapse Analyticshez, és győződjön meg arról, hogy az adatok megfelelően lettek átmásolva az Azure SQL Database-ből.
Kapcsolódó tartalom
Az oktatóanyagban az alábbi lépéseket hajtotta végre:
- Adat-előállító létrehozása
- Azure SQL Database, Azure Synapse Analytics és Azure Storage társított szolgáltatások létrehozása.
- Azure SQL Database- és Azure Synapse Analytics-adatkészletek létrehozása.
- Egy folyamat létrehozása a másolni kívánt táblák megkeresésére, és egy másik folyamat létrehozása a tényleges másolási művelet elvégzésére
- Folyamat futásának indítása
- A folyamat és a tevékenységek futásának monitorozása
Folytassa a következő oktatóanyaggal, amelyben az adatok egy forrásból egy célhelyre történő fokozatos másolását ismerheti meg: