Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
ADO.NET er en bredt anvendt dataadgangsteknologi i .NET-økosystemet, som gør det muligt for applikationer at forbinde til og arbejde med data fra databaser og big data-platforme.
Microsoft ADO.NET Driver for Fabric Data Engineering lader dig forbinde, forespørge og administrere Spark-arbejdsbelastninger i Fabric med pålideligheden og enkelheden fra standard ADO.NET-mønstre. Drevet på Fabric's Livy API'er leverer sikker og fleksibel Spark SQL-forbindelse til dine .NET-applikationer ved hjælp af familiar DbConnection, DbCommand, og DbDataReader abstraktioner.
Vigtige funktioner
-
ADO.NET API'er: Velkendte
DbConnection,DbCommand, ,DbDataReaderDbParameter, ogDbProviderFactoryabstraktioner til Spark SQL-forbindelse - Microsoft Entra ID-autentificering: Flere autentificeringsflows, herunder Azure CLI, interaktiv browser, klientoplysninger, certifikatbaseret og adgangstoktoeifikation
- Spark SQL Native Query Support: Direkte udførelse af Spark SQL-udsagn med parameteriserede forespørgsler
- Omfattende understøttelse af datatyper: Understøttelse af alle Spark SQL-datatyper inklusive komplekse typer (ARRAY, MAP, STRUCT)
- Connection Pooling: Indbygget administration af forbindelsespoolen for forbedret ydeevne
- Genbrug af sessioner: Effektiv Spark-sessionstyring for at reducere opstartsforsinkelse
- Højsamtidige sessioner: Vælg til delt Fabric Livy-kapacitet med separate REPL'er for samtidig lejede HC-sessioner
- Async Prefetch: Baggrundsindlæsning af data for forbedret ydeevne med store resultatsæt
- Auto-genforbindelse: Klassisk sessionsgendannelse efter forbindelsesfejl; HC-fejl fremkommer ved applikationsstyret genprøvning
Bemærkning
I open source Apache Spark bruges database og skema synonymt. For eksempel giver det samme resultat, når man kører SHOW SCHEMAS eller SHOW DATABASES i en Fabric-notesbog, en liste over alle skemaer i lakehouset.
Forudsætninger
Før du bruger Microsoft ADO.NET Driver for Fabric Data Engineering, skal du sikre dig, at du har:
- .NET Runtime: .NET 8.0 eller senere
- Fabric Access: Adgang til et Fabric-arbejdsområde med Data Engineering-funktioner
- Azure Entra ID Credentials: Passende legitimationsoplysninger til autentificering
- Workspace og Lakehouse ID'er: GUID-identifikatorer for dit Fabric workspace og lakehouse
- Azure CLI (valgfrit): Required for Azure CLI authentication method
Download, inkludér, referer og verificér
Download NuGet-pakken
- Download Microsoft ADO.NET Driver for Fabric Data Engineering (zip)
- Download Microsoft ADO.NET Driver for Fabric Data Engineering (tar)
Vigtigt!
Den citerede multi-værdi HcConfOverrides syntaks, der er dokumenteret i denne artikel, kræver 2.0.1 NuGet-pakken eller nyere.
Reference NuGet-pakke i dit projekt
Inkluder den downloadede NuGet-pakke i dit projekt og tilføj en reference til pakken til din projektfil:
<ItemGroup>
<PackageReference Include="Microsoft.Spark.Livy.AdoNet" Version="2.0.1" />
</ItemGroup>
Kontrollér installationen
Efter inkludering og reference, skal du sikre dig, at pakken er tilgængelig i dit projekt:
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));
}
Forbindelsesstrengsformat
Grundformat
Microsoft ADO.NET Driver bruger standard ADO.NET forbindelsesstrengsformat:
Parameter1=Value1;Parameter2=Value2;...
Påkrævede parametre
| Parameter | Beskrivelse | Eksempel |
|---|---|---|
Server |
Microsoft Fabric API-endpoint. Angiv hosten uden API-versionssuffiks. | https://api.fabric.microsoft.com |
SparkServerType |
Servertypeidentifikator | Fabric |
FabricWorkspaceID |
Microsoft Fabric arbejdsområdeidentifikator (GUID) | 4bbf89a8-66bb-443f-91af-df31e6a7560b |
FabricLakehouseID |
Microsoft Fabric lakehouse-identifikator (GUID) | d8faa650-1343-496b-b9cc-d4168a676f90 |
AuthFlow |
Godkendelsesmetode |
AzureCli, BrowserBased, ClientSecretCredential, ClientCertificateCredentialAuthAccessTokenFileToken |
Valgfrie parametre
Forbindelsesindstillinger
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
LivyStatementTimeoutSeconds |
Integer | 600 |
Tid i sekunder til at vente på sætningsudførelse |
HttpConnectionTimeoutInSeconds |
Integer | 30 |
Tid til at vente på en HTTP-forbindelse og, når klientpuljen er opbrugt, på en berettiget poolet forbindelse. |
SessionName |
String | (auto) | Brugerdefineret navn for Spark-sessionen |
EnvironmentID |
UUID | (ingen) | Valgfri Fabric-miljøidentifikator for klassiske og HC-sessioner. |
AutoReconnect |
Boolean | false |
Aktivér klassisk sessionsgendannelse. I HC-tilstand returneres en fejl i en forældet session til applikationen og afspilles ikke gennemsigtigt. |
Indstillinger for forbindelsespoolen
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
ConnectionPoolEnabled |
Boolean | true |
Aktiver forbindelsespooling |
MinPoolSize |
Integer | 1 |
Accepteret for kompatibilitet, men ikke håndhævet som et forhåndsallokeret eller vedligeholdt poolminimum. |
MaxPoolSize |
Integer | 50 |
Maksimalt samlede Livy-sessioner pr. poolnøgle. |
ValidateConnections |
Boolean | true |
Valider poolede sessioner eksternt, når de er udlånt. |
ValidationTimeoutMs |
Integer | 5000 |
Maksimal valideringstid i millisekunder. |
Høje samtidighedsindstillinger
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
HcEnabled |
Boolean | false |
Aktivér Fabric Livy High Concurrency-tilstand. Kræver SparkServerType=Fabric og dirigerer session-, statement-, annuller- og oprydningsoperationer gennem HC-endepunkter. |
HcSessionTag |
String | (ingen) | Valgfrit tip til delt-session-pakning. Hvis du udelader værdien eller indtaster en tom eller kun hvid plads, sender driveren ikke et tag. |
HcConfOverrides |
String | (ingen) | Semikolon-afgrænsede tilladte Spark-konfigurationer overstyrer for oprettelse af HC-sessioner. Angiv den fulde værdi, når den indeholder flere overstyringer. |
hcAcquireTimeoutSeconds |
Integer | 300 |
HC erhverver/session-klar timeout på sekunder (120..3600). |
hcAcquirePollingIntervalMs |
Integer | 1000 |
HC opnår pollingintervallet i millisekunder (50..30000 accepteret, runtime-klemme 100..5000). |
Logningsindstillinger
| Parameter | Type | Standard | Beskrivelse |
|---|---|---|---|
LogLevel |
String | Information |
Log-niveau: Trace, Debug, Information, , WarningError |
LogFilePath |
String |
%LOCALAPPDATA%\FabricSparkAdoNet\Logspå Windows |
Sti for filbaseret logning. |
Cross-driver-aliaser: Driveren accepterer JDBC- og ODBC-ejendomsnavne ud over native ADO.NET-navne (f.eks.
WorkspaceIdkort tilFabricWorkspaceID,LakehouseIdkort tilFabricLakehouseID). Alle ejendomsnavne er små og små bogstaver.
Eksempel på forbindelsesstrenge
Basic connection (Azure CLI authentication)
Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli
Høj samkørselsforbindelse
Høj samtidighed er tilgængelig for Microsoft Fabric-forbindelser. Sæt HcEnabled=true; de standard ADO.NET-forbindelses- og kommando-API'er forbliver uændrede. Brug den uversionerede Fabric API-vært for Server; driveren bruger FabricVersion=v1 og LivyApiVersion=2023-12-01 som standard, når den bygger HC-endpointet.
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 fuld konfigurationsvejledning, se afsnittet omHigh-Concurrency (HC) Mode .
Med forbindelsespooling-muligheder
Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli;ConnectionPoolEnabled=true;MaxPoolSize=10
Med automatisk genforbindelse og logning
Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli;AutoReconnect=true;LogLevel=Debug
Godkendelse
Microsoft ADO.NET Driver understøtter flere autentificeringsmetoder via Microsoft Entra ID (tidligere Azure Active Directory). Autentificering konfigureres ved hjælp af parameteren AuthFlow i forbindelsesstrengen.
Godkendelsesmetoder
| AuthFlow-værdi | Beskrivelse | Bedst til |
|---|---|---|
AzureCli |
Bruger Azure CLI cachede credentials | Udvikling og test |
BrowserBased |
Interaktiv browserbaseret autentificering | Brugerrettede applikationer |
ClientSecretCredential |
Serviceprincipal med klienthemmelighed | Automatiserede tjenester, baggrundsopgaver |
ClientCertificateCredential |
Servicechef med certifikat | Virksomhedsprogrammer |
AuthAccessToken |
Foruderhvervet bæreradgangstoken | Brugerdefinerede autentificeringsscenarier |
Azure CLI authentication
Bedst til: Udvikling og testning
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();
Forudsætninger:
- Azure CLI installeret:
az --version - Indlogget:
az login
Interaktiv browserautentificering
Bedst til: Brugerrettede applikationer
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
Adfærd:
- Åbner et browservindue til brugerautentificering
- Oplysninger caches til efterfølgende forbindelser
Klientlegitimation (Service Principal) Autentificering
Bedst til: Automatiserede tjenester og baggrundsjobs
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();
Påkrævede parametre:
-
AuthTenantID: Azure lejer-ID -
AuthClientID: Application (klient) ID fra Microsoft Entra ID -
AuthClientSecret: Klienthemmelighed fra Microsoft Entra ID
Certifikatbaseret godkendelse
Bedst til: Virksomhedsapplikationer, der kræver certifikatbaseret autentificering
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();
Påkrævede parametre:
-
AuthTenantID: Azure lejer-ID -
AuthClientID: Applikations-ID (klient) -
AuthCertificatePath: Sti til PFX/PKCS12 certifikatfil -
AuthCertificatePassword: Certifikatadgangskode
Adgangstoksgodkendelse
Bedst til: Brugerdefinerede autentificeringsscenarier
// 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();
Eksempler på anvendelse
Grundlæggende forbindelse og forespørgsel
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();
}
Parameteriserede forespørgsler
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 enkeltværdier
using var command = connection.CreateCommand();
command.CommandText = "SELECT COUNT(*) FROM customers";
var count = await command.ExecuteScalarAsync();
Console.WriteLine($"Total customers: {count}");
ExecuteNonQuery for DML-operationer
// 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.");
Arbejde med store resultatmængder
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}");
Skemaopdagelse
// 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)}");
}
Brug af 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();
Brug af 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øj-samtidighed (HC) tilstand
High-concurrency (HC) tilstand hjælper .NET-applikationer med at køre samtidige Spark SQL-arbejdsbelastninger uden at provisionere en separat klassisk Spark-session for hver ADO.NET-forbindelse. Fabric kan placere kompatible forbindelser i den samme serveradministrerede Livy-session, samtidig med at hver forbindelse får en isoleret Read-Eval-Print Loop (REPL) til sætningsudførelse.
Denne model kan reducere forbindelsesopstartstiden, undgå gentagen Spark-sessionsprovisionering og udnytte Fabric Spark-kapaciteten mere effektivt. Din applikation fortsætter med at bruge standard ADO.NET API'er, herunder DbConnection, DbCommand, , DbDataReader, OpenAsyncog Close.
HC-tilstand er opt-in. Hvis du ikke aktiverer det, bruger driveren den klassiske Livy-sessionssti.
Vælg mellem HC og klassisk tilstand
Brug HC-tilstand når:
- En ASP.NET-tjeneste håndterer samtidige forespørgsler, der åbner forbindelser og kører Spark SQL.
- En worker-service, planlagt job eller parallel datapipeline skaber bursts af ADO.NET-forbindelser.
- Flere forbindelser sigter mod det samme Fabric-arbejdsområde og lakehouse og bruger kompatible Spark-konfigurationer.
- At reducere opstartstiden for forbindelsen og gentagne Spark-sessioner er vigtigt.
- Din arbejdsbyrde kan bruge delt, serverstyret Spark-kapacitet, samtidig med at statement-udførelsen isoleres af REPL.
Brug klassisk tilstand, når:
- Din applikation bruger kun én eller få langvarige forbindelser.
- Hver forbindelse kræver en dedikeret Spark-session til streng arbejdsbelastning eller ressourceisolering.
- Forbindelser kræver væsentligt forskellige Spark-konfigurationer, som ikke burde dele en underliggende session.
- Fabric Livy-endpointet for det målrettede arbejdsområde og lakehouse understøtter ikke HC-tilstand.
Hvordan HC-forbindelser fungerer
Når din applikation kalder Open eller OpenAsync og der ikke er nogen kompatibel poolforbindelse, er driveren:
- Anmoder om en HC-session fra Fabric.
- Venter på, at sessionen bliver klar, indtil den konfigurerede anskaffelsestimeout.
- Forbinder ADO.NET-forbindelsen til den tildelte HC-session og REPL.
- Ruter kommandoer, forespørgsler, annulleringsanmodninger og oprydningsoperationer gennem HC-endepunkterne.
Separate, samtidig lejede HC-sessioner bruger separate REPL'er. Kommandoer på én forbindelse deler forbindelsens HC-session og REPL.
Client-side pooling er aktiveret som standard. Lukning eller bortskaffelse af en berettiget forbindelse returnerer normalt dens fysiske HC-session og REPL til proces-lokal puljen til genbrug; det frigiver ikke nødvendigvis tildelingen eksternt. Med pooling deaktiveret udfører lukning af den fysiske forbindelse HC-oprydning. Fortsæt med at bruge using sætninger, så logiske forbindelser vender tilbage hurtigt.
Aktivér HC-tilstand
HC-tilstand er opt-in. Hvis du udelader hcEnabled eller sætter den til falsk, bruger driveren den klassiske Livy-sessionsrute.
Sæt ejendommen hcEnabled til sand for at få en HC-session:
hcEnabled=true;
Vigtigt!
- For HC-forbindelser skal den uversionerede Fabric API-host bruges til
Server. Driveren anvender standard Fabric- og Livy API-versionerne, når den bygger HC-endpointet. - Ejendomsnavne er ikke små og små bogstaver.
Konfigurér session packing
HcSessionTag giver et serverside-tip til at pakke kompatible HC-sessioner ind i en underliggende Livy-session. Et matchende tag garanterer ikke, at du bliver placeret i samme underliggende session.
Hvis du udelader tagget eller angiver en tom værdi eller kun hvid plads, sender driveren det ikke i acquise-anmodningen. At udelade tagget deaktiverer ikke HC-tilstand eller service-side packing. Sæt et eksplicit tag, når relaterede applikationsinstanser eller arbejdsbelastninger skal overvejes for delt kapacitet. Brug en stabil, ikke-følsom operationel label, såsom reporting-service eller nightly-etl. Inkluder ikke hemmeligheder, adgangstoks, personlige data, kundeidentifikatorer eller forespørgselstekst.
Spark-konfigurationen påvirker også sessionskompatibiliteten. Brug HcConfOverrides til at give tilladelseslistede Spark-indstillinger til oprettelse af HC-sessioner:
Server=https://api.fabric.microsoft.com;SparkServerType=Fabric;AuthFlow=AzureCli;HcEnabled=true;HcConfOverrides="spark.executor.memory=8g;spark.executor.cores=4";
For flere overstyringer, giv et tilbud på hele HcConfOverrides værdien. Et ikke-citeret semikolon starter en anden ydre forbindelsesstrengsegenskab; det udvider HcConfOverridesikke . Parseren accepterer enkelt- eller dobbeltanførte værdier, bevarer semikolon og ligetegn inden for anførselsværdier og afkoder dobbelt matchende citationstegn (''""eller ). Hvidrum omkring ejendomsnavne og ved yderkanterne af ikke-citerede værdier ignoreres. Mellemrum inden for anførselsværdier uden anførselstegn og alt mellemrum inden for anførselsværdier bevares. Tomme værdier tilsidesætter miljøstandarder, og den sidste duplikerede egenskab vinder.
Du kan også lade LivyConnectionStringBuilder dig håndtere tilbuddet:
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 eksempler kræver Microsoft ADO.NET Driver version 2.0.1 eller nyere. Tilføj dine workspace- og lakehouse-identifikatorer, før du åbner en forbindelse. Begge overstyringer sendes i HC-oprettelsessessionsanmodningen som separate conf poster. Hver overstyring skal bruge en af disse kasusfølsomme taster:
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
Fejlformede citater afvises uden at inkludere forbindelsesstrengens indhold i parsefejlen.
Brug ensartede tags og konfigurationsværdier på tværs af forbindelser, der er beregnet til at dele kapacitet. Fabric afgør, om en anmodning kan bruge en eksisterende session eller kræver en anden session.
Konfigurer anskaffelsestiming
Brug følgende indstillinger til at styre, hvor længe driveren venter på en HC-session:
| Parameter | Standard | Gyldig input | Adfærd |
|---|---|---|---|
hcAcquireTimeoutSeconds |
300 |
120 til 3.600 sekunder | Maksimal tid til at vente på, at HC-sessionen bliver klar. |
hcAcquirePollingIntervalMs |
1000 |
50 til 30.000 millisekunder | Interval mellem statuskontroller. Ved kørsel klemmer driveren værdien til 100 til 5.000 millisekunder. |
For de fleste arbejdsbelastninger skal du beholde standardværdierne. Øg kun opkøbstiden, når kapacitetsopstart regelmæssigt tager længere end fem minutter.
Brug HC-tilstand med forbindelsespooling
HC-tilstand og ADONET-forbindelsespooling adresserer forskellige lag:
- HC-tilstand håndterer delt Fabric Spark-kapacitet og Livy-sessioner på serveren.
- ADO.NET forbindelsespooling genbruger driver-administrerede forbindelsesressourcer i klientapplikationen.
Du kan aktivere begge funktioner. Connection pooling reducerer gentagen klient-side forbindelsesopsætning, mens HC-tilstand reducerer gentagen server-side Spark-sessionsprovisionering. Dimensioner forbindelsespuljen efter applikationens forventede samtidighed i stedet for at bruge en stor pulje til at skabe unødvendigt parallelt arbejde.
I HC-tilstand AutoReconnect=true afspiller den ikke gennemsigtigt en fejl efter en fejl i en stale-session. Applikationen modtager undtagelsen og skal beslutte, om det er sikkert at prøve operationen igen.
Deaktiver HC-tilstand
For at bruge klassisk tilstand til nye forbindelser, fjern HcEnabled fra forbindelsesstreng eller sæt den til false:
HcEnabled=false
Ændringen påvirker nye forbindelser og fjerner ikke eksisterende sammenlagte HC-sessioner. Luk eller bortskaff logiske forbindelser normalt; berettigede fysiske sessioner kan forblive i klientpuljen, indtil de er pensioneret.
ADO.NET-begrænsninger
- Transaktioner understøttes ikke.
- Kommandoer understøtter kun tekstkommando-tilstand. Stored-procedure og table-direct kommandotilstande understøttes ikke.
-
Preparegør ingenting. - En kommando skal indeholde én sætning; kommandotekst med flere sætninger afvises.
- Brug separate, samtidig åbne forbindelser til samtidige arbejdsbelastninger. Kommandoer på én forbindelse deler dens session og REPL.
Datatypetilknytning
Driveren mapper Spark SQL-datatyper til .NET-typer:
| Spark SQL Type | .NET-type | DbType |
|---|---|---|
| BOOLESK | bool |
Boolean |
| TINYINT | sbyte |
SByte |
| SMALLINT | short |
Indt16 |
| INT | int |
Int32 |
| BIGINT | long |
Int64 |
| FLYDE | float |
Enlig |
| DOBBELT | double |
Dobbelt |
| DECIMAL(p,s) | decimal |
Decimal |
| STRENG | string |
String |
| VARCHAR(n) | string |
String |
| CHAR(n) | string |
String |
| BINÆR | byte[] |
Binary |
| DATO | DateTime |
Dato |
| TIDSSTEMPEL | DateTime |
Dato og klokkeslæt |
| ARRAY<T> | string |
Objekt |
| MAP<K,V> | string |
Objekt |
| STRUCT | string |
Objekt |
Arbejde med komplekse typer
HC-resultatstien serialiserer ikke pålideligt native indlejrede ARRAY-, MAP- eller STRUCT-værdier som JSON. Project komplekse værdier til JSON-strenge 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);
}
Fejlfinding
Dette afsnit giver vejledning til at løse almindelige problemer, du kan støde på ved brug af Microsoft ADO.NET Driver for Fabric Data Engineering.
Almindelige problemer
Følgende afsnit beskriver almindelige problemer og deres løsninger:
Forbindelsesfejl
Problem: Kan ikke forbinde til Fabric
Løsninger:
- Verificér
FabricWorkspaceIDogFabricLakehouseIDer korrekte GUID'er - Tjek Azure CLI autentificering:
az account show - Sørg for, at du har passende Fabric-arbejdsområdetilladelser
- Verificér netværksforbindelsen til
api.fabric.microsoft.com
Godkendelsesfejl
Problem: Autentificering fejler med Azure CLI
Løsninger:
- Kør
az loginfor at opdatere legitimationsoplysninger - Verificér korrekt lejer:
az account set --subscription <subscription-id> - Tjek tokens gyldighed:
az account get-access-token --resource https://api.fabric.microsoft.com
Timeout for forespørgsler
Problem: Forespørgsler går ud på tid på store tabeller
Løsninger:
- Øg timeout for kontoudtoget:
LivyStatementTimeoutSeconds=1200. - Brug
LIMITklausulen til at begrænse resultatstørrelsen under udviklingen - Sørg for, at Spark-klyngen har tilstrækkelige ressourcer
Forbindelses- eller HC-anskaffelsestimeout
Problem: En forbindelse går ud på tid, mens man venter på en poolet forbindelse eller en HC-session
Løsninger:
- For klientpool-ventetid og HTTP-forbindelsesetablering, gennemgå
HttpConnectionTimeoutInSeconds. - For HC-opsamling, øg
hcAcquireTimeoutSecondsinden for det understøttede interval fra 120 til 3.600 sekunder. - Tjek tilgængelighed af Fabric-kapacitet
- Bekræfte, at arbejdsområdet ikke har nået sessionsgrænser
Aktiver logning
Når du fejlsøger problemer, kan detaljeret logning hjælpe dig med at identificere den egentlige årsag. Konfigurér logging gennem forbindelsesstreng:
For at muliggøre detaljeret logning via forbindelsesstreng:
LogLevel=Debug;LogFilePath=<path-to-log-file>
Hvis du ikke sætter LogFilePath en global logningskonfiguration, skriver driveren logs under %LOCALAPPDATA%\FabricSparkAdoNet\Logs på Windows.
Log-niveauer:
-
Trace: Mest omstændelig, inkluderer alle API-kald -
Debug: Detaljeret fejlfinding information -
Information: Generel information (standard) -
Warning: Kun advarsler -
Error: Kun fejl