Gegevens verplaatsen van een SQL Server-database naar SQL Database met Azure Data Factory

In dit artikel wordt beschreven hoe u gegevens van een SQL Server-database naar Azure SQL Database verplaatst via Azure Blob Storage met behulp van de Azure Data Factory (ADF): deze methode is een ondersteunde verouderde benadering die de voordelen biedt van een gerepliceerde faseringskopie. We raden u aan om onze pagina voor gegevensmigratie te bekijken voor de meest recente opties.

Zie Gegevens verplaatsen naar een Azure SQL Database voor een Azure Machine Learning voor een tabel met een overzicht van de verschillende opties voor het verplaatsen van gegevens Azure SQL Database een Azure Machine Learning.

Inleiding: Wat is ADF en wanneer moet het worden gebruikt om gegevens te migreren?

Azure Data Factory is een volledig beheerde cloudgebaseerde gegevensintegratieservice die de verplaatsing en transformatie van gegevens in orchestrateert en automatiseert. Het belangrijkste concept in het ADF-model is pijplijn. Een pijplijn is een logische groepering van activiteiten, die elk de acties definiëren die moeten worden uitvoeren op de gegevens in Gegevenssets. Gekoppelde services worden gebruikt om de informatie te definiëren die nodig is Data Factory verbinding te maken met de gegevensbronnen.

Met ADF kunnen bestaande gegevensverwerkingsservices worden samengesteld uit gegevenspijplijnen die zeer beschikbaar zijn en worden beheerd in de cloud. Deze gegevenspijplijnen kunnen worden gepland voor het opnemen, voorbereiden, transformeren, analyseren en publiceren van gegevens, en ADF beheert en orkestreert de complexe gegevens en verwerkingsafhankelijkheden. Oplossingen kunnen snel worden gebouwd en geïmplementeerd in de cloud, door een toenemend aantal on-premises en cloudgegevensbronnen met elkaar te verbinden.

Overweeg het gebruik van ADF:

  • wanneer gegevens voortdurend moeten worden gemigreerd in een hybride scenario dat toegang heeft tot zowel on-premises resources als cloudbronnen
  • wanneer er transformaties nodig zijn voor de gegevens of wanneer er bedrijfslogica aan moet worden toegevoegd wanneer deze worden gemigreerd.

Met ADF kunt u taken plannen en bewaken met behulp van eenvoudige JSON-scripts die de verplaatsing van gegevens periodiek beheren. ADF heeft ook andere mogelijkheden, zoals ondersteuning voor complexe bewerkingen. Zie de documentatie op Azure Data Factory (ADF) voor meer informatie over ADF.

Het scenario

We stellen een ADF-pijplijn in die twee gegevensmigratieactiviteiten samenwerkt. Samen verplaatsen ze gegevens dagelijks tussen een SQL Server database en Azure SQL Database. De twee activiteiten zijn:

  • Gegevens kopiëren van een SQL Server-database naar een Azure Blob Storage account
  • Kopieer gegevens van het Azure Blob Storage-account naar Azure SQL Database.

Notitie

De stappen die hier worden weergegeven, zijn aangepast aan de meer gedetailleerde zelfstudie van het ADF-team: Gegevens kopiëren van een SQL Server-database naar Azure Blob Storage Verwijzingen naar de relevante secties van dat onderwerp worden indien van toepassing verstrekt.

Vereisten

In deze zelfstudie wordt ervan uitgenomen dat u het volgende hebt:

Notitie

In deze procedure wordt de Azure Portal.

Upload gegevens naar uw SQL Server-exemplaar

We gebruiken de NYC Taxi-gegevensset om het migratieproces te demonstreren. De NYC Taxi-gegevensset is beschikbaar, zoals vermeld in dat bericht, in Azure Blob Storage NYC Taxi Data. De gegevens bevatten twee bestanden, het trip_data.csv-bestand, dat reisgegevens bevat, en het trip_far.csv-bestand, dat details bevat van het tarief dat voor elke reis wordt betaald. Een voorbeeld en beschrijving van deze bestanden zijn beschikbaar in Nyc Taxi Trips Dataset Description (Beschrijving van gegevensset voor taxiritten in NYC).

U kunt de hier verstrekte procedure aanpassen aan een set van uw eigen gegevens of de stappen volgen zoals beschreven met behulp van de NYC Taxi-gegevensset. Als u de NYC Taxi-gegevensset wilt uploaden naar SQL Server database, volgt u de procedure die wordt beschreven in Gegevens bulksgewijs importeren in SQL Server database.

Een Azure-gegevensfactory maken

De instructies voor het maken van een Azure Data Factory resourcegroep in de Azure Portal staan EenAzure Data Factory. Noem het nieuwe ADF-exemplaar adfdsp en noem de resourcegroep die adfdsprg is gemaakt.

Installatie en configuratie Azure Data Factory Integration Runtime

De Integration Runtime is een door de klant beheerde infrastructuur voor gegevensintegratie die wordt gebruikt door Azure Data Factory om mogelijkheden voor gegevensintegratie te bieden in verschillende netwerkomgevingen. Deze runtime werd voorheen 'Gegevensbeheer Gateway' genoemd.

Volg de instructies voor het maken van een pijplijn om deze in te stellen

Gekoppelde services maken om verbinding te maken met de gegevensbronnen

Een gekoppelde service definieert de informatie die nodig is Azure Data Factory verbinding te maken met een gegevensbron. In dit scenario hebben we drie resources waarvoor gekoppelde services nodig zijn:

  1. On-premises SQL Server
  2. Azure Blob Storage
  3. Azure SQL Database

De stapsgewijs te volgen procedure voor het maken van gekoppelde services is beschikbaar in Gekoppelde services maken.

Tabellen definiëren en maken om op te geven hoe de gegevenssets moeten worden gebruikt

Maak tabellen die de structuur, locatie en beschikbaarheid van de gegevenssets opgeven met de volgende op scripts gebaseerde procedures. JSON-bestanden worden gebruikt om de tabellen te definiëren. Zie Gegevenssets voor meer informatie over de structuur van deze bestanden.

Notitie

Voer de Add-AzureAccount cmdlet uit voordat u de cmdlet New-AzureDataFactoryTable uitvoert om te bevestigen dat het juiste Azure-abonnement is geselecteerd voor de uitvoering van de opdracht. Zie Add-AzureAccount voor documentatie over deze cmdlet.

De JSON-definities in de tabellen gebruiken de volgende namen:

  • de tabelnaam in de SQL Server is nyctaxi_data
  • de containernaam in het Azure Blob Storage account is containername

Er zijn drie tabeldefinities nodig voor deze ADF-pijplijn:

  1. SQL on-premises tabel
  2. Blobtabel
  3. SQL Azure Tabel

Notitie

Deze procedures gebruiken Azure PowerShell om de ADF-activiteiten te definiëren en te maken. Maar deze taken kunnen ook worden uitgevoerd met behulp van de Azure Portal. Zie Gegevenssets maken voor meer informatie.

SQL on-premises tabel

De tabeldefinitie voor SQL Server is opgegeven in het volgende JSON-bestand:

{
    "name": "OnPremSQLTable",
    "properties":
    {
        "location":
        {
            "type": "OnPremisesSqlServerTableLocation",
            "tableName": "nyctaxi_data",
            "linkedServiceName": "adfonpremsql"
        },
        "availability":
        {
            "frequency": "Day",
            "interval": 1,
            "waitOnExternal":
            {
                "retryInterval": "00:01:00",
                "retryTimeout": "00:10:00",
                "maximumRetry": 3
            }
        }
    }
}

De kolomnamen zijn hier niet opgenomen. U kunt een subselectie maken voor de kolomnamen door ze hier op te nemen (zie het onderwerp ADF-documentatie voor meer informatie.

Kopieer de JSON-definitie van de tabel naar een bestand met de naam onpremtabledef.json en sla het bestand op een bekende locatie op (hierbij wordt ervan uitgegaan dat dit C:\temp\onpremtabledef.json is). Maak de tabel in ADF met de volgende Azure PowerShell cmdlet:

New-AzureDataFactoryTable -ResourceGroupName ADFdsprg -DataFactoryName ADFdsp –File C:\temp\onpremtabledef.json

Blobtabel

De definitie voor de tabel voor de locatie van de uitvoerblob bevindt zich in het volgende (hiermee worden de opgenomen gegevens van on-premises aan Azure Blob toe te staan):

{
    "name": "OutputBlobTable",
    "properties":
    {
        "location":
        {
            "type": "AzureBlobLocation",
            "folderPath": "containername",
            "format":
            {
                "type": "TextFormat",
                "columnDelimiter": "\t"
            },
            "linkedServiceName": "adfds"
        },
        "availability":
        {
            "frequency": "Day",
            "interval": 1
        }
    }
}

Kopieer de JSON-definitie van de tabel naar een bestand met de naam bloboutputtabledef.json en sla het bestand op een bekende locatie op (hierbij wordt ervan uitgegaan dat dit C:\temp\bloboutputtabledef.json is). Maak de tabel in ADF met de volgende Azure PowerShell cmdlet:

New-AzureDataFactoryTable -ResourceGroupName adfdsprg -DataFactoryName adfdsp -File C:\temp\bloboutputtabledef.json

SQL Azure Tabel

De definitie voor de tabel voor SQL Azure uitvoer staat in het volgende (in dit schema worden de gegevens van de blob toe te staan):

{
    "name": "OutputSQLAzureTable",
    "properties":
    {
        "structure":
        [
            { "name": "column1", "type": "String"},
            { "name": "column2", "type": "String"}
        ],
        "location":
        {
            "type": "AzureSqlTableLocation",
            "tableName": "your_db_name",
            "linkedServiceName": "adfdssqlazure_linked_servicename"
        },
        "availability":
        {
            "frequency": "Day",
            "interval": 1
        }
    }
}

Kopieer de JSON-definitie van de tabel naar een bestand met de naam AzureSqlTable.json en sla het bestand op een bekende locatie op (hierbij wordt ervan uitgegaan dat dit C:\temp\AzureSqlTable.json is). Maak de tabel in ADF met de volgende Azure PowerShell cmdlet:

New-AzureDataFactoryTable -ResourceGroupName adfdsprg -DataFactoryName adfdsp -File C:\temp\AzureSqlTable.json

De pijplijn definiëren en maken

Geef de activiteiten op die deel uitmaken van de pijplijn en maak de pijplijn met de volgende op scripts gebaseerde procedures. Er wordt een JSON-bestand gebruikt om de eigenschappen van de pijplijn te definiëren.

  • In het script wordt ervan uitgenomen dat de naam van de pijplijnAMLDSProcessPipeline is.
  • Houd er ook rekening mee dat we de periodieke uitvoering van de pijplijn dagelijks instellen en de standaard uitvoeringstijd voor de taak gebruiken (12:00 UTC).

Notitie

De volgende procedures gebruiken Azure PowerShell om de ADF-pijplijn te definiëren en te maken. Maar deze taak kan ook worden bereikt met behulp van de Azure Portal. Zie Pijplijn maken voor meer informatie.

Met behulp van de tabeldefinities die u eerder hebt opgegeven, wordt de pijplijndefinitie voor de ADF als volgt opgegeven:

{
    "name": "AMLDSProcessPipeline",
    "properties":
    {
        "description" : "This pipeline has two activities: the first one copies data from SQL Server to Azure Blob, and the second one copies from Azure Blob to Azure Database Table",
        "activities":
        [
            {
                "name": "CopyFromSQLtoBlob",
                "description": "Copy data from SQL Server to blob",
                "type": "CopyActivity",
                "inputs": [ {"name": "OnPremSQLTable"} ],
                "outputs": [ {"name": "OutputBlobTable"} ],
                "transformation":
                {
                    "source":
                    {
                        "type": "SqlSource",
                        "sqlReaderQuery": "select * from nyctaxi_data"
                    },
                    "sink":
                    {
                        "type": "BlobSink"
                    }
                },
                "Policy":
                {
                    "concurrency": 3,
                    "executionPriorityOrder": "NewestFirst",
                    "style": "StartOfInterval",
                    "retry": 0,
                    "timeout": "01:00:00"
                }
            },
            {
                "name": "CopyFromBlobtoSQLAzure",
                "description": "Push data to Sql Azure",
                "type": "CopyActivity",
                "inputs": [ {"name": "OutputBlobTable"} ],
                "outputs": [ {"name": "OutputSQLAzureTable"} ],
                "transformation":
                {
                    "source":
                    {
                        "type": "BlobSource"
                    },
                    "sink":
                    {
                        "type": "SqlSink",
                        "WriteBatchTimeout": "00:5:00",
                    }
                },
                "Policy":
                {
                    "concurrency": 3,
                    "executionPriorityOrder": "NewestFirst",
                    "style": "StartOfInterval",
                    "retry": 2,
                    "timeout": "02:00:00"
                }
            }
        ]
    }
}

Kopieer deze JSON-definitie van de pijplijn naar een bestand met de naam pipelinedef.json en sla het bestand op een bekende locatie op (hier wordt ervan uitgegaan dat dit C:\temp\pipelinedef.json is). Maak de pijplijn in ADF met de volgende Azure PowerShell cmdlet:

New-AzureDataFactoryPipeline  -ResourceGroupName adfdsprg -DataFactoryName adfdsp -File C:\temp\pipelinedef.json

De pijplijn starten

De pijplijn kan nu worden uitgevoerd met de volgende opdracht:

Set-AzureDataFactoryPipelineActivePeriod -ResourceGroupName ADFdsprg -DataFactoryName ADFdsp -StartDateTime startdateZ –EndDateTime enddateZ –Name AMLDSProcessPipeline

De parameterwaarden startdateen enddate moeten worden vervangen door de werkelijke datums waartussen u de pijplijn wilt uitvoeren.

Zodra de pijplijn is uitgevoerd, zou u de gegevens moeten kunnen zien in de container die is geselecteerd voor de blob, één bestand per dag.

We hebben geen gebruik gemaakt van de functionaliteit van ADF om gegevens incrementeel door te se pijpen. Zie de ADF-documentatie voor meer informatie over hoe u dit doet en andere mogelijkheden van ADF.