Rövid útmutató: Adat-előállító és folyamat létrehozása a .NET SDK használatával
A KÖVETKEZŐKRE VONATKOZIK: Azure Data Factory Azure Synapse Analytics
Ez a rövid útmutató bemutatja, hogyan hozhat létre Azure Data Factory a .NET SDK-val. Az adat-előállítóban létrehozott folyamat adatokat másol egy Azure-blobtároló egyik mappájából egy másikba. Az adatok Azure Data Factory használatával történő átalakításáról szóló oktatóanyagért lásd: Oktatóanyag: Adatok átalakítása a Spark használatával.
Megjegyzés
Ez a cikk nem mutatja be részletesen a Data Factory szolgáltatást. Ha szeretné megismerni az Azure Data Factoryt, tekintse meg Az Azure Data Factory bemutatását.
Előfeltételek
Azure-előfizetés
Ha még nincs Azure-előfizetése, kezdés előtt hozzon létre egy ingyenes fiókot.
Azure-szerepkörök
Data Factory-példányok létrehozásához az Azure-ba történő bejelentkezéshez használt felhasználói fióknak a közreműködő vagy tulajdonos szerepkör tagjának, vagy az Azure-előfizetés rendszergazdájának kell lennie. Az előfizetésben található engedélyek megtekintéséhez lépjen a Azure Portal, válassza ki a felhasználónevét a jobb felső sarokban, válassza a "..." ikont a további lehetőségekért, majd válassza a Saját engedélyek lehetőséget. Ha több előfizetéshez is rendelkezik hozzáféréssel, válassza ki a megfelelő előfizetést.
A Data Factory gyermekerőforrásai – beleértve az adatkészletek, társított szolgáltatások, folyamatok, eseményindítók és integrációs modulok – létrehozására és kezelésére az alábbi követelmények vonatkoznak:
- Ha gyermekerőforrásokat szeretne létrehozni és kezelni a Azure Portal, az erőforráscsoport szintjén vagy felette kell lennie a Data Factory Közreműködő szerepkörének.
- A gyermekerőforrások PowerShell-lel vagy az SDK-val való létrehozásához és kezeléséhez a közreműködő szerepkör is elegendő az erőforráscsoport szintjén vagy felette.
Ha szeretne példautasításokat látni arra, hogyan kell egy felhasználót a szerepkörhöz adni, olvassa el a Szerepkörök hozzáadása című cikket.
További információkért tekintse meg a következő cikkeket:
Azure Storage-fiók
Ebben a rövid útmutatóban egy általános célú Azure Storage-fiókot (különösen a Blob Storage-t) használ forrás - és céladattárként . Ha nem rendelkezik általános célú Azure Storage-fiókkal, tekintse meg a Tárfiók létrehozása a fiók létrehozásához című témakört.
A tárfiók nevének lekérése
Ehhez a rövid útmutatóhoz szüksége lesz az Azure Storage-fiók nevére. Az alábbi eljárás lépéseket tartalmaz a tárfiók nevének lekéréséhez:
- Egy webböngészőben lépjen a Azure Portal, és jelentkezzen be az Azure-felhasználónevével és -jelszavával.
- A Azure Portal menüben válassza a Minden szolgáltatás, majd aStorage-tárfiókok> lehetőséget. A Tárfiókok elemet bármelyik lapról megkeresheti és kiválaszthatja.
- A Tárfiókok lapon szűrjön a tárfiókra (ha szükséges), majd válassza ki a tárfiókot.
A Tárfiókok elemet bármelyik lapról megkeresheti és kiválaszthatja.
Blobtároló létrehozása
Ebben a szakaszban egy adftutorial nevű blobtárolót hoz létre az Azure Blob Storage-ban.
A tárfiók oldalán válassza az Áttekintés>tárolók lehetőséget.
A <Fióknév> - tárolók lap eszköztárán válassza a Tároló lehetőséget.
Az Új tároló párbeszédablakban adja meg az adftutorial nevet, és kattintson az OK gombra. A <Fióknév> - tárolók lap úgy frissül, hogy az adftutorial szerepeljen a tárolók listájában.
Bemeneti mappa és fájl hozzáadása a blobtárolóhoz
Ebben a szakaszban létrehoz egy input nevű mappát a létrehozott tárolóban, majd feltölt egy mintafájlt a bemeneti mappába. Mielőtt hozzákezdene, nyisson meg egy szövegszerkesztőt, például a Jegyzettömbet, és hozzon létre egy emp.txt nevű fájlt a következő tartalommal:
John, Doe
Jane, Doe
Mentse a fájlt a C:\ADFv2QuickStartPSH mappába. (Ha a mappa még nem létezik, hozza létre.) Ezután térjen vissza a Azure Portal, és kövesse az alábbi lépéseket:
<A Fióknév> - Tárolók lapon, ahol abbahagyta, válassza az adftutorial elemet a frissített tárolók listájából.
- Ha bezárta az ablakot, vagy egy másik oldalra ment, jelentkezzen be újra a Azure Portal.
- A Azure Portal menüben válassza a Minden szolgáltatás, majd aStorage-tárfiókok> lehetőséget. A Tárfiókok elemet bármelyik lapról megkeresheti és kiválaszthatja.
- Válassza ki a tárfiókot, majd válassza a Tárolók>adftutorial lehetőséget.
Az adftutorial tárolóoldalának eszköztárán válassza a Feltöltés lehetőséget.
A Blob feltöltése lapon válassza a Fájlok mezőt, majd keresse meg és válassza ki a emp.txt fájlt.
Bontsa ki a Speciális címsort. A lap ekkor az alábbi módon jelenik meg:
A Feltöltés mappába mezőbe írja be a bemenetet.
Kattintson a Feltöltés gombra. A listában meg kell jelennie az emp.txt fájlnak és a feltöltés állapotának.
A Blob feltöltése lap bezárásához válassza a Bezárás ikont (X).
Tartsa nyitva az adftutorial tárolóoldalt. A segítségével ellenőrizheti ennek a rövid útmutatónak az eredményét.
Visual Studio
A cikkben található útmutató a Visual Studio 2019-et használja. A Visual Studio 2013, 2015 vagy 2017 eljárásai kissé eltérnek egymástól.
Alkalmazás létrehozása az Azure Active Directoryban
A Útmutató: A portál használata erőforrásokhoz hozzáférő Azure AD alkalmazás és szolgáltatásnév létrehozásához című szakasz lépéseit követve végezze el az alábbi feladatokat:
- Az Azure Active Directory-alkalmazás létrehozása területen hozzon létre egy alkalmazást, amely az oktatóanyagban létrehozott .NET-alkalmazást jelöli. A bejelentkezési URL-hez megadhat egy hamis URL-t, a cikkben láthatóak szerint (
https://contoso.org/exampleapp
). - A Bejelentkezéshez szükséges értékek lekérése területen kérje le az alkalmazásazonosítót és a bérlőazonosítót, és jegyezze fel az oktatóanyag későbbi részében használt értékeket.
- A Tanúsítványok és titkos kódok területen kérje le a hitelesítési kulcsot, és jegyezze fel ezt az értéket, amelyet az oktatóanyag későbbi részében fog használni.
- Az Alkalmazás hozzárendelése szerepkörhöz területen rendelje hozzá az alkalmazást a Közreműködő szerepkörhöz az előfizetés szintjén, hogy az alkalmazás adat-előállítókat hozhasson létre az előfizetésben.
Visual Studio-projekt létrehozása
Ezután hozzon létre egy C# .NET-konzolalkalmazást a Visual Studióban:
- Indítsa el a Visual Studiót.
- A Start ablakban válassza az Új projekt> létrehozásaKonzolalkalmazás (.NET-keretrendszer) lehetőséget. A lépések elvégzéséhez a .NET 4.5.2-es vagy újabb verziója szükséges.
- A Projekt neve mezőbe írja be az ADFv2QuickStart nevet.
- A projekt létrehozásához válassza a Létrehozás lehetőséget.
NuGet-csomagok telepítése
Válassza az Eszközök>NuGet-csomagkezelő>Package Csomagkezelő konzol elemet.
A Csomagkezelő konzol paneljén futtassa az alábbi parancsokat a csomagok telepítéséhez. További információ: Microsoft.Azure.Management.DataFactory NuGet csomag.
Install-Package Microsoft.Azure.Management.DataFactory Install-Package Microsoft.Azure.Management.ResourceManager -IncludePrerelease Install-Package Microsoft.Identity.Client
Adat-előállító ügyfél létrehozása
Nyissa meg a Program.cs fájlt, majd illessze be az alábbi utasításokat, hogy a névterekre mutató hivatkozásokat tudjon felvenni.
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.Identity.Client;
Adja hozzá az alábbi kódot a Main metódushoz, amely beállítja a változókat. Cserélje le a helyőrzőket a saját értékeire. 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 és egyebek) és számítások (HDInsight és egyéb) más régiókban is lehetnek.
// 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 where the data factory resides>"; string resourceGroup = "<your resource group where the data factory resides>"; string region = "<the location of your resource group>"; string dataFactoryName = "<specify the name of data factory to create. It must be globally unique.>"; string storageAccount = "<your storage account name to copy data>"; string storageKey = "<your storage account key>"; // specify the container and input folder from which all files // need to be copied to the output folder. string inputBlobPath = "<path to existing blob(s) to copy data from, e.g. containername/inputdir>"; //specify the contains and output folder where the files are copied string outputBlobPath = "<the blob path to copy data to, e.g. containername/outputdir>"; // name of the Azure Storage linked service, blob dataset, and the pipeline string storageLinkedServiceName = "AzureStorageLinkedService"; string blobDatasetName = "BlobDataset"; string pipelineName = "Adfv2QuickStartPipeline";
Megjegyzés
Szuverén felhők esetén az ActiveDirectoryAuthority és a ResourceManagerUrl (BaseUri) megfelelő, felhőspecifikus végpontokat kell használnia. Az USA-beli Azure Gov-ban például a szolgáltatót https://login.microsoftonline.us használná a https://login.microsoftonline.comhelyett, és a https://management.azure.com/helyett használnáhttps://management.usgovcloudapi.net, majd létrehozná az adat-előállító felügyeleti ügyfelet. A PowerShell használatával egyszerűen lekérheti a végponti URL-címeket a különböző felhőkhöz a "Get-AzEnvironment | Format-List", amely az egyes felhőkörnyezetek végpontjainak listáját adja vissza.
Adja hozzá a következő kódot a Main metódushoz, amely létrehozza a DataFactoryManagementClient osztály egy példányát . Ezzel az objektummal adat-előállítót, társított szolgáltatást, adatkészleteket és adatcsatornát is létrehozhat. 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 IConfidentialClientApplication app = ConfidentialClientApplicationBuilder.Create(applicationId) .WithAuthority("https://login.microsoftonline.com/" + tenantID) .WithClientSecret(authenticationKey) .WithLegacyCacheCompatibility(false) .WithCacheOptions(CacheOptions.EnableSharedCacheOptions) .Build(); AuthenticationResult result = await app.AcquireTokenForClient( new string[]{ "https://management.azure.com//.default"}) .ExecuteAsync(); 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 a Main metódushoz, amely létrehozza az adat-előállítót.
// Create a data factory
Console.WriteLine("Creating 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ás létrehozása
Adja hozzá a következő kódot a Main metódushoz, amely létrehoz egy Azure Storage-beli társított szolgáltatást.
Társított szolgáltatásokat hoz létre egy adat-előállítóban az adattárak és a számítási szolgáltatások adat-előállítóval történő társításához. Ebben a rövid útmutatóban csak egy Azure Storage társított szolgáltatást kell létrehoznia mind a másolási forráshoz, mind a fogadótárhoz; A minta neve "AzureStorageLinkedService".
// 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));
Adathalmaz létrehozása
Adja hozzá a következő kódot a Main metódushoz, amely létrehoz egy Azure Blob-adatkészletet.
Megadhat egy adatkészletet, amely a forrásból a fogadóba másolt adatokat jelöli. Ebben a példában a blob-adatkészlet az előző lépésben létrehozott Azure Storage-beli társított szolgáltatásra vonatkozik. Az adatkészlethez egy olyan paraméter szükséges, amelynek az értéke az adatkészletet feldolgozó tevékenységben van beállítva. A paraméter a "folderPath" létrehozására szolgál, amely az adatok tárolási helyére mutat.
// Create an Azure Blob dataset
Console.WriteLine("Creating dataset " + blobDatasetName + "...");
DatasetResource blobDataset = new DatasetResource(
new AzureBlobDataset
{
LinkedServiceName = new LinkedServiceReference
{
ReferenceName = storageLinkedServiceName
},
FolderPath = new Expression { Value = "@{dataset().path}" },
Parameters = new Dictionary<string, ParameterSpecification>
{
{ "path", new ParameterSpecification { Type = ParameterType.String } }
}
}
);
client.Datasets.CreateOrUpdate(
resourceGroup, dataFactoryName, blobDatasetName, blobDataset);
Console.WriteLine(
SafeJsonConvert.SerializeObject(blobDataset, client.SerializationSettings));
Folyamat létrehozása
Adja hozzá a következő kódot a Main metódushoz, amely létrehozza a másolási tevékenységet tartalmazó folyamatot.
Ebben a példában ez a folyamat egy tevékenységet tartalmaz, és két paramétert vesz fel: a bemeneti blob elérési útját és a kimeneti blob elérési útját. A paraméterek értékei a folyamat indításakor/futtatásakor lesznek beállítva. A másolási tevékenység az előző lépésben kimenetként és bemenetként létrehozott blob-adatkészletre hivatkozik. Ha az adatkészlet bemeneti adatkészletként van használatban, a bemeneti elérési út van megadva. Ha az adatkészlet kimeneti adatkészletként van használatban, a kimeneti elérési út van megadva.
// Create a pipeline with a copy activity
Console.WriteLine("Creating pipeline " + pipelineName + "...");
PipelineResource pipeline = new PipelineResource
{
Parameters = new Dictionary<string, ParameterSpecification>
{
{ "inputPath", new ParameterSpecification { Type = ParameterType.String } },
{ "outputPath", new ParameterSpecification { Type = ParameterType.String } }
},
Activities = new List<Activity>
{
new CopyActivity
{
Name = "CopyFromBlobToBlob",
Inputs = new List<DatasetReference>
{
new DatasetReference()
{
ReferenceName = blobDatasetName,
Parameters = new Dictionary<string, object>
{
{ "path", "@pipeline().parameters.inputPath" }
}
}
},
Outputs = new List<DatasetReference>
{
new DatasetReference
{
ReferenceName = blobDatasetName,
Parameters = new Dictionary<string, object>
{
{ "path", "@pipeline().parameters.outputPath" }
}
}
},
Source = new BlobSource { },
Sink = new BlobSink { }
}
}
};
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 metódushoz, amely elindítja a folyamat futását.
Ez a kód a folyamatban megadott inputPath és outputPath paraméterek értékeit is beállítja a forrás- és fogadó blobelérési útvonalak tényleges értékeivel.
// Create a pipeline run
Console.WriteLine("Creating pipeline run...");
Dictionary<string, object> parameters = new Dictionary<string, object>
{
{ "inputPath", inputBlobPath },
{ "outputPath", outputBlobPath }
};
CreateRunResponse runResponse = client.Pipelines.CreateRunWithHttpMessagesAsync(
resourceGroup, dataFactoryName, pipelineName, parameters: parameters
).Result.Body;
Console.WriteLine("Pipeline run ID: " + runResponse.RunId);
Folyamat futásának monitorozása
Adja hozzá a következő kódot a Main metódushoz az állapot folyamatos, az adatok másolásának befejezéséig tartó ellenőrzéséhez.
// 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" || pipelineRun.Status == "Queued") System.Threading.Thread.Sleep(15000); else break; }
Adja hozzá a következő kódot a Main metódushoz, amely lekéri a másolási tevékenység futtatási adatait, például az olvasott vagy írt adatok méretét.
// 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
Állítsa össze és indítsa el az alkalmazást, majd ellenőrizze a folyamat-végrehajtást.
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ási á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 futtatási részletei az olvasási/írási adatok méretével. Ezután az olyan eszközökkel, mint a Azure Storage Explorer, ellenőrizze, hogy a blob(ok) át lesznek-e másolva a "outputBlobPath" fájlba a változókban megadott "inputBlobPath" fájlból.
Példakimenet
Creating data factory SPv2Factory0907...
{
"identity": {
"type": "SystemAssigned"
},
"location": "East US"
}
Creating linked service AzureStorageLinkedService...
{
"properties": {
"type": "AzureStorage",
"typeProperties": {
"connectionString": {
"value": "DefaultEndpointsProtocol=https;AccountName=<storageAccountName>;AccountKey=<storageAccountKey>",
"type": "SecureString"
}
}
}
}
Creating dataset BlobDataset...
{
"properties": {
"type": "AzureBlob",
"typeProperties": {
"folderPath": {
"value": "@{dataset().path}",
"type": "Expression"
}
},
"linkedServiceName": {
"referenceName": "AzureStorageLinkedService",
"type": "LinkedServiceReference"
},
"parameters": {
"path": {
"type": "String"
}
}
}
}
Creating pipeline Adfv2QuickStartPipeline...
{
"properties": {
"activities": [
{
"type": "Copy",
"typeProperties": {
"source": {
"type": "BlobSource"
},
"sink": {
"type": "BlobSink"
}
},
"inputs": [
{
"referenceName": "BlobDataset",
"parameters": {
"path": "@pipeline().parameters.inputPath"
},
"type": "DatasetReference"
}
],
"outputs": [
{
"referenceName": "BlobDataset",
"parameters": {
"path": "@pipeline().parameters.outputPath"
},
"type": "DatasetReference"
}
],
"name": "CopyFromBlobToBlob"
}
],
"parameters": {
"inputPath": {
"type": "String"
},
"outputPath": {
"type": "String"
}
}
}
}
Creating pipeline run...
Pipeline run ID: 308d222d-3858-48b1-9e66-acd921feaa09
Checking pipeline run status...
Status: InProgress
Status: InProgress
Checking copy activity run details...
{
"dataRead": 331452208,
"dataWritten": 331452208,
"copyDuration": 23,
"throughput": 14073.209,
"errors": [],
"effectiveIntegrationRuntime": "DefaultIntegrationRuntime (West US)",
"usedDataIntegrationUnits": 2,
"billedDuration": 23
}
Press any key to exit...
Kimenet ellenőrzése
A folyamat automatikusan létrehozza a kimeneti mappát az adftutorial blobtárolóban. Ezután átmásolja a emp.txt fájlt a bemeneti mappából a kimeneti mappába.
- A Azure Portal a fenti Add an input folder and file for the blob container (Bemeneti mappa és fájl hozzáadása a blobtárolóhoz) szakaszban leállítva az adftutorial tároló oldalán válassza a Frissítés lehetőséget a kimeneti mappa megtekintéséhez.
- A mappalistában válassza a kimenet lehetőséget.
- Ellenőrizze, hogy az emp.txt fájl bekerült-e a kimeneti mappába.
Az erőforrások eltávolítása
Az adat-előállító programozott törléséhez adja hozzá a következő kódsorokat a programhoz:
Console.WriteLine("Deleting the data factory");
client.Factories.Delete(resourceGroup, dataFactoryName);
Következő lépések
A példában szereplő folyamat adatokat másol az egyik helyről egy másikra egy Azure Blob Storage-ban. A Data Factory más forgatókönyvekben való használatát ismertető további információkért tekintse meg az oktatóanyagokat.