Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 eine sichere und flexible Spark-SQL-Konnektivität zu Ihren C/C++-, .NET-, Python- und anderen ODBC-kompatiblen Anwendungen und BI-Tools.
Wichtigste Funktionen
- ODBC 3.x-kompatibel: Vollständige Implementierung der ODBC 3.x-Spezifikation
- Microsoft Entra ID authentication: Mehrere Authentifizierungsflüsse, einschließlich Azure CLI, interaktive, Client-Authentifizierungsinformationen, zertifikatbasierte und Zugriffstoken-Authentifizierung
- Unterstützung von Spark SQL-Abfragen: 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, STRUCT)
- Wiederverwenden von Sitzungen: Integrierte Sitzungsverwaltung für verbesserte Leistung
- Modus für hohe Parallelität: Aktivieren Sie gemeinsam genutzte, bereits gestartete serverseitige Livy-Sitzungen, um die Latenz beim Verbindungsaufbau und die unnötige Ausbreitung von Spark-Clustern zu reduzieren
- Unterstützung für große Tabellen: Optimierte Behandlung für große Resultsets mit konfigurierbaren Seitengrößen
- Async Prefetch: Laden von Hintergrunddaten zur verbesserung der Leistung
- Proxyunterstützung: HTTP-Proxykonfiguration für Unternehmensumgebungen
- Multi-Schema-Lakehouse-Unterstützung: Stellen Sie eine Verbindung mit einem bestimmten Schema in einem Lakehouse her
- OneLake-Integration: Zugriff auf in OneLake gespeicherte Lakehouse-Daten, einschließlich Tabellen über mehrere Schemata, über eine einheitliche ODBC-Schnittstelle ohne separate Speicherkonfiguration
- Unterstützung von Umgebungselementen: Hängen Sie Fabric-Umgebungselemente während der Jobausführung an, um Arbeitsbereichsbibliotheken, Spark-Eigenschaften und Variablen auf jede Sitzung anzuwenden.
- Custom Spark-Konfiguration: Übergeben Sie Spark-Konfigurationseigenschaften direkt über die Verbindungszeichenfolge, um das Sitzungsverhalten zu optimieren.
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
Stellen Sie vor der Verwendung des Microsoft ODBC-Treibers für Microsoft Fabric Data Engineering folgendes sicher:
- Betriebssystem: Windows 10/11 oder Windows Server 2016+
- Fabric Access: Zugang zu einem Fabric-Arbeitsbereich
- Microsoft Entra ID-Anmeldeinformationen: Geeignete Anmeldeinformationen für die Authentifizierung
- Workspace- und Lakehouse-IDs: GUID-Kennungen für Ihren Fabric-Arbeitsplatz und Ihr Lakehouse
- Azure CLI (optional): Erforderlich für die Azure CLI-Authentifizierungsmethode
Herunterladen und MSI-Installation
- Herunterladen des Microsoft ODBC-Treibers für Microsoft Fabric Data Engineering MSI-Paket
- Doppelklicken Sie auf
MicrosoftFabricODBCDriver-2.0.msi. - Folgen Sie dem Installations-Assistenten, und akzeptieren Sie den Lizenzvertrag.
- Installationsverzeichnis auswählen (Standard:
C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\) - Abschließen der Installation
Unbeaufsichtigte Installation
# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet
# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log
Überprüfen der Installation
Überprüfen Sie nach der Installation, ob der Treiber registriert ist:
- Ausführen
odbcad32.exe(ODBC-Datenquellenadministrator) - Navigieren zur Registerkarte "Treiber "
- Überprüfen, ob "Microsoft ODBC-Treiber für Microsoft Fabric Data Engineering" aufgeführt ist
Schnellstartbeispiel
Dieses Beispiel zeigt, wie man sich mit Fabric verbindet und eine Abfrage mit dem Microsoft ODBC Driver for Microsoft Fabric Data Engineering ausführt. Stellen Sie sicher, dass Sie die Voraussetzungen erfüllt und den Treiber installiert haben, bevor Sie diesen Code ausführen.
C/C++ Beispiel
#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-Beispiel
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-Beispiel
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 der Verbindungszeichenfolge
Grundlegende Verbindungszeichenfolge
Der Microsoft ODBC-Treiber für Microsoft Fabric Data Engineering verwendet das folgende Verbindungszeichenfolgenformat:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};<parameter1>=<value1>;<parameter2>=<value2>;...
Komponenten der Verbindungszeichenfolge
| Komponente | Description | Example |
|---|---|---|
| TREIBER | ODBC-Treiberbezeichner | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
| WorkspaceId | Fabric-Arbeitsbereichskennung (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| LakehouseId | Fabric Lakehouse-Kennung (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| AuthFlow | Authentifizierungsmethode |
AZURE_CLI, INTERACTIVE, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE, , ACCESS_TOKEN, FILE_TOKEN |
Exemplarische Verbindungszeichenfolgen
Grundlegende Verbindung (Azure CLI-Authentifizierung)
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI
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
Mit Protokollierung
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LogLevel=DEBUG;LogFile=odbc_driver.log
Mit Modus für hohe Nebenläufigkeit
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
Siehe den Abschnitt zum Modus „High-Concurrency (HC)“ für vollständige Konfigurationshinweise.
Authentifizierung
Der Microsoft ODBC-Treiber für Microsoft Fabric Data Engineering unterstützt mehrere Authentifizierungsmethoden über Microsoft Entra ID (früher Azure Active Directory). Die Authentifizierung wird mithilfe des AuthFlow Parameters in der Verbindungszeichenfolge konfiguriert.
Authentifizierungsmethoden
| AuthFlow-Wert | Description |
|---|---|
CLIENT_CREDENTIAL (0) |
Dienstprinzipal mit geheimem Clientschlüssel. Alias: CLIENT_SECRET_CREDENTIAL. |
BROWSER_BASED (1) |
Interaktive browserbasierte Authentifizierung. Alias: INTERACTIVE. |
AZURE_CLI (2) |
Entwicklung mit Azure CLI-Zugangsdaten. |
CLIENT_CERTIFICATE_CREDENTIAL (3) |
Dienstleiter mit Urkunde. Alias: CLIENT_CERTIFICATE. |
AUTH_ACCESS_TOKEN (4) |
Vorab abgerufenes Bearerzugriffstoken. Alias: ACCESS_TOKEN. |
FILE_TOKEN (5) |
Liest ein Authentifizierungstoken aus einer Datei. |
Sie können Authentifizierungswerte in SNAKE_CASE in Großbuchstaben, PascalCase oder numerischer Form angeben. Der Fahrer akzeptiert außerdem kurze Aliase wie Browser, , , CLI, CertificateToken, und FileInteractive. Der Fahrer ignoriert Unterstriche beim Vergleich von Werten.
Azure CLI-Authentifizierung
Am besten geeignet für: Entwicklung und interaktive Anwendungen
# 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)
Erforderliche Komponenten:
- Azure CLI installiert:
az --version - Angemeldet:
az login
Interaktive Browserauthentifizierung
Am besten geeignet für: Benutzerorientierte Anwendungen
# 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)
Verhalten:
- Öffnet ein Browserfenster für die Benutzerauthentifizierung.
- Anmeldeinformationen werden für nachfolgende Verbindungen zwischengespeichert.
Clientanmeldeinformationen (Dienstprinzipal)-Authentifizierung
Am besten geeignet für: Automatisierte Dienste und Hintergrundaufträge
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};"
)
Erforderliche Parameter
-
TenantId: Azure-Mandanten-ID -
ClientId: Anwendungs-ID (Client-ID) von Microsoft Entra ID -
ClientSecret: Geheimer Clientschlüssel von Microsoft Entra ID
Bewährte Methoden
- Sicheres Speichern geheimer Schlüssel (Azure Key Vault, Umgebungsvariablen)
- Verwenden von verwalteten Identitäten nach Möglichkeit
- Regelmäßiges Erneuern von Geheimnissen
Zertifikatbasierte Authentifizierung
Am besten geeignet für: Unternehmensanwendungen, die zertifikatbasierte Authentifizierung erfordern
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>;"
)
Erforderliche Parameter:
-
TenantId: Azure-Mandanten-ID -
ClientId: Anwendungs-ID (Client-ID) -
CertificatePath: Pfad zur PFX/PKCS12-Zertifikatdatei -
CertificatePassword: Zertifikatkennwort
Zugriffstokenauthentifizierung
Am besten geeignet für: Benutzerdefinierte Authentifizierungsszenarien
# 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};"
)
Dateitoken-Authentifizierung
Verwenden Sie Dateitoken-Authentifizierung für containerisierte Umgebungen und automatisierte Pipelines, bei denen ein anderer Prozess einen Inhabertoken in die bekannte Tokendatei des Treibers schreibt:
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=FILE_TOKEN;"
)
Der Treiber löst den Token-Dateistandort unter Windows und Linux auf.
Treiberübergreifende Eigenschaftsaliase
Der ODBC-Treiber akzeptiert ausgewählte ADONET- und JDBC-Eigenschaftsnamen zusätzlich zu nativen ODBC-Namen. Diese Unterstützung kann Verbindungsstring-Änderungen reduzieren, wenn du zwischen Fabric-Treibern wechselst.
| ADO.NET- oder JDBC-Eigenschaft | ODBC-Äquivalent |
|---|---|
FabricWorkspaceID |
WorkspaceId |
FabricLakehouseID |
LakehouseId |
LivySessionTimeoutSeconds |
Verbindungstimeout |
LivyStatementTimeoutSeconds |
Anweisungs-Timeout |
ConnectionPoolEnabled |
Pool aktiviert |
Der Treiber löst beim Verbindungsaufbau 17 treiberübergreifende Aliase auf.
Konfigurationsparameter
Erforderliche Parameter
Diese Parameter müssen in jeder Verbindungszeichenfolge vorhanden sein:
| Parameter | Typ | Description | Example |
|---|---|---|---|
| WorkspaceId | UUID | Fabric-Arbeitsbereichsbezeichner | 4bbf89a8-... |
| LakehouseId | UUID | Fabric Lakehouse-Kennkennung | d8faa650-... |
| AuthFlow | String | Authentifizierungsflusstyp | AZURE_CLI |
Optionale Parameter
Verbindungseinstellungen
| Parameter | Typ | Standard | Description |
|---|---|---|---|
| Datenbank | String | Nichts | 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. |
| Geltungsbereich | String | https://api.fabric.microsoft.com/.default |
OAuth-Bereich |
Leistungseinstellungen
| Parameter | Typ | Standard | Description |
|---|---|---|---|
| ReuseSession | Boolean | true |
Vorhandene Spark-Sitzung wiederverwenden |
| Unterstützung für große Tabellen | 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 die Ergebnispaginierung (1-18 MB) |
Logging-Einstellungen
| Parameter | Typ | Standard | Description |
|---|---|---|---|
| LogLevel | String | INFO |
Log-Level: DEBUG, INFO, WARN oder ERROR. Verwenden Sie DEBUG für detaillierte Treiberdiagnosen. |
| Protokolldatei | String | odbc_driver.log |
Protokolldateipfad (absolut oder relativ) |
Proxyeinstellungen
| Parameter | Typ | Standard | Description |
|---|---|---|---|
| UseProxy | Boolean | false |
Proxy aktivieren |
| ProxyHost | String | Nichts | Proxyhostname |
| ProxyPort | Integer | Nichts | Proxyport |
| ProxyUsername | String | Nichts | Proxy-Authentifizierungsbenutzername |
| ProxyPassword | String | Nichts | 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 optional. 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 |
String | 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 |
String | Nichts | Gibt einen serverseitigen Packhinweis an. Verbindungen müssen eine entsprechende serverseitige Konfiguration verwenden, um eine warme Livy-Sitzung zu teilen. |
IdempotencyKey |
String | Nichts | 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 |
String | Nichts | 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> |
String | Nichts | 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
-
LivyModehat Vorrang vorUseHighConcurrency, wenn Sie beide Parameter festlegen. - Parameterwerte sind nicht groß- und grossschreibungssensitiv.
-
UseHighConcurrencyakzeptierttrue,yes,onoder1, um den HC-Modus zu aktivieren. Es akzeptiertfalse,0,nooderoff, um den HC-Modus zu deaktivieren. - Für andere nichtleere Werte liefert ein
SQLDriverConnectFehler zurück. DSN-only protokolliert den ValidierungsfehlerSQLConnectund 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.
Umgebungsvariablen-Fallbacks
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 lassen HC deaktiviert. Die Aliase off und on gelten nur für DSN- und Verbindungszeichenfolgenwerte.
Umgebungseinstellungen
Sie können ein Fabric Umgebungselement an die Spark-Sitzung anfügen, die vom Treiber gestartet wurde. Die Bibliotheken, Spark-Eigenschaften und Variablen der ausgewählten Umgebung werden automatisch angewendet, wenn die Sitzung erstellt wird.
| Parameter | Typ | Standard | Description |
|---|---|---|---|
| EnvironmentId | UUID | Nichts | Die Fabric-Umgebungselement-ID (GUID), die bei der Erstellung einer Spark-Sitzung angewendet werden soll. |
Beispiel für eine Verbindungszeichenfolge mit einem Umgebungselement:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;EnvironmentId=<environment-id>
Hinweis
Die Umgebung wird angewendet, wenn die Spark-Sitzung gestartet wird. Wenn Sie auch benutzerdefinierte Spark-Konfigurationseigenschaften angeben, haben Eigenschaften auf Sitzungsebene Vorrang vor den Standardeinstellungen der Umgebung.
Benutzerdefinierte Spark-Konfiguration
Sie können Spark-Konfigurationseigenschaften direkt im Verbindungszeichenfolge übergeben. Jeder Parameter, der mit spark. präfixiert ist, wird zum Erstellungszeitpunkt automatisch auf die Spark-Sitzung angewendet, sodass Sie den Arbeitsbereich oder die Laufzeitstandardwerte außer Kraft setzen können.
Beispiel-Spark-Konfigurationen:
spark.sql.shuffle.partitions=200
spark.sql.adaptive.enabled=true
spark.sql.autoBroadcastJoinThreshold=10485760
Example Verbindungszeichenfolge mit benutzerdefinierten Spark-Eigenschaften:
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
Hinweis
Spark-Konfigurationseigenschaften werden angewendet, wenn die Sitzung erstellt wird. Sie gelten für alle Abfragen, die innerhalb dieser Sitzung ausgeführt werden, und setzen die Standardeinstellungen für die gleichen Eigenschaften außer Kraft.
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.
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 undEnvironmentId.
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 (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 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 mit Umgebungs- 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 (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"
)
HC-Modus in einem DSN konfigurieren
Du kannst HC-Einstellungen in einem DSN speichern, anstatt sie in jedem Verbindungszeichenfolge zu wiederholen. Wenn ein Verbindungszeichenfolge keinen Wert angibt, liest der Treiber folgende Einstellungen aus dem DSN:
LivyModeUseHighConcurrencyEnvironmentIdSessionTagIdempotencyKeyHeartbeatTimeoutInSecondAcquireTimeoutSeconds
Der Treiber liest außerdem auch die ausschließlich für die Kompatibilität vorgesehenen Einstellungen TenantPrincipal und PoolMax. Um diese Einstellungen zu speichern, bearbeite die DSN in odbcad32.exe oder benutze SQLWritePrivateProfileString. Verwenden Sie die Parameternamen in der HC-Einstellungstabelle.
Von Bedeutung
Der Treiber liest conf.* keine Spark-Konfigurationsüberschreibungen aus dem DSN. Füge sie der Verbindungszeichenfolge zur Laufzeit hinzu oder injiziere sie, bevor SQLDriverConnect aufgerufen wird.
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 entfernen Sie LivyMode und legen UseHighConcurrency=false fest. |
| Verbindungszeichenfolge | Setze LivyMode=Classic, oder entferne die HC-Parameter. |
Connection-String- und DSN-Einstellungen haben Vorrang vor dem Fallback über Umgebungsvariablen. Diese Änderungen betreffen nur neue Verbindungen. Bestehende HC-Sessions laufen weiter, bis sie veröffentlicht werden.
Verstehen Sie das Laufzeitverhalten von HC
-
Validierung:
SQLDriverConnectlehnt ungültige HC-Boolesche und positiv-ganzzahlige Werte mit SQLSTATEHY024ab. Es weist eine ungültigeLivyModesowie ungültige oder zu großeWorkspaceId-,LakehouseId- undIdempotencyKey-Werte mit SQLSTATEHY000zurück. Ein zu großer Kompatibilitäts-TenantPrincipalWert gibt ebenfallsHY000zurück. Bei ausschließlichSQLConnectDSN protokolliert der Treiber gewöhnliche HC-Validierungsfehler und verwendet den klassischen Modus. Zu große sicherheitssensible Werte führen weiterhin dazu, dass die Verbindung fehlschlägt. -
Sensible Daten: Der Treiber schließt andere sensible Felder aus HC-Logs und Diagnoseausgaben aus oder löscht
IdempotencyKeysie 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 Erschöpfen eines Modus wirkt sich nicht auf das andere aus.
-
Anfangsdatenbank: HC-Verbindungen führen die Anfangsanweisung
USEfür den ParameterDatabasenicht aus. FühreUSE <database>nach der Verbindung aus oder benutze vollständig qualifizierte Tabellennamen. -
Diagnose: Legen Sie
LogLevel=DEBUGso fest, dass HC-Erfassung, Abfragen, Freigaben und Entscheidungen zur Fehlerzuordnung protokolliert werden. Für eine gezielte Fehlerbehebung setzen SieLIVY_HC_VERBOSE=1so, dass zusätzliche bereinigte HC-HTTP-Diagnosedaten einbezogen werden.
Konfigurieren Sie ein DSN
Erstellen eines System-DSN
ODBC-Administrator öffnen
%SystemRoot%\System32\odbcad32.exeErstellen eines neuen System-DSN
- Zur Registerkarte "System-DSN" wechseln
- Wählen Sie „Hinzufügen“ aus.
- Wählen Sie "Microsoft ODBC-Treiber für Microsoft Fabric Data Engineering" aus.
- Wählen Sie "Fertig stellen" aus.
Konfigurieren von DSN-Einstellungen
-
Datenquellenname: Geben Sie einen eindeutigen Namen ein (z. B.
FabricODBC) - Beschreibung: Optionale Beschreibung
- Arbeitsbereichs-ID: GUID des Fabric-Arbeitsbereichs
- Lakehouse-ID: Ihre Fabric-Lakehouse-GUID
- Authentifizierung: Authentifizierungsmethode auswählen
- Environment-ID (optional): Geben Sie die GUID des Fabric Umgebungselements ein, das während der Sitzungserstellung angefügt werden soll.
-
Livy-Modus (optional): Auf
HighConcurrencysetzen, um den HC-Modus zu aktivieren - Session-Tag (optional): Geben Sie ein nicht-sensibles Betriebslabel für HC-Session-Matching ein
- Konfigurieren zusätzlicher Einstellungen nach Bedarf
-
Datenquellenname: Geben Sie einen eindeutigen Namen ein (z. B.
Verbindung testen
- Wählen Sie "Verbindung testen" aus, um die Einstellungen zu überprüfen.
- Wählen Sie zum Speichern "OK" aus.
Verwenden von DSN in Anwendungen
# Python - Connect using DSN
conn = pyodbc.connect("DSN=FabricODBC")
// .NET - Connect using DSN
using var connection = new OdbcConnection("DSN=FabricODBC");
await connection.OpenAsync();
Verwendungsbeispiele
Grundlegende Verbindung und Abfrage
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));
}
}
}
}
Arbeiten mit großen Ergebnismengen
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()
DML-Anweisungen ausführen
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;
}
Verwenden Sie executeDml mit INSERT-, UPDATE- oder DELETE-Anweisungen. Die gemeldete Zeilenanzahl hängt davon ab, ob das Ergebnis eine vom Treiber erkannte Aktualisierungszahl enthält.
Schema-Ermittlung
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()
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 | Boolesch | Boolesch |
| BYTE | SQL_TINYINT | SQLSCHAR | INT | sbyte |
| KURZ | SQL_SMALLINT | SQLSMALLINT | INT | short |
| INT | SQL_INTEGER | SQLINTEGER | INT | INT |
| LONG | SQL_BIGINT | SQLBIGINT | INT | long |
| FLOAT | SQL_REAL | SQLREAL | Schweben | Schweben |
| DOUBLE | SQL_DOUBLE | SQLDOUBLE | Schweben | doppelt |
| DEZIMAL | SQL_DECIMAL | SQLCHAR* | decimal.Decimal | Dezimal |
| STRING | SQL_VARCHAR | SQLCHAR* | str | Schnur |
| VARCHAR(n) | SQL_VARCHAR | SQLCHAR* | str | Schnur |
| CHAR(n) | SQL_CHAR | SQLCHAR* | str | Schnur |
| BINARY | SQL_VARBINARY | SQLCHAR* | Byte | 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) | Schnur |
| MAP | SQL_VARCHAR | SQLCHAR* | str (JSON) | Schnur |
| STRUCT | SQL_VARCHAR | SQLCHAR* | str (JSON) | Schnur |
INTEGRATION von BI-Tools
Microsoft Excel
- Excel öffnen –> Daten –> Daten abrufen –> aus anderen Quellen –> aus ODBC
- Wählen Sie Ihren konfigurierten DSN aus (z. B.
FabricODBC) - Authentifizieren Sie sich, wenn Sie dazu aufgefordert werden
- Durchsuchen und Auswählen von Tabellen
- Laden von Daten in excel-Arbeitsblatt
Power BI Desktop
- Öffnen von Power BI Desktop –> Abrufen von Daten –> ODBC
- Wählen Sie Ihren konfigurierten DSN aus.
- Durchsuchen des Datenkatalogs und Auswählen von Tabellen
- Transformieren von Daten nach Bedarf
- Erstellen von Visualisierungen
SQL Server Management Studio (verknüpfter 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;
Problembehandlung
Dieser Abschnitt enthält Anleitungen zum Beheben häufiger Probleme, die bei verwendung des Microsoft ODBC-Treibers für Microsoft Fabric Data Engineering auftreten können.
Häufig auftretende Probleme
In den folgenden Abschnitten werden allgemeine Probleme und deren Lösungen beschrieben:
Verbindungsfehler
Problem: Keine Verbindung zu Fabric
Lösungen:
- Überprüfen Sie, ob die Workspace-ID und die Lakehouse-ID gültige GUIDs sind.
- Überprüfen sie die Azure CLI-Authentifizierung:
az account show - Stellen Sie sicher, dass Sie über entsprechende Fabric-Arbeitsbereichsberechtigungen verfügen.
- Überprüfen von Netzwerkkonnektivitäts- und Proxyeinstellungen
Authentifizierungsfehler
Problem: Die Authentifizierung schlägt mit Azure CLI fehl
Lösungen:
- Ausführen
az loginzum Aktualisieren von Anmeldeinformationen - Überprüfen Sie, ob es sich um den richtigen Mandanten handelt:
az account set --subscription <subscription-id> - Gültigkeit des Tokens überprüfen:
az account get-access-token --resource https://api.fabric.microsoft.com
Abfrage-Timeouts
Problem: Abfragen, die bei großen Tabellen eine Zeitüberschreitung haben
Lösungen:
- Aktivieren von
LargeTableSupport=true - Passen Sie
PageSizeBytesfür eine optimale Blockgröße an. - Aktivieren sie asynchrone Prefetch:
EnableAsyncPrefetch=1 - Verwenden einer
LIMITKlausel zum Einschränken der Ergebnisgröße
Aktivieren der Protokollierung
Beim Behandeln von Problemen kann das Aktivieren der detaillierten Protokollierung dabei helfen, die Ursache der Probleme zu identifizieren. Sie können die Protokollierung über die Verbindungszeichenfolge aktivieren.
So aktivieren Sie die detaillierte Protokollierung:
LogLevel=DEBUG;LogFile=C:\temp\odbc_driver_debug.log;
Protokollebenen:
-
DEBUG: Detaillierte Debugging-Informationen und die ausführlichste Treiber-Log-Ebene -
INFO: Allgemeine Informationen (Standard) -
WARN: Nur Warnungen -
ERROR: Nur Fehler
ODBC-Ablaufverfolgung
Für Diagnosen auf niedriger Ebene können Sie die Windows ODBC-Ablaufverfolgung aktivieren, um detaillierte ODBC-API-Aufrufe und Treiberverhalten zu erfassen. Denken Sie daran, die Ablaufverfolgung zu deaktivieren, wenn sie nicht erforderlich ist, um eine optimale Leistung aufrechtzuerhalten.
So aktivieren Sie die ODBC-Ablaufverfolgung:
-
odbcad32.exeöffnen - Zur "Tracing"-Tab wechseln
- Festlegen des Pfads der Ablaufverfolgungsdatei (z. B.
C:\temp\odbctrace.log) - Wählen Sie "Tracing jetzt starten" aus.
- Reproduzieren Sie das Problem
- Wählen Sie "Tracing jetzt stoppen" aus.