Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
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, ogDbProviderFactoryabstraksjoner 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
- Last ned Microsoft ADO.NET Driver for Fabric Data Engineering (zip)
- Last ned Microsoft ADO.NET Driver for Fabric Data Engineering (tar)
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.
WorkspaceIdmapps toFabricWorkspaceID,LakehouseIdmaps toFabricLakehouseID). 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:
- Ber om en HC-økt fra Fabric.
- Venter på at økten skal bli klar, frem til den konfigurerte anskaffelsestimeouten.
- Kobler ADONET-tilkoblingen til den tildelte HC-sesjonen og REPL.
- 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!
- 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. - 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.partitionsspark.executor.memoryspark.executor.coresspark.driver.memoryspark.sql.ansi.enabledspark.sql.legacy.timeParserPolicyspark.sql.session.timeZonelivy.rsc.client.connect.timeoutlivy.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.
-
PrepareGjø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:
- Verifiser
FabricWorkspaceIDogFabricLakehouseIDer korrekte GUID-er - Sjekk Azure CLI autentisering:
az account show - Sørg for at du har riktige Fabric-arbeidsområdetillatelser
- Sjekk nettverkstilkoblingen til
api.fabric.microsoft.com
Godkjenningsfeil
Problem: Autentisering feiler med Azure CLI
Løsninger:
- Kjør
az loginfor å 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
LIMITklausulen 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
hcAcquireTimeoutSecondsinnenfor 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