Microsoft ODBC-Treiber für Microsoft Fabric Data Engineering unter Linux

ODBC (Open Database Connectivity) ist ein weit verbreiteter Standard, mit dem Clientanwendungen eine Verbindung mit Daten aus Datenbanken und Big Data-Plattformen herstellen und damit arbeiten können.

Der Microsoft ODBC Driver for Fabric Data Engineering ermöglicht es Ihnen, Spark-Workloads in Fabric mit der Zuverlässigkeit und Einfachheit des ODBC-Standards zu verbinden, abzufragen und zu verwalten. Der Treiber basiert auf den Livy-APIs von Fabric und bietet sichere und flexible Spark-SQL-Konnektivität zu Ihren C/C++-, .NET-, Python- und anderen ODBC-kompatiblen Anwendungen unter Linux.

Wichtigste Funktionen

  • ODBC 3.x-konform: Vollständige Implementierung der ODBC 3.x-Spezifikation.
  • Microsoft Entra ID-Authentifizierung: Mehrere Authentifizierungsflüsse, einschließlich Azure CLI, Client-Zugangsdaten, zertifikatsbasierter und Zugriffstoken-Authentifizierung.
  • Spark SQL-Abfrageunterstützung: Direkte Ausführung von Spark SQL-Anweisungen.
  • Umfassende Unterstützung für Datentypen: Unterstützung für alle Spark SQL-Datentypen, einschließlich komplexer Typen (ARRAY, MAP, und STRUCT).
  • Wiederverwendung von Sitzungen: Integriertes Sitzungsmanagement für bessere Leistung.
  • Modus für hohe Parallelität: Aktivieren Sie gemeinsame, vorgewärmte serverseitige Livy-Sitzungen, um die Latenz beim Verbindungsaufbau und die unnötige Vermehrung von Spark-Clustern zu reduzieren.
  • Unterstützung für große Tabellen: Optimierte Behandlung für große Ergebnissätze mit konfigurierbaren Seitengrößen.
  • Async prefetch: Laden von Daten im Hintergrund zur Verbesserung der Leistung.
  • Proxy-Unterstützung: HTTP-Proxy-Konfiguration für Unternehmensumgebungen.
  • Unterstützung für Lakehouses mit mehreren Schemas: Stellen Sie eine Verbindung mit einem bestimmten Schema innerhalb eines Lakehouses her.

Hinweis

In Open-Source Apache Spark werden Datenbank und Schema synonym verwendet. Zum Beispiel liefert die Ausführung von SHOW SCHEMAS oder SHOW DATABASES in einem Fabric-Notebook dasselbe Ergebnis: eine Liste aller Schemata im Lakehouse.

Voraussetzungen

Bevor Sie den Microsoft ODBC Driver für Microsoft Fabric Data Engineering unter Linux verwenden, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:

  • Betriebssystem: Ubuntu 22.04 oder neuer, Debian 11 oder neuer, oder Red Hat Enterprise Linux (RHEL) 8 oder später auf x86-64.
  • unixODBC: Der ODBC-Treibermanager für Linux. Installieren Sie die Pakete unixodbc und unixodbc-dev.
  • libcurl: Die HTTP-Laufzeitabhängigkeit, wie zum Beispiel libcurl4 oder das entsprechende Paket für Ihre Distribution.
  • OpenSSL: Die Laufzeitabhängigkeit für TLS und Kryptografie, wie openssl und libssl3 oder entsprechende Pakete.
  • Fabric Access: Zugang zu einem Fabric-Arbeitsbereich.
  • Microsoft Entra ID-Zugangsdaten: Geeignete Zugangsdaten für die Authentifizierung.
  • Arbeitsplatz- und Seehaus-IDs: Die GUID-Kennungen für Ihren Fabric-Arbeitsplatz und Ihr Seehaus.
  • Azure CLI (optional): Erforderlich, wenn Sie Azure CLI-Authentifizierung verwenden.

Herunterladen und installieren auf Linux

Den Treiber installieren:

  1. Extrahieren Sie ms-sparksql-odbc-linux-2.0.0.tar.

  2. Öffnen Sie ein Terminal im extrahierten Verzeichnis.

  3. Installieren Sie das Debian-Paket:

    sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.deb
    

Das Paket installiert die folgenden Dateien:

Datei Installationsort
Fahrerbibliothek /usr/lib/libmicrosoftfabricodbc.so
Vorlage für Fahrerregistrierung /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template
DSN-Konfigurationsvorlage /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template
License /usr/share/doc/microsoft-fabric-odbc-driver/LICENSE
Nutzungsleitfaden /usr/share/doc/microsoft-fabric-odbc-driver/USAGE_Linux.md

Installieren Sie ein RPM-Paket

Auf RHEL, Fedora oder CentOS installieren Sie das RPM-Paket aus dem extrahierten Treiberarchiv:

sudo dnf install ./microsoft-fabric-odbc-driver-*.x86_64.rpm

Alternativ verwenden Sie rpm:

sudo rpm -i microsoft-fabric-odbc-driver-*.x86_64.rpm

Überprüfen Sie, ob das RPM den Treiber registriert hat:

odbcinst -q -d | grep "Microsoft"

Um das RPM-Paket zu deinstallieren, führen Sie aus:

sudo dnf remove microsoft-fabric-odbc-driver

Einen Tarball installieren

Für Distributionen ohne Debian- oder RPM-Paketunterstützung oder für einen benutzerdefinierten Installationsstandort entpacken Sie das .tar.gz Paket und führen das Installationsskript aus:

tar -xzf microsoft-fabric-odbc-driver-2.0.0-linux-x86_64.tar.gz
cd microsoft-fabric-odbc-driver-2.0.0

# Install to /opt/microsoft/fabricodbc.
sudo ./install.sh

# Or install to a custom writable location.
./install.sh --prefix=$HOME/fabricodbc

Das Installationsskript unterstützt folgende Optionen:

Auswahl Description
--prefix=<path> Installieren Sie in ein benutzerdefiniertes Verzeichnis. Der Standardwert lautet /opt/microsoft/fabricodbc.
--no-register Überspringe die unixODBC-Fahrerregistrierung.
--dry-run Zeige die geplanten Änderungen, ohne Dateien zu installieren.
--uninstall Entferne die installierten Dateien und deregistriere den Treiber.
--help Kommandohilfe anzeigen.

Um die Standardinstallation per Tarball zu überprüfen, führen Sie Folgendes aus:

odbcinst -q -d
ls -la /opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.so

Um es zu deinstallieren, führen Sie sudo ./install.sh --uninstall im Verzeichnis des extrahierten Pakets aus.

Treiber manuell registrieren

Das Paket registriert den Treiber automatisch bei unixODBC. Um den Treiber manuell zu registrieren, führen Sie aus:

sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template

Überprüfen der Installation

Überprüfen Sie, ob der Treiber registriert ist und die Bibliothek installiert ist:

odbcinst -q -d
ls -la /usr/lib/libmicrosoftfabricodbc.so

Der Befehl odbcinst sollte [Microsoft ODBC Driver for Microsoft Fabric Data Engineering] auflisten.

Deinstalliere den Treiber

Um den Treiber zu deinstallieren, führen Sie folgenden Befehl aus:

sudo dpkg -r microsoft-fabric-odbc-driver

Dieser Befehl entfernt die Treiberdateien und deregistriert den Treiber aus unixODBC.

Schnellstartbeispiel

Die folgenden Beispiele verbinden sich mit Fabric und führen eine Spark-SQL-Abfrage aus. Erfülle die Voraussetzungen und installiere den Treiber, bevor du ein Beispiel ausführst.

Python-Beispiel

import pyodbc

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

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

C/C++ Beispiel

#include <sql.h>
#include <sqlext.h>
#include <iostream>

int main() {
    SQLHENV henv = SQL_NULL_HENV;
    SQLHDBC hdbc = SQL_NULL_HDBC;
    SQLHSTMT hstmt = SQL_NULL_HSTMT;

    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
    SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);
    SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);

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

    SQLRETURN result = SQLDriverConnect(
        hdbc,
        NULL,
        (SQLCHAR*)connectionString,
        SQL_NTS,
        NULL,
        0,
        NULL,
        SQL_DRIVER_NOPROMPT);

    if (SQL_SUCCEEDED(result)) {
        std::cout << "Connected successfully!" << std::endl;

        SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
        result = SQLExecDirect(
            hstmt,
            (SQLCHAR*)"SELECT 'Hello from Fabric!' AS message",
            SQL_NTS);

        if (SQL_SUCCEEDED(result)) {
            char message[256];
            SQLLEN indicator;

            while (SQLFetch(hstmt) == SQL_SUCCESS) {
                SQLGetData(
                    hstmt,
                    1,
                    SQL_C_CHAR,
                    message,
                    sizeof(message),
                    &indicator);
                std::cout << message << std::endl;
            }
        }

        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
        SQLDisconnect(hdbc);
    }

    SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
    SQLFreeHandle(SQL_HANDLE_ENV, henv);
    return 0;
}

Baue und führe das Beispiel aus:

g++ -o fabric_test fabric_test.cpp -lodbc -std=c++17
./fabric_test

.NET-Beispiel

using System.Data.Odbc;

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 der Verbindungszeichenfolge

Grundlegende Verbindungszeichenfolge

Verwenden Sie das folgende Verbindungszeichenfolge-Format:

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

Komponenten der Verbindungszeichenfolge

Component Description Beispiel
DRIVER ODBC-Treiberbezeichner {Microsoft ODBC Driver for Microsoft Fabric Data Engineering}
WorkspaceId Fabric-Arbeitsbereichskennung (GUID) 4bbf89a8-66bb-443f-91af-df31e6a7560b
LakehouseId Fabric Lakehouse-Kennung (GUID) d8faa650-1343-496b-b9cc-d4168a676f90
AuthFlow Authentifizierungsmethode AZURE_CLI, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE oder ACCESS_TOKEN

Exemplarische Verbindungszeichenfolgen

Grundverbindung

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

Verbindung mit Leistungsoptionen

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

Verbindung zum Holzeinschlag

DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LogLevel=DEBUG;LogFile=/tmp/odbc_driver.log

Verbindung mit Hochkonkurrenzmodus

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

Eine vollständige Anleitung zur Konfiguration finden Sie unter Modus für hohe Parallelität (HC).

Authentication

Der Microsoft ODBC Driver for Microsoft Fabric Data Engineering unterstützt mehrere Authentifizierungsmethoden über Microsoft Entra ID. Konfigurieren Sie die Authentifizierung durch Verwendung des Parameters AuthFlow im Verbindungszeichenfolge oder DSN.

Authentifizierungsmethoden

AuthFlow Wert Description
AZURE_CLI Entwicklung mit Azure CLI-Anmeldeinformationen
CLIENT_CREDENTIAL Service Principal mit einem Kundengeheimnis
CLIENT_CERTIFICATE Dienstleiter mit Zertifikat
ACCESS_TOKEN Vorab erworbenes Bearerzugriffstoken
FILE_TOKEN Liest ein Authentifizierungstoken aus einer Datei

Hinweis

Interaktive Browser-Authentifizierung ist auf headless-Linux-Servern nicht verfügbar. Verwenden Sie stattdessen Azure CLI, Client-Anmeldedaten, zertifikatsbasierte oder Zugriffstoken-Authentifizierung.

Azure CLI-Authentifizierung

Verwenden Sie Azure CLI-Authentifizierung für Entwicklungs- und interaktive Anwendungen.

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)

Bevor Sie sich verbinden, überprüfen Sie, ob die Azure CLI installiert ist, und melden Sie sich an:

az --version
az login

Um Azure CLI auf Debian oder Ubuntu zu installieren, verwenden Sie den Paketmanager:

sudo apt-get update
sudo apt-get install -y azure-cli

Authentifizierung der Client-Zugangsdaten

Verwenden Sie die Authentifizierung der Client-Zugangsdaten für automatisierte Dienste und Hintergrundjobs.

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

Geben Sie die folgenden Parameter an:

  • TenantId: Die Microsoft Entra-Tenant-ID.
  • ClientId: Die Client-ID der Anwendung.
  • ClientSecret: Das Client-Geheimnis.

Speichere Geheimnisse in einem sicheren Geheimspeicher oder in Umgebungsvariablen. Speichere keine Geheimnisse in Klartext-Verbindungsstrings oder INI-Dateien.

Zertifikatbasierte Authentifizierung

Verwenden Sie zertifikatsbasierte Authentifizierung für Unternehmensanwendungen, die Zertifikatsdaten benötigen.

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=/path/to/cert.pfx;"
    "CertificatePassword=<password>;"
)

Geben Sie die folgenden Parameter an:

  • TenantId: Die Microsoft Entra-Tenant-ID.
  • ClientId: Die Client-ID der Anwendung.
  • CertificatePath: Der Pfad zur PFX- oder PKCS12-Zertifikatsdatei.
  • CertificatePassword: Das Zertifikatspasswort.

Zugriffstokenauthentifizierung

Verwenden Sie die Zugriffstoken-Authentifizierung, wenn Ihre Anwendung ein Token über einen anderen Mechanismus erhält.

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

Dateitoken-Authentifizierung

Verwenden Sie Dateitoken-Authentifizierung in containerisierten Umgebungen und automatisierten Pipelines, bei denen ein anderer Prozess ein Trägertoken in die bekannte Token-Datei des Treibers schreibt:

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

Unterstützte treiberübergreifende Eigenschaftsaliase finden Sie unter Treiberübergreifende Eigenschaftsaliase.

Konfigurationsparameter

Erforderliche Parameter

Fügen Sie diese Parameter in jede Verbindungszeichenfolge ein:

Parameter Typ Description Beispiel
WorkspaceId UUID Fabric-Arbeitsbereichsbezeichner 4bbf89a8-...
LakehouseId UUID Fabric Lakehouse-Kennkennung d8faa650-...
AuthFlow Zeichenfolge Authentifizierungsflusstyp AZURE_CLI

Optionale Parameter

Verbindungseinstellungen

Parameter Typ Standard Description
Database Zeichenfolge Keine Erste Datenbank für den klassischen Modus. Im HC-Modus wird es nicht automatisch angewendet; starte USE <database> nach der Verbindung oder benutze vollständig qualifizierte Tabellennamen.
Scope Zeichenfolge https://api.fabric.microsoft.com/.default OAuth-Bereich

Leistungseinstellungen

Parameter Typ Standard Description
ReuseSession Boolean true Wiederverwenden Sie eine bestehende Spark-Sitzung
LargeTableSupport Boolean false Aktivieren von Optimierungen für große Ergebnismengen
EnableAsyncPrefetch Boolean false Aktivieren des Vorabrufens von Hintergrunddaten
PageSizeBytes Integer 18874368 (18 MB) Seitengröße für Ergebnis-Paginierung von 1 bis 18 MB

Einstellungen für die Protokollierung

Parameter Typ Standard Description
LogLevel Zeichenfolge INFO Log-Level: DEBUG, INFO, WARN oder ERROR. Verwenden Sie DEBUG für detaillierte Treiberdiagnosen.
LogFile Zeichenfolge odbc_driver.log Absoluter oder relativer Logdateipfad

Proxyeinstellungen

Parameter Typ Standard Description
UseProxy Boolean false Aktiviere einen Proxy
ProxyHost Zeichenfolge Keine Proxy-Hostname
ProxyPort Integer Keine Proxyport
ProxyUsername Zeichenfolge Keine Benutzername der Proxy-Authentifizierung
ProxyPassword Zeichenfolge Keine Proxyauthentifizierungskennwort

Einstellungen für hohe Parallelität (HC)

Verwenden Sie diese Parameter, um den High-Concurrency (HC)-Modus zu aktivieren und zu konfigurieren. Der HC-Modus ist opt-in. Wenn Sie LivyMode oder UseHighConcurrency nicht festlegen, verwendet der Treiber den klassischen Pfad für eine einzelne Sitzung. Für Hinweise und Beispiele siehe High-Concurrency (HC)-Modus.

Parameter Typ Standard Description
LivyMode Zeichenfolge Nicht festgelegt Steuert die Sitzungserfassung. Unterstützte Werte sind Classic, HighConcurrencyund Auto. Auto Verwendet derzeit den klassischen Pfad.
UseHighConcurrency Boolean false Aktiviert den HC-Modus als Alternative zur Einstellung LivyMode=HighConcurrency.
SessionTag Zeichenfolge Keine Gibt einen serverseitigen Packhinweis an. Verbindungen müssen eine entsprechende serverseitige Konfiguration verwenden, um eine warme Livy-Sitzung zu teilen.
IdempotencyKey Zeichenfolge Keine Stellt einen vom Client generierten Schlüssel für sichere erneute HC-Abrufversuche bereit. Der Treiber validiert den Zeichensatz und protokolliert den Wert nie.
EnvironmentId Zeichenfolge Keine Spezifiziert die Fabric-Umgebungskennung, die als spark.fabric.environmentDetails in der HC-Erfassungskonfiguration gesendet wird.
HeartbeatTimeoutInSecond Integer Serverstandard Legt das serverseitige Leerlauf-Timeout der HC-Sitzung in Sekunden fest. Der Wert muss eine positive ganze Zahl sein.
AcquireTimeoutSeconds Integer 300 Legt fest, wie lange der Treiber in Sekunden wartet, bis eine HC-Sitzung den Zustand Idle erreicht. Der Wert muss eine positive ganze Zahl sein.
conf.<key> Zeichenfolge Keine Spezifiziert eine Spark-Konfigurationsüberschreibung, die in der HC-Erwerbsanfrage gesendet wird. Beispiel: conf.spark.sql.shuffle.partitions=200

Priorität und Validierung von Modi

  • LivyMode hat Vorrang vor UseHighConcurrency, wenn Sie beide Parameter festlegen.
  • Parameterwerte sind nicht groß- und grossschreibungssensitiv.
  • UseHighConcurrency akzeptiert true, yes, on oder 1, um den HC-Modus zu aktivieren. Es akzeptiert false, 0, no oder off, um den HC-Modus zu deaktivieren.
  • Für andere nichtleere Werte liefert ein SQLDriverConnect Fehler zurück. DSN-only protokolliert den Validierungsfehler SQLConnect und verwendet den klassischen Pfad.

Kompatibilitätseinstellungen

Der Treiber akzeptiert TenantPrincipal und PoolMax, einschließlich ihrer umgebungsvariablen Fallbacks, um mit früheren HC-Konfigurationen kompatibel zu sein. Der Treiber parselt und validiert diese Werte, aber sie beeinflussen nicht das HC-Session-Matching oder die Laufzeit-Poolkapazität. Verlassen Sie sich nicht auf sie für Mieterisolation oder Verbindungsgrenzen.

Rückfälle für Umweltvariablen

Der Treiber verwendet die folgenden Umweltvariablen nur, wenn der entsprechende DSN- oder Verbindungsstring-Parameter nicht gesetzt ist:

Umgebungsvariable Zuordnung zu
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 (nur Kompatibilität)
FABRIC_ODBC_HC_HEARTBEAT_SECONDS HeartbeatTimeoutInSecond
FABRIC_ODBC_HC_ACQUIRE_TIMEOUT AcquireTimeoutSeconds
FABRIC_ODBC_HC_POOL_MAX PoolMax (nur Kompatibilität)

Für FABRIC_ODBC_USE_HC erkennt die ausschließlich umgebungsbasierte Aktivierung true, 1 oder yes (ohne Beachtung der Groß-/Kleinschreibung). Andere Werte deaktivieren den HC-Modus. Die Aliase off und on gelten nur für DSN- und Verbindungszeichenfolgenwerte.

Hoch-Nebenläufigkeit (HC) Modus

Der Modus für hohe Parallelität (HC) ermöglicht es ODBC-Verbindungen mit demselben Arbeitsbereich und demselben Lakehouse, eine Verbindung mit gemeinsam genutzten, bereits aufgewärmten serverseitigen Livy Spark-Sitzungen herzustellen, statt für jede Verbindung einen separaten Cluster bereitzustellen. Nutze es für Arbeitslasten wie BI-Dashboards, Notebook-Kernel und ETL-Fan-outs, die viele kurzlebige Verbindungen öffnen und serververwaltete Spark-Kapazitäten teilen können.

Der HC-Modus ist opt-in. Wenn du keine HC-Einstellung konfigurierst, verwendet der Treiber den klassischen Einzelsitzungspfad.

Auswählen eines Verbindungsmodus

Benutze den HC-Modus wenn:

  • Ihre Arbeitslast öffnet viele kurzlebige ODBC-Verbindungen, wie BI-Dashboards, Notebook-Kernel oder ETL-Fan-Out.
  • Verbindungen zielen auf denselben Arbeitsbereich und dasselbe Lakehouse ab und können eine serververwaltete Spark-Sitzung teilen.
  • Die Reduzierung der Kaltstart-Latenz pro Verbindung ist wichtig.

Nutze den klassischen Modus, wenn:

  • Jede Verbindung erfordert eine isolierte Spark-Sitzung aufgrund unterschiedlicher Spark-Konfigurationen oder strikter Ressourcenisolation.
  • Der Fabric Livy-Endpunkt für den Zielarbeitsbereich und das Lakehouse unterstützt den HC-Modus nicht.

Aktivieren Sie den Modus für hohe Parallelität

Fügen Sie der DSN oder der Verbindungszeichenfolge einen Parameter für den Modus mit hoher Parallelität hinzu.

Empfohlen: Festlegen LivyMode

Verwenden Sie LivyMode, um den Sitzungserfassungsmodus explizit auszuwählen:

LivyMode=HighConcurrency

Unterstützte Werte sind Classic, HighConcurrencyund Auto. Werte sind nicht groß-/kleinsensitiv. Auto Derzeit wählt er den Classic-Modus.

Alternative: Satz UseHighConcurrency

Verwenden Sie die boolesche Einstellung zur Kompatibilität mit bestehenden Konfigurationen:

UseHighConcurrency=true

Zum Aktivieren des Modus für hohe Parallelität verwenden Sie true, 1, yes oder on. Um es zu deaktivieren, verwenden Sie false, 0, no oder off. Werte sind nicht groß-/kleinsensitiv. SQLDriverConnect verweigert andere nichtleere Werte mit SQLSTATE HY024. DSN-only protokolliert den Validierungsfehler SQLConnect und verwendet den klassischen Modus.

Hinweis

Wenn du beide Parameter setzt, LivyMode hat Vorrang vor UseHighConcurrency.

Du kannst auch den High-Concurrency-Modus für die aktuelle Shell aktivieren, indem du die Umgebungsvariablen verwendest:

export FABRIC_ODBC_USE_HC=true
export FABRIC_ODBC_WORKSPACE_ID=<workspace-id>
export FABRIC_ODBC_LAKEHOUSE_ID=<lakehouse-id>
export FABRIC_ODBC_SESSION_TAG=bi-dashboard

Erforderliche Parameter im HC-Modus

Die HC-Aktivierung erfordert folgende gültige Kennungen:

Parameter Hinweise
WorkspaceId Muss eine gültige GUID eines Fabric-Workspaces sein.
LakehouseId Muss ein gültiger Fabric Lakehouse GUID sein.

Beziehen Sie SessionTag ein, weil es die serverseitige Zuordnung für Warm-Sessions beeinflusst.

Sitzungsabgleich

Der HC-Modus garantiert nicht, dass jede Verbindung eine bestehende Sitzung wiederverwendet. Für jede Anfrage zur Sitzungserfassung sendet der Treiber:

  • Der SessionTag-Wert.
  • Die effektive Spark-Konfiguration, einschließlich conf.* Einstellungen und EnvironmentId.

Der Fabric Livy Service bewertet diese Werte und entscheidet, ob die Verbindung mit einer warmen Sitzung verbunden oder eine neue Sitzung erstellt wird. Um die Wiederverwendung der Sitzungen zu verbessern, verwenden Sie konsistente Werte über Verbindungen hinweg, die für die gemeinsame Server-verwaltete Spark-Kapazität gedacht sind.

Exemplarische Verbindungszeichenfolgen

Minimale HC-Verbindung mit Azure CLI-Authentifizierung:

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

HC-Verbindung mit abgestimmten Auszeiten:

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-Verbindung mit einer Umgebung und Spark-Konfigurationsüberschreibungen:

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

Konfigurieren Sie den HC-Modus in einem Linux-DSN

Anstatt die HC-Einstellungen in jeder Verbindungszeichenfolge zu wiederholen, speichern Sie sie in ~/.odbc.ini für ein benutzerspezifisches DSN oder in /etc/odbc.ini für ein systemweites DSN.

[FabricHCDSN]
Description               = Microsoft Fabric Data Engineering with HC mode
Driver                    = Microsoft ODBC Driver for Microsoft Fabric Data Engineering
WorkspaceId               = <workspace-id>
LakehouseId               = <lakehouse-id>
AuthFlow                  = AZURE_CLI
LivyMode                  = HighConcurrency
SessionTag                = bi-dashboard
AcquireTimeoutSeconds     = 300
HeartbeatTimeoutInSecond  = 600

Nachdem du die DSN gespeichert hast, verifiziere sie und teste die Verbindung.

odbcinst -q -s
isql -k -v "DSN=FabricHCDSN;"

Wenn ein Verbindungszeichenfolge keinen Wert angibt, liest der Treiber folgende Einstellungen aus dem DSN:

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

Der Treiber liest außerdem die nur für die Kompatibilität vorgesehenen Einstellungen TenantPrincipal und PoolMax. Verwenden Sie die Parameternamen in der HC-Einstellungstabelle.

Important

Der Treiber liest keine conf.* Spark-Konfigurationsüberschreibungen aus der DSN. Fügen Sie sie zur Laufzeit der Verbindungszeichenfolge hinzu oder fügen Sie sie ein, bevor Sie SQLDriverConnect aufrufen.

HC-Modus deaktivieren

Du kannst neue HC-Session-Erwerbungen deaktivieren, ohne den Treiber neu zu deployen. Verwenden Sie die Methode, die mit der Aktivierung des HC-Modus übereinstimmt:

HC-Konfigurationsquelle Wie man den HC-Modus deaktiviert
Nur Umgebungsvariable Setze FABRIC_ODBC_USE_HC=false, oder entferne die Variable.
DSN Legen Sie LivyMode=Classic fest. Alternativ LivyMode entfernen und UseHighConcurrency=false festlegen.
Verbindungszeichenfolge Setze LivyMode=Classic, oder entferne die HC-Parameter.

Einstellungen für Verbindungszeichenfolgen und DSNs haben Vorrang vor dem Fallback auf Umgebungsvariablen. Diese Änderungen betreffen nur neue Verbindungen. Bestehende HC-Sessions laufen weiter, bis sie veröffentlicht werden.

Verstehen Sie das Laufzeitverhalten von HC

  • Validierung:SQLDriverConnect lehnt ungültige HC-Boolesche und positiv-ganzzahlige Werte mit SQLSTATE HY024ab. Es lehnt eine ungültige LivyMode sowie ungültige oder zu große WorkspaceId-, LakehouseId- und IdempotencyKey-Werte mit dem SQLSTATE HY000 ab. Ein zu großer Kompatibilitätswert TenantPrincipal gibt ebenfalls HY000 zurück. Für nur SQLConnectDSN protokolliert der Treiber gewöhnliche HC-Validierungsfehler und verwendet den klassischen Modus. Zu große sicherheitssensible Werte führen weiterhin zum Fehlschlagen der Verbindung.
  • Sensible Daten: Der Treiber schließt andere sensible Felder aus HC-Logs und Diagnoseausgaben aus oder löscht IdempotencyKey sie aus.
  • Stornierung: Die Kündigung des Kontoauszugs erfolgt kooperativ. Die bereits laufende Serverarbeit endet sauber, anstatt sofort beendet zu werden.
  • Leistungsschalter: HC- und klassische Modi verwenden separate Leistungsschalter. Das Ausschöpfen eines Modus wirkt sich nicht auf den anderen aus.
  • Anfangsdatenbank: HC-Verbindungen führen die Anfangsanweisung USE für den Parameter Database nicht aus. Führe USE <database> nach der Verbindung aus oder benutze vollständig qualifizierte Tabellennamen.
  • Diagnose: Legen Sie LogLevel=DEBUG fest, um die Erfassung von HC, Abfragen, Freigaben und Entscheidungen zur Fehlerzuordnung zu protokollieren. Zur gezielten Fehlerbehebung legen Sie LIVY_HC_VERBOSE=1 so fest, dass zusätzliche bereinigte HC-HTTP-Diagnosedaten einbezogen werden.

DSN-Konfiguration

Unter Linux konfigurieren Sie Datenquellennamen (DSNs) in INI-Dateien statt in der Windows-Registry.

Datei Geltungsbereich Zugriff
/etc/odbc.ini Systemweite DSNs Erfordert sudo
~/.odbc.ini Benutzerspezifische DSNs Nur aktueller Benutzer

Erstellen eines DSN

Falls ~/.odbc.ini vorhanden, füge den neuen DSN-Abschnitt hinzu, ohne die bestehende Datei zu ersetzen. Kopiere die installierte Vorlage nur, wenn du die Datei erstellst:

if [ -e "$HOME/.odbc.ini" ]; then
    echo "Preserve ~/.odbc.ini and add the new DSN section manually."
else
    cp /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template "$HOME/.odbc.ini"
fi

Bearbeiten Sie ~/.odbc.ini mit den Details Ihres Fabric-Arbeitsbereichs:

[FabricDSN]
Description    = Microsoft Fabric Data Engineering
Driver         = Microsoft ODBC Driver for Microsoft Fabric Data Engineering
WorkspaceId    = <workspace-id>
LakehouseId    = <lakehouse-id>
AuthFlow       = AZURE_CLI
LogLevel       = INFO
# LogFile      = /tmp/fabric_odbc.log
# LargeTableSupport = true
# ReuseSession = true

Verifiziere die DSN

Liste die konfigurierten DSNs auf und teste dann die Verbindung:

odbcinst -q -s
isql -k -v "DSN=FabricDSN;"

Der Befehl isql benötigt die unixODBC-Kommandozeilen-Tools. Die -k Option verwendet SQLDriverConnect, wodurch der Treiber DSN-Verbindungsattribute verarbeiten kann.

Verwendung eines DSN in Anwendungen

conn = pyodbc.connect("DSN=FabricDSN")
using var connection = new OdbcConnection("DSN=FabricDSN");
await connection.OpenAsync();
SQLRETURN result = SQLConnect(
    hdbc,
    (SQLCHAR*)"FabricDSN",
    SQL_NTS,
    NULL,
    0,
    NULL,
    0);

Verwendungsbeispiele

Teste eine Verbindung mit isql

Starte eine interaktive SQL-Sitzung:

isql -k -v "DSN=FabricDSN;"

Führe eine einzelne Abfrage aus:

echo "SELECT 1 AS test" | isql -k -v "DSN=FabricDSN;" -b

Verwenden Sie -k für Fabric DSNs, damit isql über SQLDriverConnect statt über SQLConnect verbindet.

Mit großen Ergebnismengen arbeiten

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;"
    "EnableAsyncPrefetch=1;"
)

conn = pyodbc.connect(connection_string)
cursor = conn.cursor()
cursor.execute("SELECT * FROM large_table")

row_count = 0
while True:
    rows = cursor.fetchmany(1000)
    if not rows:
        break

    for row in rows:
        row_count += 1

    if row_count % 10000 == 0:
        print(f"Processed {row_count} rows")

print(f"Total rows processed: {row_count}")
conn.close()

Schemata und Tabellen entdecken

import pyodbc

conn = pyodbc.connect(connection_string)
cursor = conn.cursor()

cursor.execute("SHOW TABLES")
for table in cursor.fetchall():
    print(table)

cursor.execute("DESCRIBE employees")
for column in cursor.fetchall():
    print(column)

cursor.execute("SHOW SCHEMAS")
for schema in cursor.fetchall():
    print(schema)

conn.close()

Datentypzuordnung

Der Treiber ordnet Spark SQL-Datentypen ODBC-SQL-Typen zu:

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
SHORT SQL_SMALLINT SQLSMALLINT int short
INT SQL_INTEGER SQLINTEGER int int
LONG SQL_BIGINT SQLBIGINT int long
FLOAT SQL_REAL SQLREAL float float
DOUBLE SQL_DOUBLE SQLDOUBLE float double
DECIMAL SQL_DECIMAL SQLCHAR* decimal.Decimal decimal
STRING SQL_VARCHAR SQLCHAR* str string
VARCHAR(n) SQL_VARCHAR SQLCHAR* str string
CHAR(n) SQL_CHAR SQLCHAR* str string
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* JSON-Zeichenfolge string
MAP SQL_VARCHAR SQLCHAR* JSON-Zeichenfolge string
STRUCT SQL_VARCHAR SQLCHAR* JSON-Zeichenfolge string

Plattformunterschiede

Funktion Windows Linux
Fahrermanager Microsoft ODBC Driver Manager unixODBC
Treiber-Binärform microsoftfabricodbc.dll libmicrosoftfabricodbc.so
DSN-Konfiguration Windows-Registry und GUI /etc/odbc.ini und ~/.odbc.ini
Fahrerzulassung Registrierung und odbcad32.exe odbcinst -i -d -f
HTTP-Client WinHTTP libcurl
TLS In Windows integrierte Unterstützung Openssl
Zertifikatauthentifizierung Windows CryptoAPI OpenSSL mit RS256- und PEM- oder PFX-Dateien
Interaktive Authentifizierung Browserfenster Nicht verfügbar auf headless-Servern
Verpackung MSI-Installationsprogramm .deb, .rpm, oder .tar.gz Paket

Troubleshooting

Fahrer nicht gefunden

Problem: Die Verbindung schlägt mit [IM002] Data source name not found and no default driver specifiedfehl.

Lösungen:

  1. Überprüfen Sie die Treiberregistrierung, indem Sie odbcinst -q -d ausführen.
  2. Vergewissern Sie sich, dass /usr/lib/libmicrosoftfabricodbc.so vorhanden ist.
  3. Registrieren Sie den Fahrer, indem Sie . sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.templateausführen.
  4. Installieren Sie das Paket erneut, indem Sie sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.deb. ausführen.

Fahrer nach Tarball-Installation nicht gefunden

Problem: Der Treiber ist registriert, aber die gemeinsame Bibliothek ist nicht auf dem registrierten Pfad vorhanden.

Lösungen:

  1. Vergewissern Sie sich, dass /opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.so vorhanden ist.
  2. Erneutes Ausführen sudo ./install.sh --prefix=/opt/microsoft/fabricodbc.
  3. Wenn du ein benutzerdefiniertes Präfix verwendet hast, überprüfe, dass der Pfad des registrierten Treibers dasselbe Präfix verwendet.

DSN nicht gefunden

Problem: Die Verbindung schlägt mit [IM002] Data source name not foundfehl.

Lösungen:

  1. Überprüfen Sie die DSN-Konfiguration, indem Sie odbcinst -q -s. ausführen.
  2. Überprüfen Sie, ob ~/.odbc.ini oder /etc/odbc.ini den DSN-Abschnitt enthält.
  3. Stellen Sie sicher, dass der Driver Wert genau mit dem Namen des registrierten Fahrers übereinstimmt.

Verbindungsfehler

Problem: Der Fahrer kann sich nicht mit Fabric verbinden.

Lösungen:

  1. Überprüfen Sie, ob die Arbeitsplatz-ID und die Lakehouse-ID gültige GUIDs sind.
  2. Überprüfen Sie die Azure CLI-Authentifizierung, indem Sie az account show. ausführen
  3. Stelle sicher, dass du die erforderlichen Fabric-Arbeitsbereichsberechtigungen hast.
  4. Überprüfe die Netzwerkverbindung und die Proxy-Einstellungen.

Authentifizierungsfehler

Problem: Die Azure CLI-Authentifizierung schlägt fehl.

Lösungen:

  1. Laufen Sie az login , um Ihre Zugangsdaten zu aktualisieren.
  2. Lege das richtige Abonnement fest, indem du az account set --subscription <subscription-id> ausführst.
  3. Überprüfen Sie das Token, indem Sie az account get-access-token --resource https://api.fabric.microsoft.com ausführen.
  4. Stellen Sie sicher, dass Ihr Konto die erforderlichen Fabric-Arbeitsbereichsberechtigungen hat.

Fehler in der gemeinsamen Bibliothek

Problem: Der Fahrer meldet error while loading shared libraries: libmicrosoftfabricodbc.so.

Lösungen:

  1. Installieren Sie das Paket erneut, indem Sie sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.deb. ausführen.
  2. Vergewissern Sie sich, dass /usr/lib/libmicrosoftfabricodbc.so vorhanden ist.
  3. Führe aus, sudo ldconfig um den Cache der gemeinsamen Bibliothek zu aktualisieren.

Zeitüberschreitungen bei Abfragen

Problem: Bei Abfragen großer Tabellen tritt eine Zeitüberschreitung auf.

Lösungen:

  1. Fügen Sie LargeTableSupport=true der Verbindungszeichenfolge hinzu.
  2. Passen Sie PageSizeBytes für die Ergebnisgröße an.
  3. Fügen Sie EnableAsyncPrefetch=1 der Verbindungszeichenfolge hinzu.
  4. Verwenden Sie eine LIMIT Klausel, um die Größe des Ergebnisses zu begrenzen.

Protokollierung aktivieren

Aktivieren Sie eine detaillierte Protokollierung in einem DSN:

[FabricDSN]
LogLevel = DEBUG
LogFile  = /tmp/fabric_odbc_debug.log

Alternativ können Sie der Verbindungszeichenfolge Protokollierungsparameter hinzufügen:

LogLevel=DEBUG;LogFile=/tmp/fabric_odbc_debug.log;

Der Treiber unterstützt folgende Protokollierungsstufen:

  • DEBUG: Enthält detaillierte Debuginformationen und ist die ausführlichste Protokollierungsstufe des Treibers.
  • INFO: Enthält allgemeine Informationen und ist der Standard.
  • WARN: Enthält nur Warnungen.
  • ERROR: Enthält nur Fehler.

Aktivieren Sie unixODBC-Tracing

Für die Diagnose auf niedriger ODBC-Aufrufebene fügen Sie /etc/odbcinst.ini die folgende Konfiguration hinzu:

[ODBC]
Trace     = yes
TraceFile = /tmp/odbc_trace.log

Schalten Sie das Nachverfolgen aus, wenn Sie die Fehlersuche beendet haben, um unnötigen Leistungsaufwand zu vermeiden.