Microsoft ADO.NET-driver for Microsoft Fabric Data Engineering

ADO.NET er en mye brukt datatilgang i .NET-økosystemet som gjør det mulig for applikasjoner å koble til og arbeide med data fra databaser og store dataplattformer.

Microsoft ADO.NET Driver for Fabric Data Engineering lar deg koble til, spørre og administrere Spark-arbeidsbelastninger i Fabric med påliteligheten og enkelheten til standard ADO.NET-mønstre. Bygget på Fabric sine Livy-API-er, gir driveren sikker og fleksibel Spark SQL-tilkobling til dine .NET-applikasjoner ved hjelp av kjente DbConnection, DbCommand, og DbDataReader abstraksjoner.

Viktige funksjoner

  • ADO.NET API-er: Kjente DbConnection, DbCommand, DbDataReader, DbParameter, og DbProviderFactory abstraksjoner for Spark SQL-tilkobling
  • Microsoft Entra ID-autentisering: Flere autentiseringsstrømmer, inkludert Azure CLI, interaktiv nettleser, klientopplysninger, sertifikatbasert autentisering og tilgangstokenautentisering
  • Spark SQL Native spørringsstøtte: Direkte kjøring av Spark SQL-setninger med parameteriserte spørringer
  • Omfattende støtte for datatyper: Støtte for alle Spark SQL-datatyper, inkludert komplekse typer (ARRAY, MAP, STRUCT)
  • Tilkoblingspooling: Innebygd tilkoblingspooladministrasjon for bedre ytelse
  • Gjenbruk av sesjoner: Effektiv Spark-sesjonshåndtering for å redusere oppstartsforsinkelse
  • Høysamtidige økter: Meld deg til delt Fabric Livy-kapasitet med separate REPL-er for samtidig leide HC-økter
  • Async Prefetch: Bakgrunnsdatainnlasting for bedre ytelse med store resultatsett
  • Auto-rekoble: Klassisk sesjonsgjenoppretting etter tilkoblingsfeil; HC-feil kommer til overflaten for applikasjonskontrollert retry

Bemerkning

I åpen kildekode Apache Spark brukes database og skjema synonymt. For eksempel, å kjøre SHOW SCHEMAS eller SHOW DATABASES i en Fabric-notatbok gir samme resultat — en liste over alle skjemaer i lakehouse.

Forutsetninger

Før du bruker Microsoft ADO.NET Driver for Fabric Data Engineering, sørg for at du har:

  • .NET-kjøretid: .NET 8.0 eller nyere
  • Fabric Access: Tilgang til et Fabric-arbeidsområde med Data Engineering-funksjonalitet
  • Azure Entra ID Credentials: Passende legitimasjon for autentisering
  • Workspace- og Lakehouse-ID-er: GUID-identifikatorer for ditt Fabric workspace og lakehouse
  • Azure CLI (valgfritt): Kreves for Azure CLI autentiseringsmetode

Last ned, inkludere, referer til og verifiser

Last ned NuGet-pakken

Viktig!

Den siterte flerverdisyntaksen HcConfOverrides dokumentert i denne artikkelen krever 2.0.1 NuGet-pakken eller nyere.

Referanse NuGet-pakken i prosjektet ditt

Inkluder den nedlastede NuGet-pakken i prosjektet ditt og legg til en referanse for pakken i prosjektfilen din:

<ItemGroup>
    <PackageReference Include="Microsoft.Spark.Livy.AdoNet" Version="2.0.1" />
</ItemGroup>

Bekreft installasjon

Etter inkludering og referanse, sjekk at pakken er tilgjengelig i prosjektet ditt:

using Microsoft.Spark.Livy.AdoNet;

// Verify the provider is registered
var factory = LivyProviderFactory.Instance;
Console.WriteLine($"Provider: {factory.GetType().Name}");

Eksempel på hurtigstart

using Microsoft.Spark.Livy.AdoNet;

// Connection string with required parameters
string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=AzureCli;";

// Create and open connection
using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

Console.WriteLine("Connected successfully!");

// Execute a query
using var command = connection.CreateCommand();
command.CommandText = "SELECT 'Hello from Fabric!' as message";

using var reader = await command.ExecuteReaderAsync();
if (await reader.ReadAsync())
{
    Console.WriteLine(reader.GetString(0));
}

Tilkoblingsstrengformat

Grunnleggende format

Microsoft ADO.NET Driver bruker standard ADO.NET tilkoblingsstrengformat:

Parameter1=Value1;Parameter2=Value2;...

Påkrevde parametere

Parameter Beskrivelse Eksempel
Server Microsoft Fabric API-endepunkt. Spesifiser verten uten API-versjonssuffiks. https://api.fabric.microsoft.com
SparkServerType Servertypeidentifikator Fabric
FabricWorkspaceID Microsoft Fabric arbeidsområdeidentifikator (GUID) 4bbf89a8-66bb-443f-91af-df31e6a7560b
FabricLakehouseID Microsoft Fabric lakehouse-identifikator (GUID) d8faa650-1343-496b-b9cc-d4168a676f90
AuthFlow Godkjenningsmetode AzureCli, BrowserBased, , ClientSecretCredentialClientCertificateCredential, AuthAccessToken, ,FileToken

Valgfrie parametere

Tilkoblingsinnstillinger

Parameter Type Forhåndsinnstilt Beskrivelse
LivyStatementTimeoutSeconds Integer 600 Tid i sekunder for å vente på setningsutførelse
HttpConnectionTimeoutInSeconds Integer 30 Tid til å vente på en HTTP-tilkobling og, når klientpoolen er oppbrukt, på en kvalifisert poolet tilkobling.
SessionName String (auto) Egendefinert navn for Spark-økten
EnvironmentID UUID (ingen) Valgfri Fabric-miljøidentifikator for klassiske og HC-økter.
AutoReconnect boolsk false Slå på gjenoppretting av klassiske sesjoner. I HC-modus returneres en stale-session-feil til applikasjonen og spilles ikke transparent av på nytt.

Innstillinger for tilkoblingspool

Parameter Type Forhåndsinnstilt Beskrivelse
ConnectionPoolEnabled boolsk true Aktiver tilkoblingspooling
MinPoolSize Integer 1 Godkjent for kompatibilitet, men ikke håndhevet som forhåndsallokert eller vedlikeholdt minimumsplan.
MaxPoolSize Integer 50 Maksimalt antall sammenlagte Livy-økter per poolnøkkel.
ValidateConnections boolsk true Valider felles økter eksternt når de er utlånt.
ValidationTimeoutMs Integer 5000 Maksimal valideringstid i millisekunder.

Høye samtidighetsinnstillinger

Parameter Type Forhåndsinnstilt Beskrivelse
HcEnabled boolsk false Aktiver Fabric Livy High Concurrency-modus. Krever SparkServerType=Fabric og ruter økt-, setnings-, avbryt- og oppryddingsoperasjoner gjennom HC-endepunkter.
HcSessionTag String (ingen) Valgfritt tips for delt-sesjon-pakking. Hvis du utelater verdien eller skriver inn en tom eller bare blank verdi, sender ikke driveren en tag.
HcConfOverrides String (ingen) Semikolon-avgrenset Spark-konfigurasjon overstyrer for opprettelse av HC-økter. Oppgi den komplette verdien når den inneholder flere overstyringer.
hcAcquireTimeoutSeconds Integer 300 HC får timeout/sesjonsklar timeout på sekunder (120..3600).
hcAcquirePollingIntervalMs Integer 1000 HC oppnår pollingintervall i millisekunder (50..30000 akseptert, kjøretidsklemme 100..5000).

Loggingsinnstillinger

Parameter Type Forhåndsinnstilt Beskrivelse
LogLevel String Information Log-nivå: Trace, Debug, Information, , Warning, Error
LogFilePath String %LOCALAPPDATA%\FabricSparkAdoNet\Logspå Windows Sti for filbasert logging.

Kryssdriver-aliaser: Føreren godtar JDBC- og ODBC-egenskapsnavn i tillegg til native ADO.NET navn (f.eks. WorkspaceId mapps to FabricWorkspaceID, LakehouseId maps to FabricLakehouseID). Alle eiendomsnavn er små og små bokstaver.

Eksempler på tilkoblingsstrenger

Basic connection (Azure CLI authentication)

Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli

Høy felles linjeforbindelse

Høy samtidighet er tilgjengelig for Microsoft Fabric-tilkoblinger. Sett HcEnabled=true; standard ADO.NET-tilkoblings- og kommando-API-er forblir uendret. Bruk den uversjonerte Fabric API-verten for Server; driveren bruker FabricVersion=v1 og LivyApiVersion=2023-12-01 som standard når den bygger HC-endepunktet.

using Microsoft.Spark.Livy.AdoNet;

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=AzureCli;" +
    "HcEnabled=true;";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

using var command = connection.CreateCommand();
command.CommandText = "SELECT 1 AS value";

object? result = await command.ExecuteScalarAsync();
Console.WriteLine($"Result: {result}");

For fullstendig konfigurasjonsveiledning, se avsnittet omHigh-Concurrency (HC) Mode .

Med tilkoblingspooling-alternativer

Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli;ConnectionPoolEnabled=true;MaxPoolSize=10

Med automatisk gjenoppkobling og logging

Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli;AutoReconnect=true;LogLevel=Debug

Autentisering

Microsoft ADO.NET Driver støtter flere autentiseringsmetoder via Microsoft Entra ID (tidligere Azure Active Directory). Autentisering konfigureres ved å bruke parameteren AuthFlow i tilkoblingsstrengen.

Godkjenningsmetoder

AuthFlow-verdi Beskrivelse Best for
AzureCli Uses Azure CLI cached credentials Utvikling og testing
BrowserBased Interaktiv nettleserbasert autentisering Brukerrettede applikasjoner
ClientSecretCredential Tjenesteprinsipp med klienthemmelighet Automatiserte tjenester, bakgrunnsjobber
ClientCertificateCredential Tjenesteansvarlig med sertifikat Enterprise-programmer
AuthAccessToken Forhåndsanskaffet bærertilgangstoken Tilpassede autentiseringsscenarier

Azure CLI-autentisering

Best for: Utvikling og testing

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=AzureCli;";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

Forutsetninger:

  • Azure CLI installert: az --version
  • Innlogget: az login

Interaktiv nettleserautentisering

Best for: Brukerrettede applikasjoner

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=BrowserBased;" +
    "AuthTenantID=<tenant-id>;";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync(); // Opens browser for authentication

Virkemåte:

  • Åpner et nettleservindu for brukerautentisering
  • Legitimasjon caches for påfølgende tilkoblinger

Autentisering av klientlegitimasjon (tjenesteleder)

Best for: Automatiserte tjenester og bakgrunnsjobber

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=ClientSecretCredential;" +
    "AuthTenantID=<tenant-id>;" +
    "AuthClientID=<client-id>;" +
    "AuthClientSecret=<client-secret>;";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

Nødvendige parametere:

  • AuthTenantID: Azure leietaker-ID
  • AuthClientID: Applikasjons-(klient-)ID fra Microsoft Entra-ID
  • AuthClientSecret: Klienthemmelighet fra Microsoft Entra-ID

Sertifikatbasert godkjenning

Best for: Bedriftsapplikasjoner som krever sertifikatbasert autentisering

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=ClientCertificateCredential;" +
    "AuthTenantID=<tenant-id>;" +
    "AuthClientID=<client-id>;" +
    "AuthCertificatePath=C:\\certs\\mycert.pfx;" +
    "AuthCertificatePassword=<password>;";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

Nødvendige parametere:

  • AuthTenantID: Azure leietaker-ID
  • AuthClientID: Applikasjons-ID (klient-ID)
  • AuthCertificatePath: Vei til PFX/PKCS12-sertifikatfilen
  • AuthCertificatePassword: Sertifikatpassord

Autentisering av tilgangstoken

Best for: Tilpassede autentiseringsscenarier

// Acquire token through your custom mechanism
string accessToken = await AcquireTokenFromCustomSourceAsync();

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=AuthAccessToken;" +
    $"AuthAccessToken={accessToken};";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

Brukseksempler

Grunnleggende tilkobling og spørring

using Microsoft.Spark.Livy.AdoNet;

string connectionString =
    "Server=https://api.fabric.microsoft.com;" +
    "SparkServerType=Fabric;" +
    "FabricWorkspaceID=<workspace-id>;" +
    "FabricLakehouseID=<lakehouse-id>;" +
    "AuthFlow=AzureCli;";

using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();

Console.WriteLine($"Connected! Server version: {connection.ServerVersion}");

// Execute a query
using var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM employees LIMIT 10";

using var reader = await command.ExecuteReaderAsync();

// Print column names
for (int i = 0; i < reader.FieldCount; i++)
{
    Console.Write($"{reader.GetName(i)}\t");
}
Console.WriteLine();

// Print rows
while (await reader.ReadAsync())
{
    for (int i = 0; i < reader.FieldCount; i++)
    {
        Console.Write($"{reader.GetValue(i)}\t");
    }
    Console.WriteLine();
}

Parameteriserte spørringer

using var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM orders WHERE order_date >= @startDate AND status = @status";

// Add parameters
command.Parameters.AddWithValue("@startDate", new DateTime(2024, 1, 1));
command.Parameters.AddWithValue("@status", "completed");

using var reader = await command.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
    Console.WriteLine($"Order: {reader["order_id"]}, Total: {reader["total"]:C}");
}

ExecuteScalar for enkeltverdier

using var command = connection.CreateCommand();
command.CommandText = "SELECT COUNT(*) FROM customers";

var count = await command.ExecuteScalarAsync();
Console.WriteLine($"Total customers: {count}");

ExecuteNonQuery for DML-operasjoner

// INSERT
using var insertCommand = connection.CreateCommand();
insertCommand.CommandText = @"
    INSERT INTO employees (id, name, department, salary)
    VALUES (100, 'John Doe', 'Engineering', 85000)";

int rowsAffected = await insertCommand.ExecuteNonQueryAsync();
Console.WriteLine(rowsAffected >= 0
    ? $"Inserted {rowsAffected} row(s)"
    : "The insert completed, but the driver didn't return an update count.");

// UPDATE
using var updateCommand = connection.CreateCommand();
updateCommand.CommandText = "UPDATE employees SET salary = 90000 WHERE id = 100";

rowsAffected = await updateCommand.ExecuteNonQueryAsync();
Console.WriteLine(rowsAffected >= 0
    ? $"Updated {rowsAffected} row(s)"
    : "The update completed, but the driver didn't return an update count.");

// DELETE
using var deleteCommand = connection.CreateCommand();
deleteCommand.CommandText = "DELETE FROM employees WHERE id = 100";

rowsAffected = await deleteCommand.ExecuteNonQueryAsync();
Console.WriteLine(rowsAffected >= 0
    ? $"Deleted {rowsAffected} row(s)"
    : "The delete completed, but the driver didn't return an update count.");

Arbeid med store resultatsett

using var command = connection.CreateCommand();
command.CommandText = "SELECT * FROM large_table";

using var reader = await command.ExecuteReaderAsync();

int rowCount = 0;
while (await reader.ReadAsync())
{
    // Process each row
    ProcessRow(reader);
    rowCount++;

    if (rowCount % 10000 == 0)
    {
        Console.WriteLine($"Processed {rowCount} rows...");
    }
}

Console.WriteLine($"Total rows processed: {rowCount}");

Skjemaoppdagelse

// List all tables
using var showTablesCommand = connection.CreateCommand();
showTablesCommand.CommandText = "SHOW TABLES";

using var tablesReader = await showTablesCommand.ExecuteReaderAsync();
Console.WriteLine("Available tables:");
while (await tablesReader.ReadAsync())
{
    int tableNameOrdinal = tablesReader.GetOrdinal("tableName");
    Console.WriteLine($"  {tablesReader.GetString(tableNameOrdinal)}");
}

// Describe table structure
using var describeCommand = connection.CreateCommand();
describeCommand.CommandText = "DESCRIBE employees";

using var schemaReader = await describeCommand.ExecuteReaderAsync();
Console.WriteLine("\nTable structure for 'employees':");
while (await schemaReader.ReadAsync())
{
    Console.WriteLine($"  {schemaReader["col_name"]}: {schemaReader["data_type"]}");
}

// Show databases
using var dbCommand = connection.CreateCommand();
dbCommand.CommandText = "SHOW DATABASES";

using var dbReader = await dbCommand.ExecuteReaderAsync();
Console.WriteLine("\nAvailable databases:");
while (await dbReader.ReadAsync())
{
    Console.WriteLine($"  {dbReader.GetString(0)}");
}

Bruk av LivyConnectionStringBuilder

using Microsoft.Spark.Livy.AdoNet;

var builder = new LivyConnectionStringBuilder
{
    Server = "https://api.fabric.microsoft.com",
    SparkServerType = "Fabric",
    FabricWorkspaceID = "<workspace-id>",
    FabricLakehouseID = "<lakehouse-id>",
    AuthFlow = "AzureCli",
    ConnectionPoolingEnabled = true,
    MaxPoolSize = 10
};

using var connection = new LivyConnection(builder.ConnectionString);
await connection.OpenAsync();

Bruk av DbProviderFactory

using System.Data.Common;
using Microsoft.Spark.Livy.AdoNet;

// Register the provider factory (typically done at application startup)
DbProviderFactories.RegisterFactory("Microsoft.Spark.Livy.AdoNet", LivyProviderFactory.Instance);

// Create connection using factory
var factory = DbProviderFactories.GetFactory("Microsoft.Spark.Livy.AdoNet");

using var connection = factory.CreateConnection();
connection.ConnectionString = connectionString;

await connection.OpenAsync();

using var command = factory.CreateCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM employees LIMIT 5";

using var reader = await command.ExecuteReaderAsync();
// Process results...

Høy-samtidighet (HC) modus

High-concurrency (HC)-modus hjelper .NET-applikasjoner med å kjøre samtidige Spark SQL-arbeidsbelastninger uten å måtte opprette en separat klassisk Spark-økt for hver ADONET-tilkobling. Fabric kan plassere kompatible tilkoblinger i samme serverstyrte Livy-økt, samtidig som hver tilkobling får en isolert Read-Eval-Print Loop (REPL) for setningsutførelse.

Denne modellen kan redusere tilkoblingsoppstartstiden, unngå gjentatte Spark-sesjonsprovisioneringer, og bruke Fabric Spark-kapasiteten mer effektivt. Applikasjonen din fortsetter å bruke standard ADONET-API-er, inkludert DbConnection, DbCommand, DbDataReader, OpenAsync, og Close.

HC-modus er frivillig. Hvis du ikke aktiverer det, bruker driveren den klassiske Livy-sesjonsstien.

Velg mellom HC og klassisk modus

Bruk HC-modus når:

  • En ASP.NET-tjeneste håndterer samtidige forespørsler som åpner tilkoblinger og kjører Spark SQL.
  • En arbeidstjeneste, planlagt jobb eller parallell datapipeline lager burst av ADO.NET-tilkoblinger.
  • Flere tilkoblinger retter seg mot samme Fabric-arbeidsområde og lakehouse, og bruker kompatible Spark-konfigurasjoner.
  • Å redusere oppstartstid for tilkoblingen og gjentatt Spark-sesjonsoppsetting er viktig.
  • Arbeidsmengden din kan bruke delt, serveradministrert Spark-kapasitet samtidig som setningsutførelsen holdes isolert av REPL.

Bruk klassisk modus når:

  • Applikasjonen din bruker bare én eller noen få langvarige tilkoblinger.
  • Hver tilkobling krever en dedikert Spark-økt for streng arbeidsmengde eller ressursisolasjon.
  • Tilkoblinger krever vesentlig forskjellige Spark-konfigurasjoner som ikke skal dele en underliggende økt.
  • Fabric Livy-endepunktet for målarbeidsområdet og lakehouse støtter ikke HC-modus.

Hvordan HC-forbindelser fungerer

Når applikasjonen din kaller Open eller eller OpenAsync og ingen kompatibel pool-tilkobling er tilgjengelig, fører driveren:

  1. Ber om en HC-økt fra Fabric.
  2. Venter på at økten skal bli klar, frem til den konfigurerte anskaffelsestimeouten.
  3. Kobler ADONET-tilkoblingen til den tildelte HC-sesjonen og REPL.
  4. Ruter kommandoer, spørringer, kanselleringsforespørsler og opprydningsoperasjoner gjennom HC-endepunktene.

Separate, samtidig leide HC-økter bruker separate REPL-er. Kommandoer på én tilkobling deler den forbindelsens HC-økt og REPL.

Client-side pooling er aktivert som standard. Å lukke eller kvitte seg med en kvalifisert tilkobling returnerer normalt dens fysiske HC-økt og REPL til prosess-lokal pool for gjenbruk; det frigjør ikke nødvendigvis tildelingen eksternt. Med pooling deaktivert, utfører lukking av den fysiske tilkoblingen HC-opprydding. Fortsett å bruke using setninger slik at logiske forbindelser returnerer raskt.

Aktiver HC-modus

HC-modus er frivillig. Hvis du utelater hcEnabled eller setter den til falsk, bruker driveren den klassiske Livy-sesjonsruten.

Sett eiendom hcEnabled til sant for å få en HC-økt:

hcEnabled=true;

Viktig!

  1. For HC-tilkoblinger, bruk den uversjonerte Fabric API-verten for Server. Driveren bruker standard versjoner av Fabric og Livy API når den bygger HC-endepunktet.
  2. Eiendomsnavn er ikke små og små bokstaver.

Konfigurer sesjonspakking

HcSessionTag gir et serverside-hint for å pakke kompatible HC-økter inn i en underliggende Livy-økt. En matchende tagg garanterer ikke plassering i samme underliggende økt.

Hvis du utelater taggen eller oppgir en tom verdi eller bare hvit mellomrom, sender ikke driveren den i acquire-forespørselen. Å utelate taggen deaktiverer ikke HC-modus eller service-side packing. Sett en eksplisitt tagg når relaterte applikasjonsinstanser eller arbeidsbelastninger bør vurderes for delt kapasitet. Bruk en stabil, ikke-sensitiv operasjonsetikett, som reporting-service eller nightly-etl. Ikke inkluder hemmeligheter, tilgangstokens, personopplysninger, kundeidentifikatorer eller spørringstekst.

Spark-konfigurasjonen påvirker også sesjonskompatibiliteten. Brukes HcConfOverrides til å gi tillatelseslistede Spark-innstillinger for opprettelse av HC-økter:

Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;AuthFlow=AzureCli;HcEnabled=true;HcConfOverrides="spark.executor.memory=8g;spark.executor.cores=4";

For flere overstyringer, oppgi hele HcConfOverrides prisen. Et ikke-sitert semikolon starter en annen ytre forbindelsesstreng-egenskap; det utvider HcConfOverridesikke . Parseren aksepterer enkelt- eller dobbeltanførte verdier, bevarer semikolon og liketegn innenfor anførselsverdier, og dekoder doble samsvarende anførselstegn (''""eller ). Hvitrom rundt eiendomsnavn og ved ytterkantene av uanførte verdier ignoreres. Mellomrom innenfor uanførte verdier og alt mellomrom innenfor anførselsverdier bevares. Tomme verdier overstyrer miljøstandardene, og den siste duplikat-egenskapen vinner.

Du kan også la LivyConnectionStringBuilder deg håndtere pristilbud:

var builder = new Microsoft.Spark.Livy.AdoNet.LivyConnectionStringBuilder
{
    Server = "https://api.fabric.microsoft.com",
    SparkServerType = "Fabric",
    FabricWorkspaceID = "<workspace-id>",
    FabricLakehouseID = "<lakehouse-id>",
    AuthFlow = "AzureCli",
    HcEnabled = true,
    HcConfOverrides = "spark.executor.memory=8g;spark.executor.cores=4"
};

string connectionString = builder.ConnectionString;

Disse eksemplene krever Microsoft ADO.NET Driver versjon 2.0.1 eller nyere. Legg til arbeidsplass- og lakehouse-identifikatorer før du åpner en tilkobling. Begge overstyringene sendes i HC create-session-forespørselen som separate conf oppføringer. Hver overstyring må bruke en av disse små og små bokstav-sensitive nøklene:

  • spark.sql.shuffle.partitions
  • spark.executor.memory
  • spark.executor.cores
  • spark.driver.memory
  • spark.sql.ansi.enabled
  • spark.sql.legacy.timeParserPolicy
  • spark.sql.session.timeZone
  • livy.rsc.client.connect.timeout
  • livy.rsc.server.idle-timeout

Feilformede sitater avvises uten å inkludere innholdet i tilkoblingsstrengen i parse-feilen.

Bruk konsistente tagger og konfigurasjonsverdier på tvers av tilkoblinger som er ment å dele kapasitet. Fabric avgjør om en forespørsel kan bruke en eksisterende økt eller krever en ny økt.

Konfigurer anskaffelsestidspunkt

Bruk følgende innstillinger for å kontrollere hvor lenge føreren venter på en HC-økt:

Parameter Forhåndsinnstilt Gyldig input Virkemåte
hcAcquireTimeoutSeconds 300 120 til 3 600 sekunder Maksimal tid til å vente på at HC-økten skal bli klar.
hcAcquirePollingIntervalMs 1000 50 til 30 000 millisekunder Intervall mellom statussjekker. Under kjøring klemmer driveren verdien til 100 til 5 000 millisekunder.

For de fleste arbeidsbelastninger, behold standardverdiene. Øk anskaffelsestiden kun når kapasitetsoppstart regelmessig tar mer enn fem minutter.

Bruk HC-modus med tilkoblingspooling

HC-modus og ADONET-tilkoblingspooling adresserer ulike lag:

  • HC-modus håndterer delt Fabric Spark-kapasitet og Livy-økter på serveren.
  • ADO.NET-tilkoblingspooling gjenbruker driverstyrte tilkoblingsressurser i klientapplikasjonen.

Du kan aktivere begge funksjonene. Tilkoblingspooling reduserer gjentatte tilkoblingsoppsett på klientsiden, mens HC-modus reduserer gjentatt serverside Spark-sesjonsoppsetting. Dimensjoner tilkoblingspoolen etter applikasjonens forventede samtidighet i stedet for å bruke en stor pool for å skape unødvendig parallelt arbeid.

I HC-modus AutoReconnect=true spiller den ikke transparent av en mislykket kommando etter en feil i en stale-session. Applikasjonen mottar unntaket og må avgjøre om det er trygt å prøve operasjonen på nytt.

Deaktiver HC-modus

For å bruke klassisk modus for nye tilkoblinger, fjern HcEnabled fra tilkoblingsstreng eller sett den tilfalse:

HcEnabled=false

Endringen påvirker nye tilkoblinger og fjerner ikke eksisterende sammenslåtte HC-økter. Lukk eller kvitt logiske forbindelser normalt; kvalifiserte fysiske økter kan forbli i klientpoolen til de er pensjonert.

ADO.NET-begrensninger

  • Transaksjoner støttes ikke.
  • Kommandoer støtter kun tekstkommandomodus. Stored-procedure og table-direct kommandomoduser støttes ikke.
  • Prepare Gjør ingenting.
  • En kommando må inneholde én setning; flersetningskommandotekst avvises.
  • Bruk separate, samtidig åpne tilkoblinger for samtidige arbeidsbelastninger. Kommandoer på én tilkobling deler dens økt og REPL.

Tilordning av datatype

Driveren mapper Spark SQL-datatyper til .NET-typer:

Spark SQL Type .NET-type DbType
BOOLSK bool boolsk
TINYINT sbyte SByte
SMALLINT short Int16
INT int Int32
BIGINT long Int64
FLYTE float Enkel
DOBBEL double Dobbel
DECIMAL(p,s) decimal Desimal
STRENG string String
VARCHAR(n) string String
CHAR(n) string String
BINÆR byte[] Binary
DATO DateTime Dato
TIDSSTEMPEL DateTime Date/klokkeslett
ARRAY<T> string Objekt
KART<K,V> string Objekt
STRUCT string Objekt

Arbeid med komplekse typer

HC-resultatstien serialiserer ikke pålitelig native nestede ARRAY-, MAP- eller STRUCT-verdier som JSON. Project komplekse verdier til JSON-strenger i Spark SQL før du deserialiserer dem:

using System.Text.Json;
using System.Collections.Generic;

using var command = connection.CreateCommand();
command.CommandText = """
    SELECT
        to_json(array_column) AS array_json,
        to_json(map_column) AS map_json,
        to_json(struct_column) AS struct_json
    FROM complex_table
    LIMIT 1
    """;

using var reader = await command.ExecuteReaderAsync();
if (await reader.ReadAsync())
{
    string arrayJson = reader.GetString(0);
    string mapJson = reader.GetString(1);
    string structJson = reader.GetString(2);

    var array = JsonSerializer.Deserialize<int[]>(arrayJson);
    var map = JsonSerializer.Deserialize<Dictionary<string, string>>(mapJson);
}

Feilsøking

Denne delen gir veiledning for å løse vanlige problemer du kan støte på når du bruker Microsoft ADO.NET Driver for Fabric Data Engineering.

Vanlige problemer

Følgende avsnitt beskriver vanlige problemer og deres løsninger:

Tilkoblingsfeil

Problem: Kan ikke koble til Fabric

Løsninger:

  1. Verifiser FabricWorkspaceID og FabricLakehouseID er korrekte GUID-er
  2. Sjekk Azure CLI autentisering: az account show
  3. Sørg for at du har riktige Fabric-arbeidsområdetillatelser
  4. Sjekk nettverkstilkoblingen til api.fabric.microsoft.com

Godkjenningsfeil

Problem: Autentisering feiler med Azure CLI

Løsninger:

  • Kjør az login for å oppdatere legitimasjonen
  • Sjekk riktig leietaker: az account set --subscription <subscription-id>
  • Sjekk tokenets gyldighet: az account get-access-token --resource https://api.fabric.microsoft.com

Spørringstidsavbrudd

Problem: Forespørsler går ut på store tabeller

Løsninger:

  • Øk uttalelsens timeout: LivyStatementTimeoutSeconds=1200.
  • Bruk LIMIT klausulen for å begrense resultatstørrelsen under utvikling
  • Sørg for at Spark-klyngen har tilstrekkelige ressurser

Tilkoblings- eller HC-anskaffelsestimeout

Problem: En tilkobling går ut på tid mens man venter på en poolet tilkobling eller en HC-økt

Løsninger:

  • For klientpool-venting og etablering av HTTP-tilkobling, se HttpConnectionTimeoutInSeconds.
  • For HC-innhenting, øk hcAcquireTimeoutSeconds innenfor støttet intervall fra 120 til 3 600 sekunder.
  • Sjekk tilgjengelighet av Fabric-kapasitet
  • Sjekk at arbeidsområdet ikke har nådd sesjonsgrenser

Aktiver logging

Når du feilsøker problemer, kan detaljert logging hjelpe deg med å identifisere rotårsaken. Konfigurer logging gjennom tilkoblingsstreng:

For å muliggjøre detaljert logging via tilkoblingsstreng:

LogLevel=Debug;LogFilePath=<path-to-log-file>

Hvis du ikke setter LogFilePath en global loggkonfigurasjon, skriver driveren logger under %LOCALAPPDATA%\FabricSparkAdoNet\Logs på Windows.

Loggnivåer:

  • Trace: Mest omfangsfull, inkluderer alle API-kall
  • Debug: Detaljert feilsøkingsinformasjon
  • Information: Generell informasjon (standard)
  • Warning: Kun advarsler
  • Error: Kun feil