Hantera Azure Data Lake Analytics med en .NET-app

Viktigt

Azure Data Lake Analytics drog sig tillbaka den 29 februari 2024. Läs mer med det här meddelandet.

För dataanalys kan din organisation använda Azure Synapse Analytics eller Microsoft Fabric.

Den här artikeln beskriver hur du hanterar Azure Data Lake Analytics-konton, datakällor, användare och jobb med hjälp av en app som skrivits med Azure .NET SDK.

Förutsättningar

  • Visual Studio 2015, Visual Studio 2013 uppdatering 4 eller Visual Studio 2012 med Visual C++ installerat.
  • Microsoft Azure SDK för .NET version 2.5 eller högre. Installera den med hjälp av installationsprogrammet för webbplattformen.
  • Nödvändiga NuGet-paket

Installera NuGet-paket

Paket Version
Microsoft.Rest.ClientRuntime.Azure.Authentication 2.3.1
Microsoft.Azure.Management.DataLake.Analytics 3.0.0
Microsoft.Azure.Management.DataLake.Store 2.2.0
Microsoft.Azure.Management.ResourceManager 1.6.0-förhandsversion
Microsoft.Azure.Graph.RBAC 3.4.0-förhandsversion

Du kan installera dessa paket via NuGet-kommandoraden med följande kommandon:

Install-Package -Id Microsoft.Rest.ClientRuntime.Azure.Authentication  -Version 2.3.1
Install-Package -Id Microsoft.Azure.Management.DataLake.Analytics  -Version 3.0.0
Install-Package -Id Microsoft.Azure.Management.DataLake.Store  -Version 2.2.0
Install-Package -Id Microsoft.Azure.Management.ResourceManager  -Version 1.6.0-preview
Install-Package -Id Microsoft.Azure.Graph.RBAC -Version 3.4.0-preview

Vanliga variabler

string subid = "<Subscription ID>"; // Subscription ID (a GUID)
string tenantid = "<Tenant ID>"; // AAD tenant ID or domain. For example, "contoso.onmicrosoft.com"
string rg == "<value>"; // Resource  group name
string clientid = "abcdef01-2345-6789-0abc-def012345678"; // Sample client ID

Autentisering

Du har flera alternativ för att logga in på Azure Data Lake Analytics. Följande kodfragment visar ett exempel på autentisering med interaktiv användarautentisering med ett popup-fönster.

För ClientID kan du antingen använda ID:t för en användare eller program-ID:t (klient) för ett huvudnamn för tjänsten.

using System;
using System.IO;
using System.Threading;
using System.Security.Cryptography.X509Certificates;

using Microsoft.Rest;
using Microsoft.Rest.Azure.Authentication;
using Microsoft.Azure.Management.DataLake.Analytics;
using Microsoft.Azure.Management.DataLake.Analytics.Models;
using Microsoft.Azure.Management.DataLake.Store;
using Microsoft.Azure.Management.DataLake.Store.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using Microsoft.Azure.Graph.RBAC;

public static Program
{
   public static string TENANT = "microsoft.onmicrosoft.com";
   public static string CLIENTID = "abcdef01-2345-6789-0abc-def012345678";
   public static System.Uri ARM_TOKEN_AUDIENCE = new System.Uri( @"https://management.core.windows.net/");
   public static System.Uri ADL_TOKEN_AUDIENCE = new System.Uri( @"https://datalake.azure.net/" );
   public static System.Uri GRAPH_TOKEN_AUDIENCE = new System.Uri( @"https://graph.windows.net/" );

   static void Main(string[] args)
   {
      string MY_DOCUMENTS= System.Environment.GetFolderPath( System.Environment.SpecialFolder.MyDocuments);
      string TOKEN_CACHE_PATH = System.IO.Path.Combine(MY_DOCUMENTS, "my.tokencache");

      var tokenCache = GetTokenCache(TOKEN_CACHE_PATH);
      var armCreds = GetCreds_User_Popup(TENANT, ARM_TOKEN_AUDIENCE, CLIENTID, tokenCache);
      var adlCreds = GetCreds_User_Popup(TENANT, ADL_TOKEN_AUDIENCE, CLIENTID, tokenCache);
      var graphCreds = GetCreds_User_Popup(TENANT, GRAPH_TOKEN_AUDIENCE, CLIENTID, tokenCache);
   }
}

Källkoden för GetCreds_User_Popup och koden för andra alternativ för autentisering beskrivs i Data Lake Analytics .NET-autentiseringsalternativ

Skapa klienthanteringsobjekten

var resourceManagementClient = new ResourceManagementClient(armCreds) { SubscriptionId = subid };

var adlaAccountClient = new DataLakeAnalyticsAccountManagementClient(armCreds);
adlaAccountClient.SubscriptionId = subid;

var adlsAccountClient = new DataLakeStoreAccountManagementClient(armCreds);
adlsAccountClient.SubscriptionId = subid;

var adlaCatalogClient = new DataLakeAnalyticsCatalogManagementClient(adlCreds);
var adlaJobClient = new DataLakeAnalyticsJobManagementClient(adlCreds);

var adlsFileSystemClient = new DataLakeStoreFileSystemManagementClient(adlCreds);

var  graphClient = new GraphRbacManagementClient(graphCreds);
graphClient.TenantID = domain;

Hantera konton

Skapa en Azure-resursgrupp

Om du inte redan har skapat en måste du ha en Azure-resursgrupp för att skapa dina Data Lake Analytics komponenter. Du behöver dina autentiseringsuppgifter, prenumerations-ID och en plats. Följande kod visar hur du skapar en resursgrupp:

var resourceGroup = new ResourceGroup { Location = location };
resourceManagementClient.ResourceGroups.CreateOrUpdate(groupName, rg);

Mer information finns i Azure-resursgrupper och Data Lake Analytics.

Skapa ett Data Lake Store-konto

Adla-konto som alltid kräver ett ADLS-konto. Om du inte redan har en att använda kan du skapa en med följande kod:

var new_adls_params = new DataLakeStoreAccount(location: _location);
adlsAccountClient.Account.Create(rg, adls, new_adls_params);

Skapa ett Data Lake Analytics-konto

Följande kod skapar ett ADLS-konto

var new_adla_params = new DataLakeAnalyticsAccount()
{
   DefaultDataLakeStoreAccount = adls,
   Location = location
};

adlaClient.Account.Create(rg, adla, new_adla_params);

Visa en lista över Data Lake Store-konton

var adlsAccounts = adlsAccountClient.Account.List().ToList();
foreach (var adls in adlsAccounts)
{
   Console.WriteLine($"ADLS: {0}", adls.Name);
}

Lista Data Lake Analytics konton

var adlaAccounts = adlaClient.Account.List().ToList();

for (var adla in AdlaAccounts)
{
   Console.WriteLine($"ADLA: {0}, adla.Name");
}

Kontrollera om det finns ett konto

bool exists = adlaClient.Account.Exists(rg, adla));

Hämta information om ett konto

bool exists = adlaClient.Account.Exists(rg, adla));
if (exists)
{
   var adla_accnt = adlaClient.Account.Get(rg, adla);
}

Ta bort ett konto

if (adlaClient.Account.Exists(rg, adla))
{
   adlaClient.Account.Delete(rg, adla);
}

Hämta standardkontot för Data Lake Store

Varje Data Lake Analytics konto kräver ett standardkonto för Data Lake Store. Använd den här koden för att fastställa standardlagringskontot för ett Analytics-konto.

if (adlaClient.Account.Exists(rg, adla))
{
  var adla_accnt = adlaClient.Account.Get(rg, adla);
  string def_adls_account = adla_accnt.DefaultDataLakeStoreAccount;
}

Hantera datakällor

Data Lake Analytics stöder för närvarande följande datakällor:

Du kan skapa länkar till Azure Storage-konton.

string storage_key = "xxxxxxxxxxxxxxxxxxxx";
string storage_account = "mystorageaccount";
var addParams = new AddStorageAccountParameters(storage_key);            
adlaClient.StorageAccounts.Add(rg, adla, storage_account, addParams);

Visa en lista över Azure Storage-datakällor

var stg_accounts = adlaAccountClient.StorageAccounts.ListByAccount(rg, adla);

if (stg_accounts != null)
{
  foreach (var stg_account in stg_accounts)
  {
      Console.WriteLine($"Storage account: {0}", stg_account.Name);
  }
}

Lista Data Lake Store-datakällor

var adls_accounts = adlsClient.Account.List();

if (adls_accounts != null)
{
  foreach (var adls_accnt in adls_accounts)
  {
      Console.WriteLine($"ADLS account: {0}", adls_accnt.Name);
  }
}

Ladda upp och ladda ned mappar och filer

Du kan använda Data Lake Store-filsystemets klienthanteringsobjekt för att ladda upp och ladda ned enskilda filer eller mappar från Azure till din lokala dator med hjälp av följande metoder:

  • UploadFolder
  • UploadFile
  • DownloadFolder
  • DownloadFile

Den första parametern för dessa metoder är namnet på Data Lake Store-kontot, följt av parametrar för källsökvägen och målsökvägen.

I följande exempel visas hur du laddar ned en mapp i Data Lake Store.

adlsFileSystemClient.FileSystem.DownloadFolder(adls, sourcePath, destinationPath);

Skapa en fil i ett Data Lake Store-konto

using (var memstream = new MemoryStream())
{
   using (var sw = new StreamWriter(memstream, UTF8Encoding.UTF8))
   {
      sw.WriteLine("Hello World");
      sw.Flush();
      
      memstream.Position = 0;

      adlsFileSystemClient.FileSystem.Create(adls, "/Samples/Output/randombytes.csv", memstream);
   }
}

Verifiera Azure Storage-kontosökvägar

Följande kod kontrollerar om ett Azure Storage-konto (storageAccntName) finns i ett Data Lake Analytics-konto (analyticsAccountName) och om det finns en container (containerName) i Azure Storage-kontot.

string storage_account = "mystorageaccount";
string storage_container = "mycontainer";
bool accountExists = adlaClient.Account.StorageAccountExists(rg, adla, storage_account));
bool containerExists = adlaClient.Account.StorageContainerExists(rg, adla, storage_account, storage_container));

Hantera katalog och jobb

DataLakeAnalyticsCatalogManagementClient-objektet innehåller metoder för att hantera SQL-databasen som tillhandahålls för varje Azure-Data Lake Analytics konto. DataLakeAnalyticsJobManagementClient innehåller metoder för att skicka och hantera jobb som körs i databasen med U-SQL-skript.

Lista databaser och scheman

Bland de flera saker du kan lista är de vanligaste databaserna och deras schema. Följande kod hämtar en samling databaser och räknar sedan upp schemat för varje databas.

var databases = adlaCatalogClient.Catalog.ListDatabases(adla);
foreach (var db in databases)
{
  Console.WriteLine($"Database: {db.Name}");
  Console.WriteLine(" - Schemas:");
  var schemas = adlaCatalogClient.Catalog.ListSchemas(adla, db.Name);
  foreach (var schm in schemas)
  {
      Console.WriteLine($"\t{schm.Name}");
  }
}

Lista tabellkolumner

Följande kod visar hur du kommer åt databasen med en Data Lake Analytics Catalog-hanteringsklient för att visa kolumnerna i en angiven tabell.

var tbl = adlaCatalogClient.Catalog.GetTable(adla, "master", "dbo", "MyTableName");
IEnumerable<USqlTableColumn> columns = tbl.ColumnList;

foreach (USqlTableColumn utc in columns)
{
  Console.WriteLine($"\t{utc.Name}");
}

Skicka ett U-SQL-jobb

Följande kod visar hur du använder en Data Lake Analytics jobbhanteringsklient för att skicka ett jobb.

string scriptPath = "/Samples/Scripts/SearchResults_Wikipedia_Script.txt";
Stream scriptStrm = adlsFileSystemClient.FileSystem.Open(_adlsAccountName, scriptPath);
string scriptTxt = string.Empty;
using (StreamReader sr = new StreamReader(scriptStrm))
{
    scriptTxt = sr.ReadToEnd();
}

var jobName = "SR_Wikipedia";
var jobId = Guid.NewGuid();
var properties = new USqlJobProperties(scriptTxt);
var parameters = new JobInformation(jobName, JobType.USql, properties, priority: 1, degreeOfParallelism: 1, jobId: jobId);
var jobInfo = adlaJobClient.Job.Create(adla, jobId, parameters);
Console.WriteLine($"Job {jobName} submitted.");

Lista misslyckade jobb

Följande kod visar information om jobb som misslyckades.

var odq = new ODataQuery<JobInformation> { Filter = "result eq 'Failed'" };
var jobs = adlaJobClient.Job.List(adla, odq);
foreach (var j in jobs)
{
   Console.WriteLine($"{j.Name}\t{j.JobId}\t{j.Type}\t{j.StartTime}\t{j.EndTime}");
}

Lista pipelines

Följande kod visar information om varje pipeline med jobb som skickas till kontot.

var pipelines = adlaJobClient.Pipeline.List(adla);
foreach (var p in pipelines)
{
   Console.WriteLine($"Pipeline: {p.Name}\t{p.PipelineId}\t{p.LastSubmitTime}");
}

Visa en lista över upprepningar

Följande kod visar information om varje upprepning av jobb som skickas till kontot.

var recurrences = adlaJobClient.Recurrence.List(adla);
foreach (var r in recurrences)
{
   Console.WriteLine($"Recurrence: {r.Name}\t{r.RecurrenceId}\t{r.LastSubmitTime}");
}

Vanliga grafscenarier

Slå upp användare i katalogen Microsoft Entra ID

var userinfo = graphClient.Users.Get( "bill@contoso.com" );

Hämta ObjectId för en användare i katalogen Microsoft Entra ID

var userinfo = graphClient.Users.Get( "bill@contoso.com" );
Console.WriteLine( userinfo.ObjectId )

Hantera beräkningsprinciper

Objektet DataLakeAnalyticsAccountManagementClient innehåller metoder för att hantera beräkningsprinciperna för ett Data Lake Analytics konto.

Lista beräkningsprinciper

Följande kod hämtar en lista över beräkningsprinciper för ett Data Lake Analytics-konto.

var policies = adlaAccountClient.ComputePolicies.ListByAccount(rg, adla);
foreach (var p in policies)
{
   Console.WriteLine($"Name: {p.Name}\tType: {p.ObjectType}\tMax AUs / job: {p.MaxDegreeOfParallelismPerJob}\tMin priority / job: {p.MinPriorityPerJob}");
}

Skapa en ny beräkningsprincip

Följande kod skapar en ny beräkningsprincip för ett Data Lake Analytics konto, som anger maximalt antal TILLGÄNGLIGA ENHETER för den angivna användaren till 50 och den minsta jobbprioriteten till 250.

var userAadObjectId = "3b097601-4912-4d41-b9d2-78672fc2acde";
var newPolicyParams = new ComputePolicyCreateOrUpdateParameters(userAadObjectId, "User", 50, 250);
adlaAccountClient.ComputePolicies.CreateOrUpdate(rg, adla, "GaryMcDaniel", newPolicyParams);

Nästa steg