Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
ODBC (Open Database Connectivity) är en allmänt antagen standard som gör det möjligt för klientprogram att ansluta till och arbeta med data från databaser och stordataplattformar.
Microsoft ODBC Driver för Fabric Data Engineering låter dig koppla in, fråga och hantera Spark-arbetsbelastningar i Fabric med samma tillförlitlighet och enkelhet som ODBC-standarden. Byggd på Fabric:s Livy-API:er tillhandahåller drivrutinen säker och flexibel Spark SQL-anslutning till dina C/C++, .NET, Python och andra ODBC-kompatibla applikationer och BI-verktyg.
Viktiga funktioner
- ODBC 3.x-kompatibel: Fullständig implementering av ODBC 3.x-specifikation
- Microsoft Entra ID autentisering: Flera autentiseringsflöden, inklusive Azure CLI, interaktiv, klientautentiseringsuppgifter, certifikatbaserad och åtkomsttokenautentisering
- Stöd för Spark SQL-frågor: Direkt körning av Spark SQL-instruktioner
- Omfattande stöd för datatyper: Stöd för alla Spark SQL-datatyper, inklusive komplexa typer (ARRAY, MAP, STRUCT)
- Återanvändning av sessioner: Inbyggd sessionshantering för bättre prestanda
- Högsamtidighetsläge: Välj in delade, varma server-side Livy-sessioner för att minska uppstartsfördröjning vid anslutningen och Spark-klusterets spridning
- Stöd för stora tabeller: Optimerad hantering för stora resultatuppsättningar med konfigurerbara sidstorlekar
- Async prefetch: Inläsning av bakgrundsdata för bättre prestanda
- Proxystöd: HTTP-proxykonfiguration för företagsmiljöer
- Stöd för flera scheman i lakehouse: Anslut till ett specifikt schema i ett lakehouse
- OneLake-integration: Åtkomst till lakehouse-data lagrad i OneLake, inklusive tabeller över flera scheman, via ett enhetligt ODBC-gränssnitt utan separat lagringskonfiguration
- Stöd för miljöobjekt: Koppla Fabric-miljöobjekt under jobbkörningen för att tillämpa arbetsytebibliotek, Spark-egenskaper och variabler på varje session.
- Anpassad Spark-konfiguration: Skicka Spark-konfigurationsegenskaper direkt via reťazec pripojenia för att justera sessionsbeteendet
Anmärkning
I Apache Spark med öppen källkod används databas och schema synonymt. Till exempel, att köra SHOW SCHEMAS eller SHOW DATABASES i en Fabric-anteckningsbok ger samma resultat — en lista över alla scheman i sjöhuset.
Förutsättningar
Kontrollera att du har följande innan du använder Microsoft ODBC-drivrutinen för Microsoft Fabric Data Engineering:
- Operativsystem: Windows 10/11 eller Windows Server 2016+
- Fabric Access: Tillgång till en arbetsyta för Fabric
- Microsoft Entra ID-autentiseringsuppgifter: Lämpliga uppgifter för autentisering
- Arbetsyte- och lakehouse-ID:n: GUID-identifierare för din Fabric-arbetsyta och ditt lakehouse
- Azure CLI (valfritt): Krävs för Azure CLI-autentiseringsmetod
Ladda ned och MSI-installation
- Ladda ned Microsoft ODBC-drivrutin för Microsoft Fabric Data Engineering MSI-paketet
- Dubbelklicka på
MicrosoftFabricODBCDriver-2.0.msi. - Följ installationsguiden och godkänn licensavtalet
- Välj installationskatalog (standard:
C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\) - Slutför installationen
Tyst installation
# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet
# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log
Verifiera installationen
Efter installationen, kontrollera att drivrutinen har registrerats:
- Kör
odbcad32.exe(ODBC-datakälladministratör) - Gå till fliken Drivrutiner
- Kontrollera att "Microsoft ODBC-drivrutin för Microsoft Fabric Data Engineering" visas
Snabbstartsexempel
Detta exempel visar hur man ansluter till Fabric och kör en fråga med Microsoft ODBC Driver för Microsoft Fabric Data Engineering. Innan du kör den här koden kontrollerar du att du har slutfört förutsättningarna och installerat drivrutinen.
C/C++-exempel
#include <windows.h>
#include <sql.h>
#include <sqlext.h>
#include <iostream>
int main() {
SQLHENV environment = SQL_NULL_HENV;
SQLHDBC connection = SQL_NULL_HDBC;
SQLHSTMT statement = SQL_NULL_HSTMT;
SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &environment);
SQLSetEnvAttr(
environment,
SQL_ATTR_ODBC_VERSION,
(SQLPOINTER)SQL_OV_ODBC3,
0);
SQLAllocHandle(SQL_HANDLE_DBC, environment, &connection);
const char* connectionString =
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=AZURE_CLI;";
SQLRETURN result = SQLDriverConnectA(
connection,
NULL,
(SQLCHAR*)connectionString,
SQL_NTS,
NULL,
0,
NULL,
SQL_DRIVER_NOPROMPT);
if (SQL_SUCCEEDED(result)) {
SQLAllocHandle(SQL_HANDLE_STMT, connection, &statement);
result = SQLExecDirectA(
statement,
(SQLCHAR*)"SELECT 'Hello from Fabric!' AS message",
SQL_NTS);
if (SQL_SUCCEEDED(result)) {
char message[256];
SQLLEN indicator;
while (SQLFetch(statement) == SQL_SUCCESS) {
SQLGetData(
statement,
1,
SQL_C_CHAR,
message,
sizeof(message),
&indicator);
std::cout << message << std::endl;
}
}
SQLFreeHandle(SQL_HANDLE_STMT, statement);
SQLDisconnect(connection);
}
SQLFreeHandle(SQL_HANDLE_DBC, connection);
SQLFreeHandle(SQL_HANDLE_ENV, environment);
return 0;
}
Python-exempel
import pyodbc
# Connection string with required parameters
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=AZURE_CLI;"
)
# Connect and execute query
conn = pyodbc.connect(connection_string, timeout=30)
cursor = conn.cursor()
cursor.execute("SELECT 'Hello from Fabric!' as message")
row = cursor.fetchone()
print(row.message)
conn.close()
.NET-exempel
using System.Data.Odbc;
// Connection string with required parameters
string connectionString =
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};" +
"WorkspaceId=<workspace-id>;" +
"LakehouseId=<lakehouse-id>;" +
"AuthFlow=AZURE_CLI;";
using var connection = new OdbcConnection(connectionString);
await connection.OpenAsync();
Console.WriteLine("Connected successfully!");
using var command = new OdbcCommand("SELECT 'Hello from Fabric!' as message", connection);
using var reader = await command.ExecuteReaderAsync();
if (await reader.ReadAsync())
{
Console.WriteLine(reader.GetString(0));
}
Format för anslutningssträng
Grundläggande anslutningssträng
Microsoft ODBC-drivrutinen för Microsoft Fabric Data Engineering använder följande format för anslutningssträngar:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};<parameter1>=<value1>;<parameter2>=<value2>;...
Anslutningssträngskomponenter
| Komponent | Description | Example |
|---|---|---|
| DRIVER | ODBC-drivrutinsidentifierare | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
| WorkspaceId | Fabric-arbetsytans identifierare (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| LakehouseId | Fabric lakehouse-identifier (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| AuthFlow | Autentiseringsmetod |
AZURE_CLI, INTERACTIVE, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE, ACCESS_TOKEN, FILE_TOKEN |
Exempel på anslutningssträngar
Grundläggande anslutning (Azure CLI-autentisering)
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI
Med prestandaalternativ
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;ReuseSession=true;LargeTableSupport=true;PageSizeBytes=18874368
Med loggning
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LogLevel=DEBUG;LogFile=odbc_driver.log
Med läge för hög samtidighet
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
Se avsnittet omHigh-Concurrency (HC) Mode för fullständig konfigurationsvägledning.
Authentication
Microsoft ODBC-drivrutinen för Microsoft Fabric Data Engineering stöder flera autentiseringsmetoder via Microsoft Entra-ID (tidigare Azure Active Directory). Autentisering konfigureras med hjälp av parametern AuthFlow i anslutningssträngen.
Autentiseringsmetoder
| AuthFlow-värde | Description |
|---|---|
CLIENT_CREDENTIAL (0) |
Tjänsthuvudnamn med klienthemlighet. Alias: CLIENT_SECRET_CREDENTIAL. |
BROWSER_BASED (1) |
Interaktiv webbläsarbaserad autentisering. Alias: INTERACTIVE. |
AZURE_CLI (2) |
Utveckling med hjälp av autentiseringsuppgifter för Azure CLI. |
CLIENT_CERTIFICATE_CREDENTIAL (3) |
Tjänsteansvarig med certifikat. Alias: CLIENT_CERTIFICATE. |
AUTH_ACCESS_TOKEN (4) |
I förväg förvärvad bearer-åtkomsttoken. Alias: ACCESS_TOKEN. |
FILE_TOKEN (5) |
Läser en autentiseringstoken från en fil. |
Du kan ange autentiseringsvärden i upper snake case, Pascal case eller numerisk form. Föraren accepterar också korta alias såsom Browser, , , CLI, CertificateToken, och FileInteractive. Föraren ignorerar understreck när den jämför värden.
Azure CLI-autentisering
Bäst för: Utveckling och interaktiva program
# Python Example
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=AZURE_CLI;"
"Scope=https://api.fabric.microsoft.com/.default;"
)
conn = pyodbc.connect(connection_string)
Prerequisites:
- Azure CLI installerat:
az --version - Inloggad:
az login
Interaktiv webbläsarautentisering
Bäst för: Användarinriktade program
# Python Example
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=INTERACTIVE;"
"TenantId=<tenant-id>;"
"Scope=https://api.fabric.microsoft.com/.default;"
)
conn = pyodbc.connect(connection_string)
Beteende:
- Öppnar ett webbläsarfönster för användarautentisering
- Autentiseringsuppgifter cachelagras för efterföljande anslutningar
Klientautentiseringsuppgifter (tjänstens huvudnamn) autentisering
Bäst för: Automatiserade tjänster och bakgrundsjobb
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=CLIENT_CREDENTIAL;"
f"TenantId={tenant_id};"
f"ClientId={client_id};"
f"ClientSecret={client_secret};"
)
Obligatoriska parametrar
-
TenantId: Azure-klientorganisations-ID -
ClientId: Program-ID (klient) från Microsoft Entra-ID -
ClientSecret: Klienthemlighet från Microsoft Entra-ID
Bästa praxis
- Lagra hemligheter på ett säkert sätt (Azure Key Vault, miljövariabler)
- Använda hanterade identiteter när det är möjligt
- Rotera hemligheter regelbundet
Certifikatbaserad autentisering
Bäst för: Företagsprogram som kräver certifikatbaserad autentisering
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=CLIENT_CERTIFICATE;"
"TenantId=<tenant-id>;"
"ClientId=<client-id>;"
"CertificatePath=C:\\certs\\mycert.pfx;"
"CertificatePassword=<password>;"
)
Obligatoriska parametrar:
-
TenantId: Azure-klientorganisations-ID -
ClientId: Program-ID (klient)-ID -
CertificatePath: Sökväg till PFX/PKCS12-certifikatfilen -
CertificatePassword: Certifikatlösenord
Åtkomsttokenautentisering
Bäst för: Scenarier för anpassad autentisering
# Acquire token through custom mechanism
access_token = acquire_token_from_custom_source()
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=ACCESS_TOKEN;"
f"AccessToken={access_token};"
)
Autentisering med filtoken
Använd filtokenautentisering för containeriserade miljöer och automatiserade pipelines där en annan process skriver en bärartoken till drivrutinens välkända tokenfil:
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=FILE_TOKEN;"
)
Drivrutinen löser tokenfilens plats på Windows och Linux.
Alias för egenskaper mellan drivrutiner
ODBC-drivrutinen accepterar utvalda ADO.NET- och JDBC-egendomsnamn utöver de ursprungliga ODBC-namnen. Detta stöd kan minska förändringar i anslutningssträngar när du byter mellan Fabric-drivrutiner.
| ADO.NET- eller JDBC-egenskap | ODBC:s motsvarighet |
|---|---|
FabricWorkspaceID |
WorkspaceId |
FabricLakehouseID |
LakehouseId |
LivySessionTimeoutSeconds |
Tidsgräns för anslutning |
LivyStatementTimeoutSeconds |
Utdragstidsgräns |
ConnectionPoolEnabled |
Pool aktiverad |
Drivrutinen löser 17 drivrutinsövergripande alias vid anslutning.
Konfigurationsparametrar
Obligatoriska parametrar
Dessa parametrar måste finnas i varje anslutningssträng:
| Parameter | Typ | Description | Example |
|---|---|---|---|
| WorkspaceId | universellt unik identifierare (UUID) | Fabric-arbetsyteidentifierare | 4bbf89a8-... |
| LakehouseId | universellt unik identifierare (UUID) | Fabric lakehouse-identifierare | d8faa650-... |
| AuthFlow | String | Typ av autentiseringsflöde | AZURE_CLI |
Valfria parametrar
Anslutningsinställningar
| Parameter | Typ | Förinställning | Description |
|---|---|---|---|
| Databas | String | None | Inledande databas för klassiskt läge. HC-läget tillämpar det inte automatiskt; kör USE <database> efter anslutning eller använd fullt kvalificerade tabellnamn. |
| Omfång | String | https://api.fabric.microsoft.com/.default |
OAuth-omfång |
Prestandainställningar
| Parameter | Typ | Förinställning | Description |
|---|---|---|---|
| Återanvändningsession | Boolean | true |
Återanvänd befintlig Spark-session |
| LargeTableSupport | Boolean | false |
Aktivera optimeringar för stora resultatuppsättningar |
| EnableAsyncPrefetch | Boolean | false |
Aktivera förinläsning av bakgrundsdata |
| SidstorlekBytes | Integer |
18874368 (18 MB) |
Sidstorlek för resultatnumrering (1–18 MB) |
Loggningsinställningar
| Parameter | Typ | Förinställning | Description |
|---|---|---|---|
| LogLevel | String | INFO |
Log-nivå: DEBUG, INFO, WARN, eller ERROR. Använd DEBUG för detaljerad drivrutinsdiagnostik. |
| Loggfil | String | odbc_driver.log |
Loggfilsökväg (absolut eller relativ) |
Proxyinställningar
| Parameter | Typ | Förinställning | Description |
|---|---|---|---|
| UseProxy | Boolean | false |
Aktivera proxy |
| ProxyHost | String | None | Proxyvärdnamn |
| ProxyPort | Integer | None | Proxyport |
| ProxyUsername | String | None | Användarnamn för proxyautentisering |
| ProxyPassword | String | None | Proxyautentiseringslösenord |
Inställningar för hög samtidighet (HC)
Använd dessa parametrar för att aktivera och konfigurera högkonkurrensläge (HC). HC-läget är frivilligt. Om du inte ställer LivyMode in eller UseHighConcurrency, använder drivrutinen den klassiska enkelsessionsvägen. Vägledning och exempel finns i läge för hög samtidighet (HC).
| Parameter | Typ | Förinställning | Description |
|---|---|---|---|
LivyMode |
String | Inte inställt | Styr insamling av sessioner. Värden som stöds är Classic, HighConcurrencyoch Auto.
Auto Använder för närvarande den klassiska vägen. |
UseHighConcurrency |
Boolean | false |
Aktiverar HC-läge som ett alternativ till att sätta LivyMode=HighConcurrency. |
SessionTag |
String | None | Ger ett tips om paketering på serversidan. Anslutningar måste använda matchande serverkonfiguration för att dela en varm Livy-session. |
IdempotencyKey |
String | None | Tillhandahåller en klientgenererad nyckel för säkra HC-förvärvsförsök. Drivrutinen validerar teckenuppsättningen och loggar aldrig värdet. |
EnvironmentId |
String | None | Specificerar Fabric-miljöidentifieraren som skickas som spark.fabric.environmentDetails i HC-anskaffningskonfigurationen. |
HeartbeatTimeoutInSecond |
Integer | Serverns standardinställning | Anger tidsgränsen för inaktivitet för den serversidiga HC-sessionen, i sekunder. Värdet måste vara ett positivt heltal. |
AcquireTimeoutSeconds |
Integer | 300 |
Anger hur länge drivrutinen väntar på att en HC-session ska nå tillståndet Idle, i sekunder. Värdet måste vara ett positivt heltal. |
conf.<key> |
String | None | Specificerar en Spark-konfigurationsöverskrivning som skickas i HC-anskaffningsbegäran. Till exempel conf.spark.sql.shuffle.partitions=200. |
Lägesprioritering och validering
-
LivyModeHar företräde framförUseHighConcurrencynär du sätter båda parametrarna. - Parametervärden är inte kasuskänsliga.
-
UseHighConcurrencyaccepterartrue,1, ,yes, elleronaktiverar HC-läge. Den accepterarfalse,0,noelleroffför att inaktivera HC-läget. - För andra icke-tomma värden returnerar
SQLDriverConnectett fel. DSN-endastSQLConnectloggar valideringsfelet och använder den klassiska vägen.
Kompatibilitetsinställningar
Drivrutinen accepterar TenantPrincipal och PoolMax, inklusive deras miljövariabler för att säkerställa kompatibilitet med tidigare HC-konfigurationer. Drivrutinen tolkar och validerar dessa värden, men de påverkar inte HC-sessionsmatchning eller körtidspoolens kapacitet. Lita inte på dem för isolering av hyresgäster eller anslutningsbegränsningar.
Reservlösningar för miljövariabler
Drivrutinen använder följande miljövariabler endast när motsvarande DSN- eller anslutningssträngsparameter inte är satt:
| Miljövariabel | Mappar till |
|---|---|
FABRIC_ODBC_USE_HC |
UseHighConcurrency |
FABRIC_ODBC_WORKSPACE_ID |
WorkspaceId |
FABRIC_ODBC_LAKEHOUSE_ID |
LakehouseId |
FABRIC_ODBC_ENVIRONMENT_ID |
EnvironmentId |
FABRIC_ODBC_SESSION_TAG |
SessionTag |
FABRIC_ODBC_TENANT_PRINCIPAL |
TenantPrincipal (endast kompatibilitet) |
FABRIC_ODBC_HC_HEARTBEAT_SECONDS |
HeartbeatTimeoutInSecond |
FABRIC_ODBC_HC_ACQUIRE_TIMEOUT |
AcquireTimeoutSeconds |
FABRIC_ODBC_HC_POOL_MAX |
PoolMax (endast kompatibilitet) |
För FABRIC_ODBC_USE_HC känner aktivering endast för miljö igen true, 1 eller yes (skiftlägesokänsligt). Andra värden gör att HC förblir inaktiverat. Och onoff aliasen gäller endast för DSN- och anslutningssträngsvärden.
Miljöinställningar
Du kan koppla ett Fabric miljöobjekt till Spark-sessionen som startades av drivrutinen. Den valda miljöns bibliotek, Spark-egenskaper och variabler tillämpas automatiskt när sessionen skapas.
| Parameter | Typ | Förinställning | Description |
|---|---|---|---|
| MiljöId | universellt unik identifierare (UUID) | None | Fabric miljöobjektidentifierare (GUID) som ska tillämpas när Spark-sessionen skapas |
Exempel på anslutningssträng med en miljöparameter:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;EnvironmentId=<environment-id>
Anmärkning
Konfigurationen för miljön tillämpas när Spark-sessionen startar. Om du också anger anpassade Egenskaper för Spark-konfiguration har egenskaper på sessionsnivå företräde framför miljöstandarderna.
Anpassad Spark-konfiguration
Du kan skicka Spark-konfigurationsegenskaper direkt i reťazec pripojenia. Alla parametrar som är försedda med prefixet spark. tillämpas automatiskt på Spark-sessionen vid skapandet, vilket gör det möjligt för dig att åsidosätta arbetsytans eller körningens standardvärden.
Exempel på Spark-konfigurationer:
spark.sql.shuffle.partitions=200
spark.sql.adaptive.enabled=true
spark.sql.autoBroadcastJoinThreshold=10485760
Example reťazec pripojenia med anpassade Spark-egenskaper:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;spark.sql.shuffle.partitions=200;spark.sql.adaptive.enabled=true
Anmärkning
Spark-konfigurationsegenskaper tillämpas när sessionen skapas. De gäller för alla förfrågningar som körs i den sessionen och åsidosätter miljö- eller körningsinställningar för motsvarande egenskaper.
Läge för hög samtidighet (HC)
High-concurrency (HC)-läge låter ODBC-anslutningar till samma arbetsyta och lakehouse ansluta till delade, varma server-sida Livy Spark-sessioner istället för att provisionera ett separat kluster för varje anslutning. Använd det för arbetsbelastningar som BI-dashboards, notebook-kärnor och ETL-fan-out som öppnar många kortvariga anslutningar och kan dela serverhanterad Spark-kapacitet.
HC-läget är frivilligt. Om du inte konfigurerar en HC-inställning använder drivrutinen den klassiska enkelsessionsvägen.
Välj ett anslutningsläge
Använd HC-läge när:
- Din arbetsbelastning öppnar många kortvariga ODBC-anslutningar, till exempel BI-paneler, notebook-kärnor eller ETL-förgreningar.
- Anslutningar riktar sig mot samma arbetsyta och lakehouse och kan dela en serverhanterad Spark-session.
- Att minska kallstartslatens per anslutning är viktigt.
Använd klassiskt läge när:
- Varje anslutning kräver en isolerad Spark-session på grund av olika Spark-konfigurationer eller strikt resursisolering.
- Fabric Livy-endpointen för målarbetsytan och lakehouse stöder inte HC-läge.
Aktivera läge för hög samtidighet
Lägg till en parameter för hög samtidighet i DSN:en eller anslutningssträngen.
Rekommenderat: Set LivyMode
Använd LivyMode för att explicit välja sessionsinhämtningsläget:
LivyMode=HighConcurrency
Värden som stöds är Classic, HighConcurrencyoch Auto. Värden är inte skiftlägeskänsliga.
Auto Väljer för närvarande klassiskt läge.
Alternativ: Ange UseHighConcurrency
Använd den booleska inställningen för kompatibilitet med befintliga konfigurationer:
UseHighConcurrency=true
För att aktivera läge för hög samtidighet använder du true, 1, yes eller on. För att inaktivera den, använd false, 0, , noeller off. Värden är inte skiftlägeskänsliga.
SQLDriverConnect förkastar andra icke-tomma värden med SQLSTATE HY024. DSN-endast SQLConnect loggar valideringsfelet och använder klassiskt läge.
Anmärkning
Om du sätter båda parametrarna, LivyMode får företräde över UseHighConcurrency.
Nödvändiga parametrar i HC-läge
HC-aktivering kräver följande giltiga identifierare:
| Parameter | Notes |
|---|---|
WorkspaceId |
Måste vara en giltig Fabric workspace GUID. |
LakehouseId |
Det måste vara ett giltigt Fabric lakehouse-GUID. |
Inkludera SessionTag eftersom det påverkar matchningen på serversidan för uppvärmda sessioner.
Matchning av sessioner
HC-läget garanterar inte att varje anslutning återanvänder en befintlig session. För varje sessionsinhämtningsbegäran skickar drivrutinen:
- Värdet
SessionTag. - Den effektiva Spark-konfigurationen, inklusive
conf.*inställningar ochEnvironmentId.
Fabric Livy-tjänsten utvärderar dessa värden och beslutar om kopplingen ska kopplas till en varm session eller skapas en ny. För att förbättra återanvändning av sessioner, använd konsekventa värden över anslutningar som är avsedda att dela serverhanterad Spark-kapacitet.
Exempel på anslutningssträngar
Minimal HC-anslutning (Azure CLI-autentisering):
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
HC med anpassade tidsgränser:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=etl-prod;AcquireTimeoutSeconds=180;HeartbeatTimeoutInSecond=600
HC med en miljö och åsidosättningar för Spark-konfigurationen:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;EnvironmentId=<environment-id>;SessionTag=ml-team;conf.spark.sql.shuffle.partitions=200;conf.spark.executor.memory=8g
Python (pyodbc):
import pyodbc
conn = pyodbc.connect(
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=AZURE_CLI;"
"LivyMode=HighConcurrency;"
"SessionTag=notebook-kernel"
)
Konfigurera HC-läge i en DSN
Du kan lagra HC-inställningar i en DSN istället för att upprepa dem i varje reťazec pripojenia. När en reťazec pripojenia inte specificerar något värde, läser drivrutinen dessa inställningar från DSN:n:
LivyModeUseHighConcurrencyEnvironmentIdSessionTagIdempotencyKeyHeartbeatTimeoutInSecondAcquireTimeoutSeconds
Drivrutinen läser också inställningarna TenantPrincipal och PoolMax, som endast är avsedda för kompatibilitet. För att spara dessa inställningar redigerar du DSN:en i odbcad32.exe eller använder SQLWritePrivateProfileString. Använd parameternamnen i HC-inställningstabellen.
Viktigt!
Drivrutinen läser conf.* inte Spark-konfigurationsöverskrivningar från DSN. Lägg till dem i anslutningssträngen under körning eller injicera dem innan du anropar SQLDriverConnect.
Inaktivera HC-läget
Du kan inaktivera att nya HC-sessioner hämtas utan att driftsätta om drivrutinen. Använd metoden som motsvarar hur du aktiverade HC-läget:
| HC-konfigurationskälla | Hur man inaktiverar HC-läget |
|---|---|
| Endast miljövariabel | Sätt FABRIC_ODBC_USE_HC=false, eller ta bort variabeln. |
| DSN | Ange LivyMode=Classic. Alternativt, ta bort LivyMode och sätt UseHighConcurrency=false. |
| Anslutningssträng | Sätt LivyMode=Classic, eller ta bort HC-parametrarna. |
Anslutningssträngs- och DSN-inställningar har företräde framför miljövariabelns fallback. Dessa förändringar påverkar endast nya anslutningar. Befintliga HC-sessioner fortsätter tills de släpps.
Förstå HC:s körtidsbeteende
-
Validering:
SQLDriverConnectavvisar ogiltiga HC Booleska och positiva heltalsvärden med SQLSTATEHY024. Den avvisar en ogiltigLivyModesamt ogiltiga eller för storaWorkspaceId-,LakehouseId- ochIdempotencyKey-värden med SQLSTATE-kodenHY000. Ett för stort kompatibilitetsvärde returnerar ocksåHY000. För endastSQLConnectDSN loggar drivrutinen vanliga HC-valideringsfel och använder klassiskt läge. Överdimensionerade säkerhetskänsliga värden misslyckas fortfarande med anslutningen. -
Känslig data: Drivrutinen utesluter eller raderar
IdempotencyKeyandra känsliga fält från HC-loggar och diagnostiska utdata. - Avbrytning: Avbrytning av satsen sker kooperativt. Pågående serverprocesser fasas ut på ett kontrollerat sätt i stället för att avbrytas omedelbart.
- Automatsäkringar: HC-läge och klassiskt läge använder separata automatsäkringar. Att tömma ett läge påverkar inte det andra.
-
Initialdatabas: HC-anslutningar exekverar inte den initiala
USEsatsen för parameternDatabase. KörUSE <database>efter anslutning eller använd fullt kvalificerade tabellnamn. -
Diagnostik: Ställ
LogLevel=DEBUGin för att logga beslut om HC-förvärv, polling, release och felkartläggning. För riktad felsökning anger duLIVY_HC_VERBOSE=1så att ytterligare sanerad HC HTTP-diagnostik inkluderas.
Konfigurera ett DSN
Skapa ett system-DSN
Öppna ODBC-administratör
%SystemRoot%\System32\odbcad32.exeSkapa nytt system-DSN
- Gå till fliken System DSN
- Välj Lägg till
- Välj "Microsoft ODBC-drivrutin för Microsoft Fabric Data Engineering"
- Välj "Slutför"
Konfigurera DSN-inställningar
-
Namn på datakälla: Ange ett unikt namn (t.ex.
FabricODBC) - Beskrivning: Valfri beskrivning
- Arbetsyte-ID: Ditt GUID för arbetsytan
- Lakehouse-ID: Ditt Fabric Lakehouse GUID
- Autentisering: Välj autentiseringsmetod
- Environment ID (valfritt): Ange GUID för det Fabric miljöobjekt som ska bifogas när sessionen skapas
-
Livy-läge (valfritt): Ställt in på
HighConcurrencyför att aktivera HC-läge - Sessionstagg (valfritt): Ange en icke-känslig operativ etikett för HC-sessionsmatchning
- Konfigurera ytterligare inställningar efter behov
-
Namn på datakälla: Ange ett unikt namn (t.ex.
Testanslutning
- Välj "Testa anslutning" för att verifiera inställningarna
- Välj "OK" för att spara
Använda DSN i program
# Python - Connect using DSN
conn = pyodbc.connect("DSN=FabricODBC")
// .NET - Connect using DSN
using var connection = new OdbcConnection("DSN=FabricODBC");
await connection.OpenAsync();
Exempel på användning
Grundläggande anslutning och fråga
python
import pyodbc
def main():
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=AZURE_CLI;"
"ReuseSession=true;"
)
conn = pyodbc.connect(connection_string, timeout=30)
cursor = conn.cursor()
print("Connected successfully!")
# Show available tables
print("\nAvailable tables:")
cursor.execute("SHOW TABLES")
for row in cursor.fetchall():
print(f" {row}")
# Query data
print("\nQuery results:")
cursor.execute("SELECT * FROM employees LIMIT 10")
# Print column names
columns = [desc[0] for desc in cursor.description]
print(f"Columns: {columns}")
# Print rows
for row in cursor.fetchall():
print(row)
conn.close()
if __name__ == "__main__":
main()
.NET
using System.Data.Odbc;
class Program
{
static async Task Main(string[] args)
{
string connectionString =
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};" +
"WorkspaceId=<workspace-id>;" +
"LakehouseId=<lakehouse-id>;" +
"AuthFlow=AZURE_CLI;" +
"ReuseSession=true;";
using var connection = new OdbcConnection(connectionString);
await connection.OpenAsync();
Console.WriteLine("Connected successfully!");
// Show available tables
Console.WriteLine("\nAvailable tables:");
using (var cmd = new OdbcCommand("SHOW TABLES", connection))
using (var reader = await cmd.ExecuteReaderAsync())
{
while (await reader.ReadAsync())
{
Console.WriteLine($" {reader.GetString(0)}");
}
}
// Query data
Console.WriteLine("\nQuery results:");
using (var cmd = new OdbcCommand("SELECT * FROM employees LIMIT 10", connection))
using (var reader = await cmd.ExecuteReaderAsync())
{
// Print column names
var columns = new List<string>();
for (int i = 0; i < reader.FieldCount; i++)
{
columns.Add(reader.GetName(i));
}
Console.WriteLine($"Columns: {string.Join(", ", columns)}");
// Print rows
while (await reader.ReadAsync())
{
var values = new object[reader.FieldCount];
reader.GetValues(values);
Console.WriteLine(string.Join("\t", values));
}
}
}
}
Arbeta med stora resultatuppsättningar
import pyodbc
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=AZURE_CLI;"
"LargeTableSupport=true;"
"PageSizeBytes=18874368;" # 18 MB pages
"EnableAsyncPrefetch=1;"
)
conn = pyodbc.connect(connection_string)
cursor = conn.cursor()
# Execute large query
cursor.execute("SELECT * FROM large_table")
# Process in batches
row_count = 0
while True:
rows = cursor.fetchmany(1000) # Fetch 1000 rows at a time
if not rows:
break
for row in rows:
# Process row
row_count += 1
if row_count % 10000 == 0:
print(f"Processed {row_count} rows")
print(f"Total rows processed: {row_count}")
conn.close()
Kör DML-satser
bool executeDml(SQLHDBC connection, const char* sql, const char* description) {
SQLHSTMT statement = SQL_NULL_HSTMT;
SQLAllocHandle(SQL_HANDLE_STMT, connection, &statement);
std::cout << "Executing: " << description << std::endl;
SQLRETURN result = SQLExecDirectA(
statement,
(SQLCHAR*)sql,
SQL_NTS);
bool succeeded = SQL_SUCCEEDED(result);
if (succeeded) {
SQLLEN rowCount;
SQLRowCount(statement, &rowCount);
std::cout << "Rows affected: " << rowCount << std::endl;
}
SQLFreeHandle(SQL_HANDLE_STMT, statement);
return succeeded;
}
Använd executeDml med INSERT, UPDATE, eller DELETE satser. Det rapporterade radantalet beror på om resultatet innehåller ett antal uppdaterade rader som drivrutinen känner igen.
Upptäckt av schema
import pyodbc
conn = pyodbc.connect(connection_string)
cursor = conn.cursor()
# List all tables
print("Tables in current default schema / database:")
cursor.execute("SHOW TABLES")
tables = cursor.fetchall()
for table in tables:
print(f" {table}")
# Describe table structure
print("\nTable structure for 'employees':")
cursor.execute("DESCRIBE employees")
for col in cursor.fetchall():
print(f" {col}")
# List schemas (for multi-schema Lakehouses)
print("\nAvailable schemas:")
cursor.execute("SHOW SCHEMAS")
for db in cursor.fetchall():
print(f" {db}")
conn.close()
Datatypkartläggning
Drivrutinen mappar Spark SQL-datatyper till ODBC SQL-typer:
| Spark SQL-typ | ODBC SQL-typ | C/C++-typ | Python-typ | .NET-typ |
|---|---|---|---|---|
| Boolean | SQL_BIT | SQLCHAR | bool | bool |
| BYTE | SQL_TINYINT | SQLSCHAR | int | sbyte |
| KORT | SQL_SMALLINT | SQLSMALLINT | int | kort |
| INT | SQL_INTEGER | SQLINTEGER | int | int |
| LONG | SQL_BIGINT | SQLBIGINT | int | long |
| FLOAT | SQL_REAL | SQLREAL | flyta/sväva | flyta/sväva |
| Dubbel | SQL_DOUBLE | SQLDOUBLE | flyta/sväva | dubbel |
| DECIMAL | SQL_DECIMAL | SQLCHAR* | decimal.Decimal | decimal |
| STRING | SQL_VARCHAR | SQLCHAR* | str | snöre |
| VARCHAR(n) | SQL_VARCHAR | SQLCHAR* | str | snöre |
| CHAR(n) | SQL_CHAR | SQLCHAR* | str | snöre |
| BINARY | SQL_VARBINARY | SQLCHAR* | bytes | byte[] |
| DATE | SQL_TYPE_DATE | SQL_DATE_STRUCT | datetime.date | DateTime |
| TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_TIMESTAMP_STRUCT | datetime.datetime | DateTime |
| ARRAY | SQL_VARCHAR | SQLCHAR* | str (JSON) | snöre |
| MAP | SQL_VARCHAR | SQLCHAR* | str (JSON) | snöre |
| STRUCT | SQL_VARCHAR | SQLCHAR* | str (JSON) | snöre |
BI-verktygsintegrering
Microsoft Excel
- Öppna Excel –> Data –> Hämta data –> från andra källor –> från ODBC
- Välj ditt konfigurerade DSN (t.ex.
FabricODBC) - Autentisera om du uppmanas att göra det
- Bläddra bland och välj tabeller
- Läsa in data i Excel-kalkylblad
Power BI Desktop
- Öppna Power BI Desktop –> Hämta data –> ODBC
- Välj ditt konfigurerade DSN
- Bläddra i datakatalogen och välj tabeller
- Transformera data efter behov
- Skapa visualiseringar
SQL Server Management Studio (Länkad Server)
-- Create linked server
EXEC sp_addlinkedserver
@server = 'FABRIC_LINKED_SERVER',
@srvproduct = 'Microsoft Fabric',
@provider = 'MSDASQL',
@datasrc = 'FabricODBC'
-- Configure RPC
EXEC master.dbo.sp_serveroption
@server = N'FABRIC_LINKED_SERVER',
@optname = N'rpc out',
@optvalue = N'true';
-- Query via linked server
SELECT * FROM OPENQUERY(FABRIC_LINKED_SERVER, 'SHOW TABLES');
SELECT * FROM OPENQUERY(FABRIC_LINKED_SERVER, 'SELECT * FROM employees LIMIT 20');
-- Execute statements
EXEC('SELECT * FROM employees LIMIT 10') AT FABRIC_LINKED_SERVER;
Felsökning
Det här avsnittet innehåller vägledning för att lösa vanliga problem som kan uppstå när du använder Microsoft ODBC-drivrutinen för Microsoft Fabric Data Engineering.
Vanliga problem
I följande avsnitt beskrivs vanliga problem och deras lösningar:
Anslutningsfel
Problem: Kan inte ansluta till Fabric
Lösningar:
- Kontrollera att arbetsyte-ID och lakehouse-ID är giltiga GUID:er
- Kontrollera Azure CLI-autentisering:
az account show - Se till att du har rätt behörigheter för Fabric-arbetsyta
- Kontrollera nätverksanslutningen och proxyinställningarna
Autentiseringsfel
Problem: Autentiseringen misslyckas med Azure CLI
Lösningar:
- Kör
az loginför att uppdatera autentiseringsuppgifter - Verifiera rätt klient:
az account set --subscription <subscription-id> - Kontrollera tokens giltighet:
az account get-access-token --resource https://api.fabric.microsoft.com
Timeout för frågor
Problem: Frågor som överskrider tidsgränsen för stora tabeller
Lösningar:
- Aktivera
LargeTableSupport=true - Justera
PageSizeBytesför optimal segmentstorlek - Aktivera asynkron prefetch:
EnableAsyncPrefetch=1 - Använd
LIMIT-sats för att begränsa resultatstorleken
Aktivera loggning
När du felsöker problem kan du identifiera rotorsaken till problem genom att aktivera detaljerad loggning. Du kan aktivera loggning via anslutningssträngen.
Så här aktiverar du detaljerad loggning:
LogLevel=DEBUG;LogFile=C:\temp\odbc_driver_debug.log;
Loggnivåer:
-
DEBUG: Detaljerad felsökningsinformation och den mest utförliga loggnivån för drivrutinen -
INFO: Allmän information (standard) -
WARN: Endast varningar -
ERROR: Endast fel
ODBC-spårning
För lågnivådiagnostik kan du aktivera Windows ODBC-spårning för att samla in detaljerade ODBC API-anrop och drivrutinsbeteende. Kom ihåg att inaktivera spårning när det inte behövs för att upprätthålla optimala prestanda.
Så här aktiverar du ODBC-spårning:
- Öppna
odbcad32.exe - Gå till fliken "Spårning"
- Ange sökväg för spårningsfiler (t.ex.
C:\temp\odbctrace.log) - Välj "Starta spårning nu"
- Återskapa problemet
- Välj "Stoppa spårning nu"