Adatok másolása az Azure Blobból az Azure SQL Database-be az Azure Data Factory segítségével
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!
Ebben az oktatóanyagban olyan adat-előállító folyamatot hoz létre, amely az Azure Blob Storage-ból az Azure SQL Database-be másol adatokat. Az oktatóanyagban szereplő konfigurációs minta fájlalapú adattárból relációs adattárba való másolásra vonatkozik. A forrásként és fogadóként támogatott adattárak listáját a támogatott adattárak és formátumok című témakörben találja.
Ebben az oktatóanyagban a következő lépéseket kell elvégeznie:
- Adat-előállító létrehozása
- Azure Storage-beli és Azure SQL Database-beli társított szolgáltatások létrehozása
- Azure Blob- és Azure SQL Database-adatkészletek létrehozása
- Másolási tevékenységet tartalmazó folyamat létrehozása
- Folyamat futásának indítása
- A folyamat és a tevékenységek futásának monitorozása
Ez az oktatóanyag a .NET SDK-t használja. Más mechanizmusokat is használhat az Azure Data Factoryvel való interakcióhoz; a rövid útmutatókban lévő példákra hivatkozhat.
Ha nem rendelkezik Azure-előfizetéssel, mindössze néhány perc alatt létrehozhat egy ingyenes Azure-fiókot a virtuális gép létrehozásának megkezdése előtt.
Előfeltételek
- Egy Azure Storage-fiók. A blobtárolót használjuk forrás adattárként. Ha nem rendelkezik Azure Storage-fiókkal, olvassa el az Általános célú tárfiók létrehozása című témakört.
- Azure SQL Database Ezt az adatbázist használjuk fogadó adattárként. Ha nem rendelkezik adatbázissal az Azure SQL Database-ben, tekintse meg az Adatbázis létrehozása az Azure SQL Database-ben című témakört.
- Visual Studio. A cikk bemutatója a Visual Studio 2019-et használja.
- Azure SDK for .NET.
- Microsoft Entra-alkalmazás. Ha nem rendelkezik Microsoft Entra-alkalmazással, olvassa el a Microsoft Entra-alkalmazás létrehozása című szakaszt a Hogyan: A portál használata Microsoft Entra-alkalmazás létrehozásához. Másolja ki a következő értékeket a későbbi lépésekben való használathoz: alkalmazás-(ügyfél-) azonosító, hitelesítési kulcs és címtár-(bérlői) azonosító. Rendelje hozzá az alkalmazást a közreműködői szerepkörhöz az ugyanabban a cikkben található utasításokat követve.
Blob és SQL-tábla létrehozása
Most készítse elő az Azure Blobot és az Azure SQL Database-t az oktatóanyaghoz egy forrásblob és egy fogadó SQL-tábla létrehozásával.
Forrás blob létrehozása
Először hozzon létre egy forrásblobot egy tároló létrehozásával és egy bemeneti szövegfájl feltöltésével:
Nyissa meg a Jegyzettömbet. Másolja ki a következő szöveget, és mentse helyileg egy inputEmp.txt nevű fájlba.
John|Doe Jane|Doe
Az adfv2tutorial tároló létrehozásához és a inputEmp.txt fájl tárolóba való feltöltéséhez használjon olyan eszközt, mint az Azure Storage Explorer.
Fogadó SQL-tábla létrehozása
Ezután hozzon létre egy fogadó SQL-táblát:
A következő SQL-szkripttel hozza létre a dbo.emp táblát az Azure SQL Database-ben.
CREATE TABLE dbo.emp ( ID int IDENTITY(1,1) NOT NULL, FirstName varchar(50), LastName varchar(50) ) GO CREATE CLUSTERED INDEX IX_emp_ID ON dbo.emp (ID);
Az Azure-szolgáltatások hozzáférésének engedélyezése az SQL Database-hez. Győződjön meg arról, hogy engedélyezi az Azure-szolgáltatások elérését a kiszolgálón, hogy a Data Factory szolgáltatás adatokat írjon az SQL Database-be. A beállítás ellenőrzéséhez és bekapcsolásához hajtsa végre a következő lépéseket:
Lépjen az Azure Portalra az SQL Server kezeléséhez. SQL-kiszolgálók keresése és kiválasztása.
Válassza ki a kiszolgálót.
Az SQL Server menü Biztonsági fejlécében válassza a Tűzfalak és virtuális hálózatok lehetőséget.
A Tűzfal és a virtuális hálózatok lapon, az Azure-szolgáltatások és -erőforrások hozzáférésének engedélyezése a kiszolgálóhoz területen válassza a BE lehetőséget.
Visual Studio-projekt létrehozása
A Visual Studio használatával hozzon létre egy C# .NET-konzolalkalmazást.
- Nyissa meg a Visual Studiót.
- A Start ablakban válassza az Új projekt létrehozása lehetőséget.
- Az Új projekt létrehozása ablakban válassza ki a Konzolalkalmazás (.NET-keretrendszer) C#-verzióját a projekttípusok listájából. Ezután válassza a Tovább gombra.
- Az új projekt konfigurálása ablakban adja meg az ADFv2Tutorial projektnevét. A Hely területen keresse meg és/vagy hozza létre a könyvtárat a projekt mentéséhez. Válassza a Létrehozás parancsot. Az új projekt megjelenik a Visual Studio IDE-ben.
NuGet-csomagok telepítése
Ezután telepítse a szükséges kódtárcsomagokat a NuGet-csomagkezelővel.
A menüsávon válassza a Tools>NuGet Csomagkezelő> Csomagkezelő Console lehetőséget.
A Csomagkezelő Konzol panelen futtassa az alábbi parancsokat a csomagok telepítéséhez. Az Azure Data Factory NuGet-csomagról további információt a Microsoft.Azure.Management.DataFactory című témakörben talál.
Install-Package Microsoft.Azure.Management.DataFactory Install-Package Microsoft.Azure.Management.ResourceManager -PreRelease Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory
Adat-előállító ügyfél létrehozása
Data Factory-ügyfél létrehozásához kövesse az alábbi lépéseket.
Nyissa meg a Program.cs, majd írja felül a meglévő
using
utasításokat a következő kóddal a névterekre mutató hivatkozások hozzáadásához.using System; using System.Collections.Generic; using System.Linq; using Microsoft.Rest; using Microsoft.Rest.Serialization; using Microsoft.Azure.Management.ResourceManager; using Microsoft.Azure.Management.DataFactory; using Microsoft.Azure.Management.DataFactory.Models; using Microsoft.IdentityModel.Clients.ActiveDirectory;
Adja hozzá a következő kódot a
Main
változókat állító metódushoz. Cserélje le a 14 helyőrzőt a saját értékeire.Azoknak az Azure-régióknak a listáját, amelyekben a Data Factory jelenleg elérhető, tekintse meg a régiónként elérhető termékeket. A Termékek legördülő listában válassza a Browse>Analytics>Data Factory lehetőséget. Ezután a Régiók legördülő listában válassza ki az Önt érdeklő régiókat. Megjelenik egy rács a kiválasztott régiókHoz tartozó Data Factory-termékek rendelkezésre állási állapotával.
Feljegyzés
A Data Factory által használt adattárak, például az Azure Storage és az Azure SQL Database, valamint a Data Factory által használt számítások, például a HDInsight, más régiókban is lehetnek, mint a Data Factory által választott adatok.
// Set variables string tenantID = "<your tenant ID>"; string applicationId = "<your application ID>"; string authenticationKey = "<your authentication key for the application>"; string subscriptionId = "<your subscription ID to create the factory>"; string resourceGroup = "<your resource group to create the factory>"; string region = "<location to create the data factory in, such as East US>"; string dataFactoryName = "<name of data factory to create (must be globally unique)>"; // Specify the source Azure Blob information string storageAccount = "<your storage account name to copy data>"; string storageKey = "<your storage account key>"; string inputBlobPath = "adfv2tutorial/"; string inputBlobName = "inputEmp.txt"; // Specify the sink Azure SQL Database information string azureSqlConnString = "Server=tcp:<your server name>.database.windows.net,1433;" + "Database=<your database name>;" + "User ID=<your username>@<your server name>;" + "Password=<your password>;" + "Trusted_Connection=False;Encrypt=True;Connection Timeout=30"; string azureSqlTableName = "dbo.emp"; string storageLinkedServiceName = "AzureStorageLinkedService"; string sqlDbLinkedServiceName = "AzureSqlDbLinkedService"; string blobDatasetName = "BlobDataset"; string sqlDatasetName = "SqlDataset"; string pipelineName = "Adfv2TutorialBlobToSqlCopy";
Adja hozzá a következő kódot az
Main
osztálypéldányt létrehozó metódushozDataFactoryManagementClient
. Ezzel az objektummal adat-előállítót, társított szolgáltatást, adatkészleteket és folyamatot hozhat létre. Ezenfelül ez az objektum a folyamat futása részleteinek monitorozására is használható.// Authenticate and create a data factory management client var context = new AuthenticationContext("https://login.windows.net/" + tenantID); ClientCredential cc = new ClientCredential(applicationId, authenticationKey); AuthenticationResult result = context.AcquireTokenAsync( "https://management.azure.com/", cc ).Result; ServiceClientCredentials cred = new TokenCredentials(result.AccessToken); var client = new DataFactoryManagementClient(cred) { SubscriptionId = subscriptionId };
Adat-előállító létrehozása
Adja hozzá a következő kódot az Main
adat-előállítót létrehozó metódushoz.
// Create a data factory
Console.WriteLine("Creating a data factory " + dataFactoryName + "...");
Factory dataFactory = new Factory
{
Location = region,
Identity = new FactoryIdentity()
};
client.Factories.CreateOrUpdate(resourceGroup, dataFactoryName, dataFactory);
Console.WriteLine(
SafeJsonConvert.SerializeObject(dataFactory, client.SerializationSettings)
);
while (
client.Factories.Get(
resourceGroup, dataFactoryName
).ProvisioningState == "PendingCreation"
)
{
System.Threading.Thread.Sleep(1000);
}
Társított szolgáltatások létrehozása
Ebben az oktatóanyagban két társított szolgáltatást hoz létre a forráshoz és a fogadóhoz.
Azure Storage-beli társított szolgáltatás létrehozása
Adja hozzá a következő kódot az Main
Azure Storage társított szolgáltatást létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure Blob társított szolgáltatás tulajdonságai című témakörben olvashat.
// Create an Azure Storage linked service
Console.WriteLine("Creating linked service " + storageLinkedServiceName + "...");
LinkedServiceResource storageLinkedService = new LinkedServiceResource(
new AzureStorageLinkedService
{
ConnectionString = new SecureString(
"DefaultEndpointsProtocol=https;AccountName=" + storageAccount +
";AccountKey=" + storageKey
)
}
);
client.LinkedServices.CreateOrUpdate(
resourceGroup, dataFactoryName, storageLinkedServiceName, storageLinkedService
);
Console.WriteLine(
SafeJsonConvert.SerializeObject(storageLinkedService, client.SerializationSettings)
);
Azure SQL Database-beli társított szolgáltatás létrehozása
Adja hozzá a következő kódot az Main
Azure SQL Database társított szolgáltatást létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure SQL Database társított szolgáltatástulajdonságairól olvashat.
// Create an Azure SQL Database linked service
Console.WriteLine("Creating linked service " + sqlDbLinkedServiceName + "...");
LinkedServiceResource sqlDbLinkedService = new LinkedServiceResource(
new AzureSqlDatabaseLinkedService
{
ConnectionString = new SecureString(azureSqlConnString)
}
);
client.LinkedServices.CreateOrUpdate(
resourceGroup, dataFactoryName, sqlDbLinkedServiceName, sqlDbLinkedService
);
Console.WriteLine(
SafeJsonConvert.SerializeObject(sqlDbLinkedService, client.SerializationSettings)
);
Adatkészletek létrehozása
Ebben a szakaszban két adatkészletet hoz létre: egyet a forráshoz, a másikat a fogadóhoz.
Adatkészlet létrehozása a forrás Azure Blobhoz
Adja hozzá a következő kódot az Main
Azure Blob-adatkészletet létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure Blob-adathalmaz tulajdonságai című témakörben olvashat.
Meghatároz egy adatkészletet, amely a forrásadatokat jelöli az Azure Blobban. Ez a Blob-adatkészlet az előző lépésben létrehozott Azure Storage-beli társított szolgáltatásra vonatkozik, és a következőket írja le:
- A másolandó blob helye:
FolderPath
ésFileName
- A tartalom elemzését jelző blobformátum:
TextFormat
és annak beállításai, például az oszlopelválasztó - Az adatstruktúra, beleértve az oszlopneveket és az adattípusokat, amelyek ebben a példában a fogadó SQL-táblára képeznek le
// Create an Azure Blob dataset
Console.WriteLine("Creating dataset " + blobDatasetName + "...");
DatasetResource blobDataset = new DatasetResource(
new AzureBlobDataset
{
LinkedServiceName = new LinkedServiceReference {
ReferenceName = storageLinkedServiceName
},
FolderPath = inputBlobPath,
FileName = inputBlobName,
Format = new TextFormat { ColumnDelimiter = "|" },
Structure = new List<DatasetDataElement>
{
new DatasetDataElement { Name = "FirstName", Type = "String" },
new DatasetDataElement { Name = "LastName", Type = "String" }
}
}
);
client.Datasets.CreateOrUpdate(
resourceGroup, dataFactoryName, blobDatasetName, blobDataset
);
Console.WriteLine(
SafeJsonConvert.SerializeObject(blobDataset, client.SerializationSettings)
);
Adatkészlet létrehozása a fogadó Azure SQL Database-hez
Adja hozzá a következő kódot az Main
Azure SQL Database-adatkészletet létrehozó metódushoz. A támogatott tulajdonságokról és részletekről az Azure SQL Database-adathalmaz tulajdonságai című témakörben olvashat.
Meghatároz egy adatkészletet, amely a fogadó adatait jelöli az Azure SQL Database-ben. Ez az adatkészlet az előző lépésben létrehozott Azure SQL Database társított szolgáltatásra vonatkozik. Emellett megadja a másolt adatokat tartalmazó SQL-táblázatot is.
// Create an Azure SQL Database dataset
Console.WriteLine("Creating dataset " + sqlDatasetName + "...");
DatasetResource sqlDataset = new DatasetResource(
new AzureSqlTableDataset
{
LinkedServiceName = new LinkedServiceReference
{
ReferenceName = sqlDbLinkedServiceName
},
TableName = azureSqlTableName
}
);
client.Datasets.CreateOrUpdate(
resourceGroup, dataFactoryName, sqlDatasetName, sqlDataset
);
Console.WriteLine(
SafeJsonConvert.SerializeObject(sqlDataset, client.SerializationSettings)
);
Folyamat létrehozása
Adja hozzá a következő kódot a Main
másolási tevékenységgel rendelkező folyamatot létrehozó metódushoz. Ebben az oktatóanyagban ez a folyamat egyetlen tevékenységet tartalmaz: CopyActivity
a Blob-adathalmazt forrásként, az SQL-adatkészletet pedig fogadóként. További információ a másolási tevékenység részleteiről: Copy tevékenység az Azure Data Factoryben.
// Create a pipeline with copy activity
Console.WriteLine("Creating pipeline " + pipelineName + "...");
PipelineResource pipeline = new PipelineResource
{
Activities = new List<Activity>
{
new CopyActivity
{
Name = "CopyFromBlobToSQL",
Inputs = new List<DatasetReference>
{
new DatasetReference() { ReferenceName = blobDatasetName }
},
Outputs = new List<DatasetReference>
{
new DatasetReference { ReferenceName = sqlDatasetName }
},
Source = new BlobSource { },
Sink = new SqlSink { }
}
}
};
client.Pipelines.CreateOrUpdate(resourceGroup, dataFactoryName, pipelineName, pipeline);
Console.WriteLine(
SafeJsonConvert.SerializeObject(pipeline, client.SerializationSettings)
);
Folyamat futásának létrehozása
Adja hozzá a következő kódot a Main
folyamatfuttatást kiváltó metódushoz.
// Create a pipeline run
Console.WriteLine("Creating pipeline run...");
CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
resourceGroup, dataFactoryName, pipelineName
).Result.Body;
Console.WriteLine("Pipeline run ID: " + runResponse.RunId);
Folyamat futásának monitorozása
Most szúrja be a kódot a folyamatfuttatási állapotok ellenőrzéséhez és a másolási tevékenység futtatásának részleteinek lekéréséhez.
Adja hozzá a következő kódot a metódushoz a
Main
folyamatfuttatás állapotának folyamatos ellenőrzéséhez, amíg be nem fejeződik az adatok másolása.// Monitor the pipeline run Console.WriteLine("Checking pipeline run status..."); PipelineRun pipelineRun; while (true) { pipelineRun = client.PipelineRuns.Get( resourceGroup, dataFactoryName, runResponse.RunId ); Console.WriteLine("Status: " + pipelineRun.Status); if (pipelineRun.Status == "InProgress") System.Threading.Thread.Sleep(15000); else break; }
Adja hozzá a következő kódot a
Main
másolási tevékenység futtatásának részleteit lekérő metódushoz, például az olvasott vagy írott adatok méretéhez.// Check the copy activity run details Console.WriteLine("Checking copy activity run details..."); RunFilterParameters filterParams = new RunFilterParameters( DateTime.UtcNow.AddMinutes(-10), DateTime.UtcNow.AddMinutes(10) ); ActivityRunsQueryResponse queryResponse = client.ActivityRuns.QueryByPipelineRun( resourceGroup, dataFactoryName, runResponse.RunId, filterParams ); if (pipelineRun.Status == "Succeeded") { Console.WriteLine(queryResponse.Value.First().Output); } else Console.WriteLine(queryResponse.Value.First().Error); Console.WriteLine("\nPress any key to exit..."); Console.ReadKey();
A kód futtatása
Az alkalmazás összeállítása a Build Solution (Buildmegoldás létrehozása>) lehetőség választásával. Ezután indítsa el az alkalmazást a Hibakeresés indítása hibakeresés>lehetőség választásával, és ellenőrizze a folyamat végrehajtását.
A konzol megjeleníti az adat-előállító, a társított szolgáltatás, az adatkészletek, a folyamat, valamint a folyamat futása létrehozásának állapotát. Ezután ellenőrzi a folyamat futási állapotát. Várjon, amíg meg nem jelenik a másolási tevékenység részleteinek olvasási/írási méretével. Ezután olyan eszközökkel, mint az SQL Server Management Studio (SSMS) vagy a Visual Studio, csatlakozhat a cél Azure SQL Database-hez, és ellenőrizheti, hogy a megadott céltábla tartalmazza-e a másolt adatokat.
Példakimenet
Creating a data factory AdfV2Tutorial...
{
"identity": {
"type": "SystemAssigned"
},
"location": "East US"
}
Creating linked service AzureStorageLinkedService...
{
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": {
"type": "SecureString",
"value": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>"
}
}
}
}
Creating linked service AzureSqlDbLinkedService...
{
"properties": {
"type": "AzureSqlDatabase",
"typeProperties": {
"connectionString": {
"type": "SecureString",
"value": "Server=tcp:<servername>.database.windows.net,1433;Database=<databasename>;User ID=<username>@<servername>;Password=<password>;Trusted_Connection=False;Encrypt=True;Connection Timeout=30"
}
}
}
}
Creating dataset BlobDataset...
{
"properties": {
"type": "AzureBlob",
"typeProperties": {
"folderPath": "adfv2tutorial/",
"fileName": "inputEmp.txt",
"format": {
"type": "TextFormat",
"columnDelimiter": "|"
}
},
"structure": [
{
"name": "FirstName",
"type": "String"
},
{
"name": "LastName",
"type": "String"
}
],
"linkedServiceName": {
"type": "LinkedServiceReference",
"referenceName": "AzureStorageLinkedService"
}
}
}
Creating dataset SqlDataset...
{
"properties": {
"type": "AzureSqlTable",
"typeProperties": {
"tableName": "dbo.emp"
},
"linkedServiceName": {
"type": "LinkedServiceReference",
"referenceName": "AzureSqlDbLinkedService"
}
}
}
Creating pipeline Adfv2TutorialBlobToSqlCopy...
{
"properties": {
"activities": [
{
"type": "Copy",
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "SqlSink"
}
},
"inputs": [
{
"type": "DatasetReference",
"referenceName": "BlobDataset"
}
],
"outputs": [
{
"type": "DatasetReference",
"referenceName": "SqlDataset"
}
],
"name": "CopyFromBlobToSQL"
}
]
}
}
Creating pipeline run...
Pipeline run ID: 1cd03653-88a0-4c90-aabc-ae12d843e252
Checking pipeline run status...
Status: InProgress
Status: InProgress
Status: Succeeded
Checking copy activity run details...
{
"dataRead": 18,
"dataWritten": 28,
"rowsCopied": 2,
"copyDuration": 2,
"throughput": 0.01,
"errors": [],
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (East US)",
"usedDataIntegrationUnits": 2,
"billedDuration": 2
}
Press any key to exit...
Kapcsolódó tartalom
A példában szereplő folyamat adatokat másol az egyik helyről egy másikra egy Azure Blob Storage-ban. Megtanulta végrehajtani az alábbi műveleteket:
- Adat-előállító létrehozása
- Azure Storage-beli és Azure SQL Database-beli társított szolgáltatások létrehozása
- Azure Blob- és Azure SQL Database-adatkészletek létrehozása
- Másolási tevékenységet tartalmazó folyamat létrehozása.
- 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 azzal ismerkedhet meg, hogyan másolhat adatokat a helyszíni rendszerből a felhőbe: