Microsoft ODBC-driver til Microsoft Fabric Data Engineering

ODBC (Open Database Connectivity) er en bredt anvendt standard, der gør det muligt for klientapplikationer at forbinde til og arbejde med data fra databaser og big data-platforme.

Microsoft ODBC Driver for Fabric Data Engineering lader dig forbinde, forespørge og administrere Spark-arbejdsbelastninger i Fabric med pålideligheden og enkelheden fra ODBC-standarden. Drevet på Fabric's Livy API'er leverer sikker og fleksibel Spark SQL-forbindelse til dine C/C++, .NET, Python og andre ODBC-kompatible applikationer og BI-værktøjer.

Vigtige funktioner

  • ODBC 3.x-kompatibel: Fuld implementering af ODBC 3.x-specifikationen
  • Microsoft Entra ID autentificering: Flere autentificeringsstrømme, herunder Azure CLI, interaktiv, klientlegitimations-, certifikatbaseret og adgangstoken-autentificering
  • Spark SQL-forespørgselsunderstøttelse: Direkte udførelse af Spark SQL-sætninger
  • Omfattende understøttelse af datatyper: Understøttelse af alle Spark SQL-datatyper, inklusive komplekse typer (ARRAY, MAP, STRUCT)
  • Genbrug af sessioner: Indbygget sessionsstyring for forbedret ydeevne
  • Høj-samtidighedstilstand: Vælg delte, varme server-side Livy-sessioner for at reducere forbindelsesopstartsforsinkelse og Spark-klyngens spredning
  • Understøttelse af store tabel: Optimeret håndtering af store resultatsæt med konfigurerbare sidestørrelser
  • Async prefetch: Baggrundsdataindlæsning for forbedret ydeevne
  • Proxy-understøttelse: HTTP-proxykonfiguration til virksomhedsmiljøer
  • Multi-schema lakehouse-support: Forbind til et specifikt skema inden for et lakehouse
  • OneLake-integration: Få adgang til lakehouse-data lagret i OneLake, inklusive tabeller på tværs af flere skemaer, via et samlet ODBC-interface uden separat lagringskonfiguration
  • Miljøelementer understøtter: Vedhæft Fabric miljøelementer under jobudførelsen for at anvende arbejdsområdebiblioteker, Spark-egenskaber og variabler til hver session
  • Custom Spark-konfiguration: Send Spark-konfigurationsegenskaber direkte gennem forbindelsesstreng for at tune sessionsadfærden

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 ODBC-driveren til Microsoft Fabric Data Engineering, skal du sikre dig, at du har:

  • Operativsystem: Windows 10/11 eller Windows Server 2016+
  • Fabric Access: Adgang til et Fabric-arbejdsområde
  • Microsoft Entra ID legitimationsoplysninger: 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 og MSI-installation

  1. Download Microsoft ODBC-driveren til Microsoft Fabric Data Engineering MSI-pakken
  2. Dobbeltklik MicrosoftFabricODBCDriver-2.0.msi.
  3. Følg installationsguiden og accepter licensaftalen
  4. Vælg installationsmappe (standard: C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\)
  5. Fuldfør installationen

Uovervåget installation

# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet

# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log

Kontrollér installationen

Efter installation, verificér at driveren er registreret:

  1. Kør odbcad32.exe (ODBC Data Source Administrator)
  2. Navigér til fanen Drivere
  3. Bekræft at "Microsoft ODBC Driver for Microsoft Fabric Data Engineering" er opført

Eksempel på hurtigstart

Dette eksempel demonstrerer, hvordan man forbinder til Fabric og udfører en forespørgsel ved hjælp af Microsoft ODBC Driver for Microsoft Fabric Data Engineering. Før du kører denne kode, skal du sikre dig, at du har opfyldt adgangskravene og installeret driveren.

C/C++ eksempel

#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-eksempel

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-eksempel

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));
}

Forbindelsesstrengsformat

Grundlæggende forbindelsesstreng

Microsoft ODBC-driveren for Microsoft Fabric Data Engineering bruger følgende forbindelsesstrengsformat:

DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};<parameter1>=<value1>;<parameter2>=<value2>;...

Forbindelsesstrengskomponenter

Komponent Beskrivelse Eksempel
KØRER ODBC driver-identifikator {Microsoft ODBC Driver for Microsoft Fabric Data Engineering}
WorkspaceId Fabric workspace identifier (GUID) xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
LakehouseId Fabric lakehouse-identifikator (GUID) xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx
AuthFlow Godkendelsesmetode AZURE_CLI, INTERACTIVE, CLIENT_CREDENTIAL, CLIENT_CERTIFICATEACCESS_TOKENFILE_TOKEN

Eksempel på forbindelsesstrenge

Basic connection (Azure CLI authentication)

DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI

Med ydeevnemuligheder

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 skovhugning

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 høj samtidighedsmode

DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard

Se afsnittet omHigh-Concurrency (HC) Mode for fuld konfigurationsvejledning.

Godkendelse

Microsoft ODBC-driveren for Microsoft Fabric Data Engineering 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
CLIENT_CREDENTIAL (0) Serviceansvarlig med klienthemmelighed. Alias: CLIENT_SECRET_CREDENTIAL.
BROWSER_BASED (1) Interaktiv browserbaseret autentificering. Alias: INTERACTIVE.
AZURE_CLI (2) Udvikling med Azure CLI-legitimationsoplysninger.
CLIENT_CERTIFICATE_CREDENTIAL (3) Serviceleder med certifikat. Alias: CLIENT_CERTIFICATE.
AUTH_ACCESS_TOKEN (4) Foruderhvervet bæreradgangstoken. Alias: ACCESS_TOKEN.
FILE_TOKEN (5) Læser en autentificeringstoken fra en fil.

Du kan angive autentificeringsværdier med store bogstaver, Pascal-bogstaver eller numerisk form. Driveren accepterer også korte aliaser som Browser, , , CLI, Certificate, Token, og FileInteractive. Føreren ignorerer understrøg, når den sammenligner værdier.

Azure CLI authentication

Bedst til: Udvikling og interaktive applikationer

# 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)

Forudsætninger:

  • Azure CLI installeret: az --version
  • Indlogget: az login

Interaktiv browserautentificering

Bedst til: Brugerrettede applikationer

# 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)

Adfærd:

  • Åbner et browservindue til brugerautentificering
  • Oplysninger caches til efterfølgende forbindelser

Klientlegitimation (service principal) autentificering

Bedst til: Automatiserede tjenester og baggrundsjobs

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};"
)

Påkrævede parametre

  • TenantId: Azure lejer-ID
  • ClientId: Application (klient) ID fra Microsoft Entra ID
  • ClientSecret: Klienthemmelighed fra Microsoft Entra ID

Bedste fremgangsmåder

  • Lagre hemmeligheder sikkert (Azure Key Vault, miljøvariabler)
  • Brug managed identities, når det er muligt
  • Roterer hemmeligheder regelmæssigt

Certifikatbaseret godkendelse

Bedst til: Virksomhedsapplikationer, der kræver certifikatbaseret autentificering

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>;"
)

Påkrævede parametre:

  • TenantId: Azure lejer-ID
  • ClientId: Applikations-ID (klient)
  • CertificatePath: Sti til PFX/PKCS12 certifikatfil
  • CertificatePassword: Certifikatadgangskode

Adgangstoksgodkendelse

Bedst til: Brugerdefinerede autentificeringsscenarier

# 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};"
)

Filtoken-autentificering

Brug filtoken-autentificering til containeriserede miljøer og automatiserede pipelines, hvor en anden proces skriver en bærertoken til driverens velkendte tokenfil:

connection_string = (
    "DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
    "WorkspaceId=<workspace-id>;"
    "LakehouseId=<lakehouse-id>;"
    "AuthFlow=FILE_TOKEN;"
)

Driveren løser tokenfilens placering på Windows og Linux.

Cross-driver egenskabsaliaser

ODBC-driveren accepterer udvalgte ADONET- og JDBC-ejendomsnavne ud over native ODBC-navne. Denne støtte kan reducere ændringer i forbindelsesstrenge, når du skifter mellem Fabric-drivere.

ADO.NET- eller JDBC-ejendom ODBC-ækvivalent
FabricWorkspaceID WorkspaceId
FabricLakehouseID LakehouseId
LivySessionTimeoutSeconds Timeout for forbindelse
LivyStatementTimeoutSeconds Sætningstimeout
ConnectionPoolEnabled Pool aktiveret

Driveren løser 17 krydsdriveraliaser ved forbindelsestidspunktet.

Konfigurationsparametre

Påkrævede parametre

Disse parametre skal være til stede i hver forbindelsesstreng:

Parameter Type Beskrivelse Eksempel
WorkspaceId UUID Id for stofarbejdsområde 4bbf89a8-...
LakehouseId UUID Fabric lakehouse-identifikator d8faa650-...
AuthFlow Streng Autentificeringsflowtype AZURE_CLI

Valgfrie parametre

Forbindelsesindstillinger

Parameter Type Standard Beskrivelse
Database Streng Ingen Indledende database til klassisk tilstand. HC-tilstand aktiverer det ikke automatisk; kør USE <database> efter tilslutning eller brug fuldt kvalificerede tabelnavne.
Område Streng https://api.fabric.microsoft.com/.default OAuth-scope

Ydelsesindstillinger

Parameter Type Standard Beskrivelse
ReuseSession Boolean true Genanvend eksisterende Spark-session
LargeTableSupport Boolean false Muliggør optimeringer for store resultatsæt
EnableAsyncPrefetch Boolean false Aktiver baggrundsdata-prefetching
PageSizeBytes Heltal 18874368 (18 MB) Sidestørrelse til resultatpaginering (1-18 MB)

Logningsindstillinger

Parameter Type Standard Beskrivelse
LogLevel Streng INFO Log-niveau: DEBUG, INFO, , WARNeller ERROR. Brug DEBUG til detaljeret driverdiagnostik.
Logfil Streng odbc_driver.log Logfilsti (absolut eller relativ)

Proxy-indstillinger

Parameter Type Standard Beskrivelse
UseProxy Boolean false Aktiver proxy
ProxyHost Streng Ingen Proxy-værtsnavn
ProxyPort Heltal Ingen Proxy-port
ProxyBrugernavn Streng Ingen Brugernavn til proxy-autentificering
ProxyPassword Streng Ingen Proxy-autentificeringsadgangskode

Høj-samtidighed (HC) indstillinger

Brug disse parametre til at aktivere og konfigurere high-concurrency (HC) tilstand. HC-tilstand er opt-in. Hvis du ikke sætter LivyMode eller UseHighConcurrency, bruger driveren den klassiske enkelt-session-sti. For vejledning og eksempler, se High-concurrency (HC) mode.

Parameter Type Standard Beskrivelse
LivyMode Streng Ikke angivet Styrer sessionsindsamling. Understøttede værdier er Classic, HighConcurrencyog Auto. Auto Bruger i øjeblikket den klassiske sti.
UseHighConcurrency Boolean false Aktiverer HC-tilstand som et alternativ til at sætte LivyMode=HighConcurrency.
SessionTag Streng Ingen Giver et serverside-pakkehint. Forbindelser skal bruge matchende server-side konfiguration for at dele en varm Livy-session.
IdempotencyKey Streng Ingen Leverer en klientgenereret nøgle til sikre HC-anskaffelsesforsøg. Driveren validerer tegnsættet og logger aldrig værdien.
EnvironmentId Streng Ingen Specificerer Fabric-miljøidentifikatoren, der sendes som spark.fabric.environmentDetails i HC-anskaffelseskonfigurationen.
HeartbeatTimeoutInSecond Heltal Serverstandard Sætter server-side HC-sessionens idle timeout, på få sekunder. Værdien skal være et positivt heltal.
AcquireTimeoutSeconds Heltal 300 Sætter hvor længe føreren venter på, at en HC-session når Idle staten, i sekunder. Værdien skal være et positivt heltal.
conf.<key> Streng Ingen Specificerer en Spark-konfigurationsoverride, der sendes i HC-anskaffelsesanmodningen. F.eks., conf.spark.sql.shuffle.partitions=200.

Mode-prioritet og validering

  • LivyMode Har forrang over UseHighConcurrency , når du sætter begge parametre.
  • Parameterværdier er ikke små og små bogstaver.
  • UseHighConcurrency accepterer true, 1, , yes, eller on for at aktivere HC-tilstand. Den accepterer false, 0, no, eller off at deaktivere HC-tilstand.
  • For andre ikke-tomme værdier SQLDriverConnect returnerer en fejl. DSN-only SQLConnect logger valideringsfejlen og bruger den klassiske sti.

Kompatibilitetsindstillinger

Driveren accepterer TenantPrincipal og PoolMax, inklusive deres miljøvariable fallbacks, for kompatibilitet med tidligere HC-konfigurationer. Driveren parser og validerer disse værdier, men de påvirker ikke HC-sessionsmatchning eller runtime-poolkapacitet. Stol ikke på dem til lejerisolering eller forbindelsesbegrænsninger.

Miljøvariable fallbacks

Driveren bruger kun følgende miljøvariabler, når den tilsvarende DSN- eller forbindelsesstrengparameter ikke er sat:

Miljøvariabel Kort til
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 (kun kompatibilitet)
FABRIC_ODBC_HC_HEARTBEAT_SECONDS HeartbeatTimeoutInSecond
FABRIC_ODBC_HC_ACQUIRE_TIMEOUT AcquireTimeoutSeconds
FABRIC_ODBC_HC_POOL_MAX PoolMax (kun kompatibilitet)

For FABRIC_ODBC_USE_HC, genkender truekun miljø-aktivering , 1, eller yes (kasus-insensitiv). Andre værdier efterlader HC deaktiveret. Og off aliaserne on gælder kun for DSN- og forbindelsesstrengsværdier.

Miljøindstillinger

Du kan tilknytte et Fabric-miljøelement til den Spark-session, som driveren har startet. Det valgte miljøs biblioteker, Spark-egenskaber og variable anvendes automatisk, når sessionen oprettes.

Parameter Type Standard Beskrivelse
EnvironmentId UUID Ingen Fabric environment item identifier (GUID) til anvendelse under oprettelse af Spark-sessioner

Eksempel forbindelsesstreng med et miljøobjekt:

DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;EnvironmentId=<environment-id>

Bemærkning

Miljøet aktiveres, når Spark-sessionen starter. Hvis du også specificerer brugerdefinerede Spark-konfigurationsegenskaber, har sessionsniveau-egenskaber forrang frem for miljøstandarderne.

Brugerdefineret Spark-konfiguration

Du kan sende Spark-konfigurationsegenskaber direkte i forbindelsesstreng. Enhver parameter, der er præfikseret med spark. , anvendes automatisk på Spark-sessionen ved oprettelsen, hvilket gør det muligt at tilsidesætte arbejdsområde- eller runtime-standardindstillinger.

Eksempler på Spark-konfigurationer:

spark.sql.shuffle.partitions=200
spark.sql.adaptive.enabled=true
spark.sql.autoBroadcastJoinThreshold=10485760

Eksempel forbindelsesstreng med brugerdefinerede Spark-egenskaber:

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

Bemærkning

Spark-konfigurationsegenskaber anvendes, når sessionen oprettes. De gælder for alle forespørgsler, der kører inden for den session, og tilsidesætter miljø- eller runtime-standardindstillinger for de samme egenskaber.

Høj-samtidighed (HC) tilstand

High-concurrency (HC) tilstand lader ODBC-forbindelser til samme arbejdsområde og lakehouse tilknytte sig til delte, varme server-side Livy Spark-sessioner i stedet for at provisionere en separat klynge for hver forbindelse. Brug det til arbejdsbelastninger som BI-dashboards, notebook-kerner og ETL-fan-out, der åbner mange kortvarige forbindelser og kan dele serveradministreret Spark-kapacitet.

HC-tilstand er opt-in. Hvis du ikke konfigurerer en HC-indstilling, bruger driveren den klassiske enkelt-session-sti.

Vælg en forbindelsestilstand

Brug HC-tilstand når:

  • Din arbejdsbyrde åbner mange kortlivede ODBC-forbindelser, såsom BI-dashboards, notebook-kerner eller ETL-fan-out.
  • Forbindelser retter sig mod det samme arbejdsområde og lakehouse og kan dele en serverstyret Spark-session.
  • At reducere latenstid ved koldstart pr. forbindelse er vigtigt.

Brug klassisk tilstand, når:

  • Hver forbindelse kræver en isoleret Spark-session på grund af forskellige Spark-konfigurationer eller streng ressourceisolering.
  • Fabric Livy-endpointet for det målrettede arbejdsområde og lakehouse understøtter ikke HC-tilstand.

Aktiver høj-samtidighedstilstand

Tilføj en parameter for høj samtidighed til DSN- eller forbindelsesstreng.

Anbefalet: Set LivyMode

Brug LivyMode til eksplicit at vælge sessionsindsamlingstilstanden:

LivyMode=HighConcurrency

Understøttede værdier er Classic, HighConcurrencyog Auto. Værdier er ikke små og små bogstaver. Auto Vælger i øjeblikket klassisk tilstand.

Alternativ: Set UseHighConcurrency

Brug Boolean-indstillingen for kompatibilitet med eksisterende konfigurationer:

UseHighConcurrency=true

For at aktivere høj-samtidighedstilstand brug true, , , yes, eller on1. For at deaktivere det, brug false, , , no, eller off0. Værdier er ikke små og små bogstaver. SQLDriverConnect afviser andre ikke-tomme værdier med SQLSTATE HY024. DSN-only SQLConnect logger valideringsfejlen og bruger klassisk tilstand.

Bemærkning

Hvis du sætter begge parametre, LivyMode har forrang over UseHighConcurrency.

Påkrævede parametre i HC-tilstand

HC-aktivering kræver følgende gyldige identifikatorer:

Parameter Bemærkninger
WorkspaceId Skal være en gyldig Fabric workspace GUID.
LakehouseId Skal være en gyldig Fabric lakehouse GUID.

Inkludér SessionTag , fordi det påvirker server-side matching for varme sessioner.

Sessionsmatchning

HC-tilstand garanterer ikke, at hver forbindelse genbruger en eksisterende session. For hver session-anskaffelsesanmodning sender driveren:

  • Værdien SessionTag .
  • Den effektive Spark-konfiguration, inklusive conf.* indstillinger og EnvironmentId.

Fabric Livy-tjenesten vurderer disse værdier og beslutter, om forbindelsen skal knyttes til en varm session eller oprettes en ny. For at forbedre genbrug af sessioner skal man bruge konsistente værdier på tværs af forbindelser, der er beregnet til at dele serveradministreret Spark-kapacitet.

Eksempel på forbindelsesstrenge

Minimal HC connection (Azure CLI auth):

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 indstillede timeouts:

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 et miljø og Spark conf overrides:

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"
)

Konfigurer HC-tilstand i en DSN

Du kan gemme HC-indstillinger i en DSN i stedet for at gentage dem i hver forbindelsesstreng. Når en forbindelsesstreng ikke specificerer en værdi, læser driveren disse indstillinger fra DSN:

  • LivyMode
  • UseHighConcurrency
  • EnvironmentId
  • SessionTag
  • IdempotencyKey
  • HeartbeatTimeoutInSecond
  • AcquireTimeoutSeconds

Føreren læser også kun TenantPrincipal kompatibilitet og PoolMax indstillinger. For at gemme disse indstillinger, rediger DSN ind odbcad32.exe eller brug SQLWritePrivateProfileString. Brug parameternavnene i HC-indstillingstabellen.

Vigtigt!

Driveren læser conf.* ikke Spark-konfigurationsoverstyringer fra DSN. Tilføj dem til forbindelsesstreng ved kørsel eller injicere dem før kald SQLDriverConnect.

Deaktiver HC-tilstand

Du kan deaktivere nye HC-sessioner uden at genudrulle driveren. Brug den metode, der svarer til, hvordan du aktiverede HC-tilstand:

HC-konfigurationskilde Sådan deaktiverer man HC-tilstand
Kun miljøvariabel Sæt FABRIC_ODBC_USE_HC=false, eller fjern variablen.
DSN Sæt LivyMode=Classic. Alternativt kan du fjerne LivyMode og sætte UseHighConcurrency=false.
Forbindelsesstreng Sæt LivyMode=Classic, eller fjern HC-parametrene.

Forbindelsesstreng- og DSN-indstillinger har forrang frem for miljøvariabel-fallback. Disse ændringer påvirker kun nye forbindelser. Eksisterende HC-sessioner fortsætter, indtil de bliver udgivet.

Forstå HC-runtime-adfærd

  • Validering:SQLDriverConnect afviser ugyldige HC booleske og positive heltalsværdier med SQLSTATE HY024. Den afviser en ugyldig LivyMode og ugyldig eller overdimensioneret WorkspaceId, LakehouseId, og IdempotencyKey værdier med SQLSTATE HY000. En overdimensioneret kompatibilitetsværdi TenantPrincipal returnerer HY000også . For kun SQLConnectDSN logger driveren almindelige HC-valideringsfejl og bruger klassisk tilstand. Overdimensionerede sikkerhedsfølsomme værdier fejler stadig forbindelsen.
  • Følsomme data: Driveren udelukker eller fjerner IdempotencyKey andre følsomme felter fra HC-logs og diagnostiske output.
  • Annullering: Annullering af kontoudtog er samarbejdsvillig. Serverarbejde, der allerede er i gang, afsluttes rent i stedet for straks at blive afsluttet.
  • Afbrydere: HC- og klassiske tilstande bruger separate afbrydere. At udtømme den ene tilstand påvirker ikke den anden.
  • Startdatabase: HC-forbindelser udfører ikke den indledende USE sætning for parameteren Database . Kør USE <database> efter tilslutning eller brug fuldt kvalificerede tabelnavne.
  • Diagnostik: Indstil LogLevel=DEBUG til at logge beslutninger om HC-indsamling, polling, frigivelse og fejlkortlægning. For fokuseret fejlfinding skal du indsætte LIVY_HC_VERBOSE=1 til at inkludere yderligere rensede HC HTTP-diagnostik.

Konfigurér et DSN

Opret et system-DSN

  1. Åben ODBC-administrator

    %SystemRoot%\System32\odbcad32.exe
    
  2. Opret nyt system-DSN

    • Gå til fanen "System DSN"
    • Vælg "Tilføje"
    • Vælg "Microsoft ODBC Driver for Microsoft Fabric Data Engineering"
    • Vælg "Færdig"
  3. Konfigurer DSN-indstillinger

    • Datakildenavn: Indtast et unikt navn (f.eks. FabricODBC)
    • Beskrivelse: Valgfri beskrivelse
    • Workspace ID: Din Fabric workspace GUID
    • Lakehouse ID: Din Fabric lakehouse GUID
    • Autentificering: Vælg autentificeringsmetode
    • Environment ID (valgfrit): Indtast GUID'en for det Fabric miljøelement, der skal tilknyttes under sessionoprettelsen
    • Livy-tilstand (valgfrit): Sat til HighConcurrency for at aktivere HC-tilstand
    • Sessionstag (valgfrit): Indtast en ikke-følsom operationel etiket for HC-sessionsmatching
    • Konfigurer yderligere indstillinger efter behov
  4. Testforbindelse

    • Vælg "Test forbindelse" for at verificere indstillinger
    • Vælg "OK" for at gemme

Brug DSN i applikationer

# Python - Connect using DSN
conn = pyodbc.connect("DSN=FabricODBC")
// .NET - Connect using DSN
using var connection = new OdbcConnection("DSN=FabricODBC");
await connection.OpenAsync();

Eksempler på anvendelse

Grundlæggende forbindelse og forespørgsel

Pyton

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));
            }
        }
    }
}

Arbejde med store resultatmængder

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()

Udfør DML-sætninger

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;
}

Brug executeDml med INSERT, UPDATE, eller DELETE sætninger. Det rapporterede rækkeantal afhænger af, om resultatet indeholder et opdateringstal, som driveren genkender.

Skemaopdagelse

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()

Datatypetilknytning

Driveren mapper Spark SQL-datatyper til ODBC SQL-typer:

Spark SQL Type ODBC SQL Type C/C++ Type Python-type .NET-type
BOOLESK SQL_BIT SQLCHAR bool bool
BYTE SQL_TINYINT SQLSCHAR int sbyte
SHORT SQL_SMALLINT SQLSMALLINT int kort
INT SQL_INTEGER SQLINTEGER int int
LANG SQL_BIGINT SQLBIGINT int long
FLYDE SQL_REAL SQLREAL flyde flyde
DOBBELT SQL_DOUBLE SQLDOUBLE flyde dobbelt
DECIMAL SQL_DECIMAL SQLCHAR* decimal. Decimal decimal
STRENG SQL_VARCHAR SQLCHAR* Str streng
VARCHAR(n) SQL_VARCHAR SQLCHAR* Str streng
CHAR(n) SQL_CHAR SQLCHAR* Str streng
BINÆR SQL_VARBINARY SQLCHAR* Bytes byte[]
DATO SQL_TYPE_DATE SQL_DATE_STRUCT datetime.date Datetime
TIDSSTEMPEL SQL_TYPE_TIMESTAMP SQL_TIMESTAMP_STRUCT datetime.datetime Datetime
ARRAY SQL_VARCHAR SQLCHAR* str (JSON) streng
KORT SQL_VARCHAR SQLCHAR* str (JSON) streng
STRUCT SQL_VARCHAR SQLCHAR* str (JSON) streng

Integration af BI-værktøj

Microsoft Excel

  1. Åbn Excel -> Data -> Hent data -> Fra andre kilder -> Fra ODBC
  2. Vælg dit konfigurerede DSN (f.eks. FabricODBC)
  3. Autentificer, hvis det bliver bedt om det
  4. Gennemse og vælg tabeller
  5. Indlæs data i Excel-arket

Power BI Desktop

  1. Åbn Power BI Desktop -> Hent data -> ODBC
  2. Vælg dit konfigurerede DSN
  3. Gennemse datakataloget og vælg tabeller
  4. Transformér data efter behov
  5. Opret visualiseringer

SQL Server Management Studio (Linked 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;

Fejlfinding

Dette afsnit giver vejledning til at løse almindelige problemer, du kan støde på, når du bruger Microsoft ODBC-driveren til Microsoft Fabric Data Engineering.

Almindelige problemer

Følgende afsnit beskriver almindelige problemer og deres løsninger:

Forbindelsesfejl

Problem: Kan ikke forbinde til Fabric

Løsninger:

  1. Bekræfte workspace ID og lakehouse id er korrekte GUID'er
  2. Tjek Azure CLI autentificering: az account show
  3. Sørg for, at du har passende Fabric-arbejdsområdetilladelser
  4. Tjek netværksforbindelse og proxyindstillinger

Godkendelsesfejl

Problem: Autentificering fejler med Azure CLI

Løsninger:

  • Kør az login for 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:

  • Aktivér LargeTableSupport=true
  • Juster PageSizeBytes for optimal chunk-størrelse
  • Aktivér asynkron prefetch: EnableAsyncPrefetch=1
  • Brug LIMIT klausulen til at begrænse resultatstørrelsen

Aktiver logning

Når du fejlsøger problemer, kan det hjælpe dig at aktivere detaljeret logning med at identificere den grundlæggende årsag til problemerne. Du kan aktivere logging via forbindelsesstrengen.

For at muliggøre detaljeret logning:

LogLevel=DEBUG;LogFile=C:\temp\odbc_driver_debug.log;

Log-niveauer:

  • DEBUG: Detaljeret fejlfinding og det mest udførlige driverlog-niveau
  • INFO: Generel information (standard)
  • WARN: Kun advarsler
  • ERROR: Kun fejl

ODBC-sporing

For lavniveau-diagnostik kan du aktivere Windows ODBC-sporing for at fange detaljerede ODBC API-kald og driveradfærd. Husk at slå sporing fra, når det ikke er nødvendigt, for at opretholde optimal ydeevne.

For at aktivere ODBC-sporing:

  1. Åbn odbcad32.exe
  2. Gå til fanen "Tracing"
  3. Sæt sporfilsti (f.eks. C:\temp\odbctrace.log)
  4. Vælg "Start sporing nu"
  5. Gengiv nummeret
  6. Vælg "Stop Tracing Now"