Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
ADO.NET on laajasti käytössä oleva datan käyttöteknologia .NET-ekosysteemissä, joka mahdollistaa sovellusten yhteyden tietokantojen ja big data -alustojen datan kanssa työskentelyyn.
Microsoft ADO.NET Driver for Fabric Data Engineering mahdollistaa Spark-työkuormien yhdistämisen, kyselyn ja hallinnan Microsoft Fabricissa tavallisten ADO.NET-mallien luotettavuudella ja yksinkertaisuudella. Microsoft Fabricin Livy-rajapintojen pohjalta rakennettu ajuri tarjoaa turvallisen ja joustavan Spark SQL -yhteyden .NET-sovelluksiin tuttujen DbConnection, DbCommand, ja DbDataReader abstraktioiden avulla.
Tärkeimmät ominaisuudet
-
ADO.NET Yhteensopivuus: ADO.NET abstraktioiden
DbConnection(,DbCommand,DbDataReaderDbParameter,DbProviderFactory, ) täysi toteutus - Microsoft Entra ID -tunnistautuminen: Useita todennusprosesseja, mukaan lukien Azure CLI, interaktiivinen selain, asiakastunnukset, varmennepohjainen ja pääsytunnusen tunnistautuminen
- Spark SQL Native Query Support: Spark SQL -lauseiden suora suoritus parametrisoiduilla kyselyillä
- Kattava tietotyyppituki: Tuki kaikille Spark SQL -tietotyypeille, mukaan lukien monimutkaiset tyypit (TAULUKKO, KARTTA, RAKENNE)
- Connection pooling: Sisäänrakennettu yhteyspoolin hallinta suorituskyvyn parantamiseksi
- Session uudelleenkäyttö: Tehokas Spark-istuntojen hallinta käynnistysviiveen vähentämiseksi
- Asynkroninen esilataus: Taustalla lataava datan lataus parantaa suorituskykyä suurilla tulosjoukoilla
- Automaattinen uudelleenyhdistäminen: Automaattinen istunnon palautus yhteyden epäonnistumisen jälkeen
Muistio
Avoimen lähdekoodin Apache Sparkissa tietokantaa ja skeemaa käytetään synonyymeinä. Esimerkiksi Fabric Notebookin suorittaminen SHOW SCHEMASSHOW DATABASES palauttaa saman tuloksen — listan kaikista Lakehousen skeemoista.
Edellytykset
Ennen Microsoft ADO.NET Driverin käyttöä Microsoft Fabric Data Engineeringille varmista, että sinulla on:
- .NET Runtime: .NET 8.0 tai uudempi
- Microsoft Fabric Access: Pääsy Microsoft Fabricin työtilaan, jossa on data-insinöörin ominaisuudet
- Azure Entra ID Credentials: Sopivat tunnistetiedot autentikointiin
- Workspace- ja Lakehouse-tunnisteet: GUID-tunnisteet Fabric-työtilallesi ja järvenrakennukselle
- Azure CLI (valinnainen): Vaaditaan Azure CLI -todennusmenetelmälle
Lataa, sisällytä, viittaa ja varmista
Lataa NuGet-paketti
Microsoft ADO.NET Driver for Microsoft Fabric Data Engineering versio 1.0.0 on julkisessa esikatselussa, jonka voit ladata näistä latauskeskuksen linkeistä.
- Lataa Microsoft ADO.NET Driver for Microsoft Fabric Data Engineering (zip)
- Lataa Microsoft ADO.NET Driver for Microsoft Fabric Data Engineering (tar)
Viittaa NuGet-pakettiin projektissasi
Sisällytä ladattu NuGet-paketti projektiisi ja lisää paketin viite projektitiedostoosi:
<ItemGroup>
<PackageReference Include="Microsoft.Spark.Livy.AdoNet" Version="1.0.0" />
</ItemGroup>
Asennuksen tarkistaminen
Sisällytyksen ja viitteen jälkeen varmista, että paketti on saatavilla projektissasi:
using Microsoft.Spark.Livy.AdoNet;
// Verify the provider is registered
var factory = LivyProviderFactory.Instance;
Console.WriteLine($"Provider: {factory.GetType().Name}");
Nopea aloitusesimerkki
using Microsoft.Spark.Livy.AdoNet;
// Connection string with required parameters
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"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));
}
Yhteysmerkkijonomuoto
Perusformaatti
Microsoft ADO.NET Driver käyttää tavallista ADO.NET-yhteysmerkkijonomuotoa:
Parameter1=Value1;Parameter2=Value2;...
Pakolliset parametrit
| Parametri | Description | Esimerkki |
|---|---|---|
Server |
Microsoft Fabric API -päätepiste | https://api.fabric.microsoft.com/v1 |
SparkServerType |
Palvelintyypin tunniste | Fabric |
FabricWorkspaceID |
Microsoft Fabric workspace identifier (GUID) | <workspace-id> |
FabricLakehouseID |
Microsoft Fabric Lakehouse -tunniste (GUID) | <lakehouse-id> |
AuthFlow |
Todentamismenetelmä |
AzureCli, BrowserBased, , ClientSecretCredentialClientCertificateCredential, AuthAccessToken, ,FileToken |
Valinnaiset parametrit
Yhteysasetukset
| Parametri | Tyyppi | Oletus | Description |
|---|---|---|---|
LivySessionTimeoutSeconds |
Integer | 60 |
Aika sekunteina odottaa istunnon luomista |
LivyStatementTimeoutSeconds |
Integer | 600 |
Aika sekunteina odottaa lauseen suoritusta |
SessionName |
merkkijono | (auto) | Spark-istunnon räätälöity nimi |
AutoReconnect |
totuusarvo | false |
Ota automaattinen istunnon palautus käyttöön |
Yhteysaltaan asetukset
| Parametri | Tyyppi | Oletus | Description |
|---|---|---|---|
ConnectionPoolEnabled |
totuusarvo | true |
Ota yhteyspoolaus käyttöön |
MinPoolSize |
Integer | 1 |
Minimiyhteydet altaassa |
MaxPoolSize |
Integer | 20 |
Suurimmat yhteydet altaassa |
ConnectionMaxIdleTimeMs |
Integer | 1800000 |
Maksimityhjäkäyntiaika ennen yhteyden kierrätystä (30 min) |
MaxLifetimeMs |
Integer | 3600000 |
Yhteisyhteyden enimmäiskäyttöikä (60 min) |
ValidateConnections |
totuusarvo | true |
Vahvista yhteydet ennen käyttöä |
ValidationTimeoutMs |
Integer | 5000 |
Aikakatkaisu yhteyden validointia varten |
Lokiasetukset
| Parametri | Tyyppi | Oletus | Description |
|---|---|---|---|
LogLevel |
merkkijono | Information |
Logaritmitaso: Trace, Debug, InformationWarning, ,Error |
LogFilePath |
merkkijono | (ei mitään) | Polku tiedostopohjaiseen lokitukseen |
Muistio
Ristiinkuljettajien aliakset: Ajuri hyväksyy JDBC- ja ODBC-ominaisuusnimet natiivien ADO.NET-nimien lisäksi (esim. WorkspaceId kartat , FabricWorkspaceIDLakehouseId kartat ).FabricLakehouseID Kaikkien kiinteistöjen nimet ovat kirjainkoon riippumattomia.
Esimerkkejä yhteysmerkkijonoista
Perusyhteys (Azure CLI authentication)
Server=https://api.fabric.microsoft.com/v1;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli
Yhteyspoolausvaihtoehdoilla
Server=https://api.fabric.microsoft.com/v1;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli;ConnectionPoolEnabled=true;MinPoolSize=2;MaxPoolSize=10
Automaattisella uudelleenyhdistämisellä ja lokituksella
Server=https://api.fabric.microsoft.com/v1;SparkServerType=Fabric;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=AzureCli;AutoReconnect=true;LogLevel=Debug
Todentaminen
Microsoft ADO.NET Driver tukee useita todennusmenetelmiä Microsoft Entra ID:n (entinen Azure Active Directory) kautta. Tunnistautuminen konfiguroidaan yhteysmerkkijonon AuthFlow parametrin avulla.
Todennusmenetelmät
| AuthFlow-arvo | Description | Paras |
|---|---|---|
AzureCli |
Käyttää Azure CLI cached credentials | Kehitys ja testaus |
BrowserBased |
Interaktiivinen selainpohjainen tunnistautuminen | Käyttäjäkohtaiset sovellukset |
ClientSecretCredential |
Palvelupäähenkilö asiakassalaisuudella | Automaattiset palvelut, taustatyöt |
ClientCertificateCredential |
Palvelupäämies todistuksella | Yrityssovellukset |
AuthAccessToken |
Ennakkoon hankittu haltijan pääsytunnus | Räätälöidyt todennusskenaariot |
Azure CLI authentication
Paras: Kehitykseen ja testaukseen
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"SparkServerType=Fabric;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=AzureCli;";
using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();
Edellytykset:
- Azure CLI asennettu:
az --version - Kirjautunut sisään:
az login
Interaktiivinen selaimen tunnistautuminen
Parhaiten: Käyttäjäkohtaisille sovelluksille
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"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
Toiminta:
- Avaa selaimen ikkunan käyttäjän tunnistautumista varten
- Tunnistetiedot tallennetaan välimuistiin seuraavia yhteyksiä varten
Asiakastunnisteiden (palvelupäähenkilön) todennus
Paras: Automatisoidut palvelut ja taustatyöt
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"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();
Vaaditut parametrit:
-
AuthTenantID: Azure tenant ID -
AuthClientID: Application (client) ID Microsoft Entra ID:stä -
AuthClientSecret: Asiakassalaisuus Microsoft Entra ID:stä
Varmennepohjainen todentaminen
Paras: Yrityssovelluksiin, jotka vaativat varmennepohjaista todennusta
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"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();
Vaaditut parametrit:
-
AuthTenantID: Azure tenant ID -
AuthClientID: Sovelluksen (asiakas) tunnus -
AuthCertificatePath: Polku PFX/PKCS12-varmennetiedostoon -
AuthCertificatePassword: Varmenteen salasana
Pääsytunnuksen tunnistautuminen
Parhaiten: Mukautetut todennusskenaariot
// Acquire token through your custom mechanism
string accessToken = await AcquireTokenFromCustomSourceAsync();
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"SparkServerType=Fabric;" +
"FabricWorkspaceID=<workspace-id>;" +
"FabricLakehouseID=<lakehouse-id>;" +
"AuthFlow=AuthAccessToken;" +
$"AuthAccessToken={accessToken};";
using var connection = new LivyConnection(connectionString);
await connection.OpenAsync();
Muistio
Suosittelemme vahvasti välttämään kovakoodattuja tunnistetietoja, kuten salasanoja, avaimia, salaisuuksia, tokeneita tai varmenteita koodissasi. Sen sijaan käytä Azure Key Vaultia tallentaaksesi nämä arvot turvallisesti ja hakeaksesi ne ajonaikaisesti.
Käyttöesimerkkejä
Perusyhteys ja kysely
using Microsoft.Spark.Livy.AdoNet;
string connectionString =
"Server=https://api.fabric.microsoft.com/v1;" +
"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();
}
Parametrisoidut kyselyt
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 yksittäisille arvoille
using var command = connection.CreateCommand();
command.CommandText = "SELECT COUNT(*) FROM customers";
var count = await command.ExecuteScalarAsync();
Console.WriteLine($"Total customers: {count}");
ExecuteNonQuery DML-operaatioille
// 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($"Inserted {rowsAffected} row(s)");
// UPDATE
using var updateCommand = connection.CreateCommand();
updateCommand.CommandText = "UPDATE employees SET salary = 90000 WHERE id = 100";
rowsAffected = await updateCommand.ExecuteNonQueryAsync();
Console.WriteLine($"Updated {rowsAffected} row(s)");
// DELETE
using var deleteCommand = connection.CreateCommand();
deleteCommand.CommandText = "DELETE FROM employees WHERE id = 100";
rowsAffected = await deleteCommand.ExecuteNonQueryAsync();
Console.WriteLine($"Deleted {rowsAffected} row(s)");
Työskentely suurten tulosjoukkojen kanssa
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}");
Skeeman löytö
// 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())
{
Console.WriteLine($" {tablesReader.GetString(0)}");
}
// 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"]}");
}
LivyConnectionStringBuilderin käyttö
using Microsoft.Spark.Livy.AdoNet;
var builder = new LivyConnectionStringBuilder
{
Server = "https://api.fabric.microsoft.com/v1",
SparkServerType = "Fabric",
FabricWorkspaceID = "<workspace-id>",
FabricLakehouseID = "<lakehouse-id>",
AuthFlow = "AzureCli",
ConnectionPoolingEnabled = true,
MinPoolSize = 2,
MaxPoolSize = 10,
ConnectionTimeout = 60
};
using var connection = new LivyConnection(builder.ConnectionString);
await connection.OpenAsync();
DbProviderFactoryn käyttö
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...
Tietotyyppien kartoittaminen
Ajuri kartoittaa Spark SQL -tietotyypit .NET-tyyppeihin:
| Spark SQL Type | NET-tyyppi | DbType |
|---|---|---|
| BOOLEAN | bool |
totuusarvo |
| PIKKURUINEN | sbyte |
SByte |
| SMALLINT | short |
Int16 |
| INT | int |
Int32 |
| BIGINT | long |
Int64 |
| KELLUA | float |
Naimaton |
| KAKSINKERTAINEN | double |
Kaksinkertainen |
| DESIMAALI(p,s) | decimal |
Desimaaliluku |
| MERKKIJONO | string |
merkkijono |
| VARCHAR(n) | string |
merkkijono |
| CHAR(n) | string |
merkkijono |
| BINÄÄRI | byte[] |
Binary |
| PÄIVÄMÄÄRÄ | DateTime |
Päivämäärä |
| AIKALEIMA | DateTime |
Päivämäärä ja aika |
| ARRAY<T> |
T[] tai string (JSON) |
Objekti |
| KARTTA<K,V> |
Dictionary<K,V> tai string (JSON) |
Objekti |
| RAKENNE |
object tai string (JSON) |
Objekti |
Työskentely monimutkaisten tyyppien kanssa
Kompleksityypit (ARRAY, MAP, STRUCT) palautetaan oletuksena JSON-merkkijonoina:
using System.Text.Json;
using System.Collections.Generic;
using var command = connection.CreateCommand();
command.CommandText = "SELECT array_column, map_column, struct_column FROM complex_table LIMIT 1";
using var reader = await command.ExecuteReaderAsync();
if (await reader.ReadAsync())
{
// Complex types returned as JSON strings
string arrayJson = reader.GetString(0); // e.g., "[1, 2, 3]"
string mapJson = reader.GetString(1); // e.g., "{\"key\": \"value\"}"
string structJson = reader.GetString(2); // e.g., "{\"field1\": 1, \"field2\": \"text\"}"
// Parse with System.Text.Json
var array = JsonSerializer.Deserialize<int[]>(arrayJson);
var map = JsonSerializer.Deserialize<Dictionary<string, string>>(mapJson);
}
Vianmääritys
Tämä osio antaa ohjeita yleisten ongelmien ratkaisemiseen, joita saatat kohdata Microsoft ADO.NET Driver for Microsoft Fabric Data Engineering -ajuria käyttäessäsi.
Yleisiä ongelmia
Seuraavissa osioissa kuvataan yleisiä ongelmia ja niiden ratkaisuja:
Yhteyden epäonnistumiset
Ongelma: En saa yhteyttä Microsoft Fabriciin
Ratkaisut:
- Varmista
FabricWorkspaceIDjaFabricLakehouseIDovatko oikeat GUID-tiedostot - Tarkista Azure CLI -autentikointi:
az account show - Varmista, että sinulla on asianmukaiset Fabric-työtilaoikeudet
- Varmista verkkoyhteys
api.fabric.microsoft.com
Todennusvirheet
Ongelma: Todennus epäonnistuu Azure CLI:llä
Ratkaisut:
- Juokse
az loginpäivittääksesi tunnukset - Varmista oikea vuokralainen:
az account set --subscription <subscription-id> - Tarkista tokenin pätevyys:
az account get-access-token --resource https://api.fabric.microsoft.com
Kyselyn aikakatkaisut
Ongelma: Kyselyt aikakatkaistuvat suurilla tauluilla
Ratkaisut:
- Lisää laskun aikakatkaisu:
LivyStatementTimeoutSeconds=300 - Käytä
LIMITlauseketta rajoittamaan tuloskokoa kehityksen aikana - Varmista, että Spark-klusterilla on riittävät resurssit
Session luomisen aikalisä
Ongelma: Yhteyden aikakatkaisu istunnon luomisen aikana
Ratkaisut:
- Pidennä istunnon aikakatkaisu:
LivySessionTimeoutSeconds=120 - Tarkista kankaan kapasiteetin saatavuus
- Varmista, ettei työtila ole saavuttanut istuntorajoja
Lokituksen ottaminen käyttöön
Ongelmien vianetsinnässä yksityiskohtainen lokitus voi auttaa tunnistamaan juurisyyn. Voit ottaa lokituksen käyttöön yhteysjonon kautta tai ohjelmallisesti.
Yksityiskohtaisen lokituksen mahdollistamiseksi yhteysmerkkijonon kautta:
LogLevel=Debug
Tai konfiguroida ohjelmallisesti:
using Microsoft.Extensions.Logging;
var loggerFactory = LoggerFactory.Create(builder =>
{
builder.AddConsole();
builder.SetMinimumLevel(LogLevel.Debug);
});
// Logging is automatically integrated with the connection
Lokitasot:
-
Trace: Monisanainen, sisältää kaikki API-kutsut -
Debug: Yksityiskohtaista virheenkorjaustietoa -
Information: Yleistä tietoa (oletus) -
Warning: Vain varoitukset -
Error: Vain virheet