Kopiera flera tabeller i grupp med hjälp av Azure Data Factory med hjälp av PowerShell

GÄLLER FÖR: Azure Data Factory Azure Synapse Analytics

Tips

Data Factory i Microsoft Fabric är nästa generations Azure Data Factory, med en enklare arkitektur, inbyggd AI och nya funktioner. Om dataintegrering är nytt för dig börjar du med Fabric Data Factory. Befintliga ADF-arbetsbelastningar kan uppgraderas till Fabric för att få åtkomst till nya funktioner inom datavetenskap, realtidsanalys och rapportering.

Den här självstudien visar hur man kopierar ett antal tabeller från Azure SQL Database till Azure Synapse Analytics. Du kan även använda samma mönster i andra kopieringssituationer. Till exempel kopierar du tabeller från SQL Server/Oracle till Azure SQL Database/Data Warehouse/Azure Blob och kopierar olika sökvägar från Blob till Azure SQL Database tabeller.

På en övergripande nivå innefattar denna handledning följande steg:

  • Skapa en datafabrik.
  • Skapa Azure SQL Database, Azure Synapse Analytics och Azure Storage länkade tjänster.
  • Skapa Azure SQL Database och Azure Synapse Analytics datauppsättningar.
  • Skapa en pipeline för sökning av de tabeller som ska kopieras och en annan pipeline för den faktiska kopieringsåtgärden.
  • Starta en pipelineskörning.
  • Övervaka pipelinen och aktivitetskörningarna.

I den här självstudien används Azure PowerShell. Läs mer om att använda andra verktyg/SDK:er för att skapa en datafabrik i Snabbstarter.

Arbetsflöde från början till slut

I det här scenariot har vi ett antal tabeller i Azure SQL Database som vi vill kopiera till Azure Synapse Analytics. Här är den logiska ordningsföljden i arbetsflödet som sker i pipelines:

Arbetsflöde

  • Den första pipelinen letar rätt på listan med tabeller som ska kopieras till de mottagande datalagren. Du kan istället hantera en metadatatabell som innehåller alla tabeller som ska kopieras till mottagardatalagret. Sedan utlöser pipelinen en annan pipeline, som itererar över varje tabell i databasen och utför själva datakopieringen.
  • Den andra pipelinen genomför själva kopieringen. Den tar listan med tabeller som en parameter. För varje tabell i listan kopierar du den specifika tabellen i Azure SQL Database till motsvarande tabell i Azure Synapse Analytics med hjälp av taged copy via Blob Storage och PolyBase för bästa prestanda. I det här exemplet skickar den första pipelinen listan med tabeller som värde för parametern.

Om du inte har en Azure-prenumeration skapar du ett free-konto innan du börjar.

Förutsättningar

Kommentar

Vi rekommenderar att du använder modulen Azure Az PowerShell för att interagera med Azure. Kom igång genom att läsa Installera Azure PowerShell. Information om hur du migrerar till Az PowerShell-modulen finns i Migrera Azure PowerShell från AzureRM till Az.

  • Azure PowerShell. Följ anvisningarna i Så här installerar och konfigurerar du Azure PowerShell.
  • Azure Storage konto. Det Azure Storage-kontot används som bloblagring för mellanlagring i bulk-kopieringsoperationen.
  • Azure SQL Database. Den här databasen innehåller källdata.
  • Azure Synapse Analytics. Det här datalagret innehåller de data som kopieras från SQL Database.

Förbered SQL Database och Azure Synapse Analytics

Prepare källan Azure SQL Database:

Skapa en databas med Adventure Works LT-exempeldata i SQL Database genom att följa Skapa en databas i artikeln Azure SQL Database. I den här självstudien kopieras alla tabeller från den här exempeldatabasen till Azure Synapse Analytics.

Prepare mottagaren Azure Synapse Analytics:

  1. Om du inte har en Azure Synapse Analytics arbetsyta kan du läsa artikeln Get started with Azure Synapse Analytics (Kom igång med Azure Synapse Analytics för steg för att skapa en.

  2. Skapa motsvarande tabellscheman i Azure Synapse Analytics. Du använder Azure Data Factory för att migrera/kopiera data i ett senare steg.

Azure tjänster för åtkomst till SQL Server

För både SQL Database och Azure Synapse Analytics tillåter du att Azure tjänster får åtkomst till SQL Server. Kontrollera att inställningen Tillåt åtkomst till Azure tjänster har aktiverats ON för servern. Med den här inställningen kan Data Factory-tjänsten läsa data från Azure SQL Database och skriva data till Azure Synapse Analytics. Gör så här för att kontrollera och aktivera den här inställningen:

  1. Klicka på Alla tjänster till vänster och klicka på SQL-servrar.
  2. Välj din server och klicka på Brandvägg under INSTÄLLNINGAR.
  3. På sidan Firewall klickar du på ON för Tillåt åtkomst till Azure tjänster.

Skapa en datafabrik

  1. Starta PowerShell. Håll Azure PowerShell öppet till slutet av den här handledningen. Om du stänger och öppnar det igen måste du köra kommandona en gång till.

    Kör följande kommando och ange det användarnamn och lösenord som du använder för att logga in på Azure-portalen:

    Connect-AzAccount
    

    Kör följande kommando för att visa alla prenumerationer för det här kontot:

    Get-AzSubscription
    

    Kör följande kommando för att välja den prenumeration som du vill arbeta med. Ersätt SubscriptionId med ID:t för din Azure-prenumeration:

    Select-AzSubscription -SubscriptionId "<SubscriptionId>"
    
  2. Kör cmdleten Set-AzDataFactoryV2 för att skapa en datafabrik. Ersätt platshållarna med egna värden innan du kör kommandot.

    $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
    

    Observera följande:

    • Namnet på Azure datafabrik måste vara globalt unikt. Om du får följande felmeddelande ändrar du namnet och försöker igen.

      The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
      
    • Om du vill skapa Data Factory-instanser måste du vara deltagare eller administratör för Azure-prenumerationen.

    • Om du vill ha en lista över Azure regioner där Data Factory är tillgängligt för närvarande väljer du de regioner som intresserar dig på följande sida och expanderar sedan Analytics för att hitta Data Factory: Produkter tillgängliga per region. Datalager (Azure Storage, Azure SQL Database osv.) och beräkningar (HDInsight osv.) som används av datafabriken kan finnas i andra regioner.

Skapa länkade tjänster

I den här självstudien skapar du tre länkade tjänster för käll-, mottagar- och mellanlagringsbloben, som innehåller anslutningar till dina datalager:

Skapa den länkade källtjänsten Azure SQL Database

  1. Skapa en JSON-fil med namnet AzureSqlDatabaseLinkedService.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll: (skapa mappen ADFv2TutorialBulkCopy om den inte redan finns.)

    Viktigt!

    Ersätt <servername>, <databasename>, <username>@<servername> och <password> med värden för din Azure SQL Database innan du sparar filen.

    {
        "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"
            }
        }
    }
    
  2. I Azure PowerShell växlar du till mappen ADFv2TutorialBulkCopy.

  3. Kör cmdleten Set-AzDataFactoryV2LinkedService för att skapa den länkade tjänsten: AzureSqlDatabaseLinkedService.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseLinkedService" -File ".\AzureSqlDatabaseLinkedService.json"
    

    Här är exempel på utdata:

    LinkedServiceName : AzureSqlDatabaseLinkedService
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDatabaseLinkedService
    

Skapa den länkade tjänsten Azure Synapse Analytics mottagare

  1. Skapa en JSON-fil med namnet AzureSqlDWLinkedService.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll:

    Viktigt!

    Ersätt <servername>, <databasename>, <username>@<servername> och <password> med värden för din Azure SQL Database innan du sparar filen.

    {
        "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"
            }
        }
    }
    
  2. Om du vill skapa den länkade tjänsten: AzureSqlDWLinkedService kör du cmdleten Set-AzDataFactoryV2LinkedService .

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWLinkedService" -File ".\AzureSqlDWLinkedService.json"
    

    Här är exempel på utdata:

    LinkedServiceName : AzureSqlDWLinkedService
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDWLinkedService
    

Skapa den länkade Azure Storage-tjänsten staging

I den här självstudien använder du Azure Blob Storage som ett mellanlagringsområde för att aktivera PolyBase för bättre kopieringsprestanda.

  1. Skapa en JSON-fil med namnet AzureStorageLinkedService.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll:

    Viktigt!

    Ersätt <accountName> och <accountKey> med namn och nyckel för ditt Azure lagringskonto innan du sparar filen.

    {
        "name": "AzureStorageLinkedService",
        "properties": {
            "type": "AzureStorage",
            "typeProperties": {
                "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>"
            }
        }
    }
    
  2. Skapa den länkade tjänsten: AzureStorageLinkedService genom att köra cmdleten Set-AzDataFactoryV2LinkedService .

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ".\AzureStorageLinkedService.json"
    

    Här är exempel på utdata:

    LinkedServiceName : AzureStorageLinkedService
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureStorageLinkedService
    

Skapa datauppsättningar

I den här handledningen skapar du datauppsättningar för källa och mottagare som specificerar var datan lagras.

Skapa en datauppsättning för SQL Database-källan

  1. Skapa en JSON-fil med namnet AzureSqlDatabaseDataset.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll: ”tableName” är en platshållare eftersom du senare använder SQL-frågan i kopieringsaktiviteten till att hämta data.

    {
        "name": "AzureSqlDatabaseDataset",
        "properties": {
            "type": "AzureSqlTable",
            "linkedServiceName": {
                "referenceName": "AzureSqlDatabaseLinkedService",
                "type": "LinkedServiceReference"
            },
            "typeProperties": {
                "tableName": "dummy"
            }
        }
    }
    
  2. Om du vill skapa datauppsättningen: AzureSqlDatabaseDataset kör du cmdleten Set-AzDataFactoryV2Dataset .

    Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDatabaseDataset" -File ".\AzureSqlDatabaseDataset.json"
    

    Här är exempel på utdata:

    DatasetName       : AzureSqlDatabaseDataset
    ResourceGroupName : <resourceGroupname>
    DataFactoryName   : <dataFactoryName>
    Structure         :
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset
    

Skapa en datauppsättning för mottagare Azure Synapse Analytics

  1. Skapa en JSON-fil med namnet AzureSqlDWDataset.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll: ”tableName” anges som en parameter, senare skickar kopieringsaktiviteten som refererar till den här datauppsättningen det faktiska värdet till datauppsättningen.

    {
        "name": "AzureSqlDWDataset",
        "properties": {
            "type": "AzureSqlDWTable",
            "linkedServiceName": {
                "referenceName": "AzureSqlDWLinkedService",
                "type": "LinkedServiceReference"
            },
            "typeProperties": {
                "tableName": {
                    "value": "@{dataset().DWTableName}",
                    "type": "Expression"
                }
            },
            "parameters":{
                "DWTableName":{
                    "type":"String"
                }
            }
        }
    }
    
  2. Om du vill skapa datauppsättningen: AzureSqlDWDataset kör du cmdleten Set-AzDataFactoryV2Dataset .

    Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSqlDWDataset" -File ".\AzureSqlDWDataset.json"
    

    Här är exempel på utdata:

    DatasetName       : AzureSqlDWDataset
    ResourceGroupName : <resourceGroupname>
    DataFactoryName   : <dataFactoryName>
    Structure         :
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDwTableDataset
    

Skapa pipelines

I den här självstudien skapar du två pipelines:

Skapa pipelinen ”IterateAndCopySQLTables”

Den här pipelinen tar en lista med tabeller som en parameter. För varje tabell i listan kopieras data från tabellen i Azure SQL Database till Azure Synapse Analytics med mellanlagrad kopia och PolyBase.

  1. Skapa en JSON-fil med namnet IterateAndCopySQLTables.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll:

    {
        "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"
                }
            }
        }
    }
    
  2. Skapa pipelinen: IterateAndCopySQLTables genom att köra cmdleten Set-AzDataFactoryV2Pipeline .

    Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "IterateAndCopySQLTables" -File ".\IterateAndCopySQLTables.json"
    

    Här är exempel på utdata:

    PipelineName      : IterateAndCopySQLTables
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Activities        : {IterateSQLTables}
    Parameters        : {[tableList, Microsoft.Azure.Management.DataFactory.Models.ParameterSpecification]}
    

Skapa pipelinen ”GetTableListAndTriggerCopyData”

Den här pipelinen utför två steg:

  • Letar upp systemtabellen Azure SQL Database för att hämta listan över tabeller som ska kopieras.
  • Den utlöser pipelinen "IterateAndCopySQLTables" för att utföra den faktiska kopieringen.
  1. Skapa en JSON-fil med namnet GetTableListAndTriggerCopyData.json i mappen C:\ADFv2TutorialBulkCopy med följande innehåll:

    {
        "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"
                            ]
                        }
                    ]
                }
            ]
        }
    }
    
  2. Skapa pipelinen: GetTableListAndTriggerCopyData genom att köra cmdleten Set-AzDataFactoryV2Pipeline .

    Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "GetTableListAndTriggerCopyData" -File ".\GetTableListAndTriggerCopyData.json"
    

    Här är exempel på utdata:

    PipelineName      : GetTableListAndTriggerCopyData
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Activities        : {LookupTableList, TriggerCopy}
    Parameters        :
    

Starta och övervaka pipelinekörning

  1. Starta en pipelinekörning för huvudpipelinen ”GetTableListAndTriggerCopyData” och spara pipelinekörningens ID för framtida övervakning. Därefter utlöses körningen av pipelinen ”IterateAndCopySQLTables” som anges i aktiviteten ExecutePipeline.

    $runId = Invoke-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineName 'GetTableListAndTriggerCopyData'
    
  2. Kör följande skript som kontinuerligt kontrollerar körningsstatus för pipelinen GetTableListAndTriggerCopyData och skriver ut slutresultatet för pipelinekörningen och aktiviteten.

    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
    

    Här är utdata från exempelkörningen:

    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}
    
  3. Du kan få fram körnings-ID:t för pipelinen ”IterateAndCopySQLTables”, och kontrollera de detaljerade resultaten av aktivitetskörningen enligt följande.

    Write-Host "Pipeline 'IterateAndCopySQLTables' run result:" -ForegroundColor "Yellow"
    ($result | Where-Object {$_.ActivityName -eq "TriggerCopy"}).Output.ToString()
    

    Här är utdata från exempelkörningen:

    {
        "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
    
  4. Anslut till din sink Azure Synapse Analytics och bekräfta att data har kopierats korrekt från Azure SQL Database.

I den här självstudiekursen utförde du följande steg:

  • Skapa en datafabrik.
  • Skapa Azure SQL Database, Azure Synapse Analytics och Azure Storage länkade tjänster.
  • Skapa Azure SQL Database och Azure Synapse Analytics datauppsättningar.
  • Skapa en pipeline för sökning av de tabeller som ska kopieras och en annan pipeline för den faktiska kopieringsåtgärden.
  • Starta en pipelineskörning.
  • Övervaka pipelinen och aktivitetskörningarna.

Fortsätt till följande självstudiekurs om du vill lära dig att kopiera data stegvis från en källa till ett mål: