Linux上のMicrosoft Fabric Data Engineering用Microsoft ODBCドライバー

ODBC (Open Database Connectivity) は、クライアント アプリケーションがデータベースやビッグ データ プラットフォームのデータに接続して操作できるようにする、広く採用されている標準です。

Microsoft ODBCドライバー for Fabric Data Engineeringは、ODBC標準の信頼性とシンプルさでFabric上でSparkワークロードの接続、クエリ、管理を可能にします。 FabricのLivy APIを基に構築されたこのドライバーは、Linux上のC/C++、.NET、Python、その他のODBC互換アプリケーションに対して安全かつ柔軟なSpark SQL接続を提供します。

主要な機能

  • ODBC 3.x準拠:ODBC 3.x仕様の完全実装。
  • Microsoft Entra ID認証:Azure CLI、クライアント認証、証明書ベース、アクセストークン認証を含む複数の認証フロー。
  • Spark SQLクエリサポート:Spark SQL文の直接実行。
  • 包括的なデータ型サポート:複雑な型(ARRAY、 MAP、 STRUCTを含むすべてのSpark SQLデータ型をサポートしています)。
  • セッション再利用:パフォーマンス向上のための組み込みセッション管理機能。
  • 高並行性モード:接続開始遅延やSparkクラスターの拡散を減らすために、共有のウォームサーバーサイドLivyセッションにオプトインしてください。
  • 大規模テーブルサポート:設定可能なページサイズを持つ大規模な結果セットの最適化された処理。
  • 非同期プリフェッチ:性能向上のためのバックグラウンドデータロード。
  • プロキシサポート:エンタープライズ環境向けのHTTPプロキシ設定。
  • マルチスキーマレイクハウスサポート:レイクハウス内の特定のスキーマに接続します。

注

オープン ソースの Apache Spark では、データベースとスキーマが同義で使用されます。 例えば、FabricノートブックでSHOW SCHEMASやSHOW DATABASESを実行すると、同じ結果が得られます:湖の家のすべてのスキーマのリストです。

前提条件

Linux上でMicrosoft ODBCドライバー(Microsoft Fabric Data Engineering用)を使用する前に、以下の前提条件を確認してください。

  • オペレーティングシステム:Ubuntu 22.04以降、Debian 11以降、またはRed Hat Enterprise Linux(RHEL)8以降(x86-64)を搭載。
  • unixODBC:Linux用のODBCドライバーマネージャーです。 unixodbcとunixodbc-devパッケージをインストールしてください。
  • libcurl: libcurl4 やあなたのディストリビューションの同等パッケージのようなHTTPランタイム依存関係です。
  • OpenSSL:TLSおよび暗号のランタイム依存関係、例えば openssl や libssl3 、または同等のパッケージです。
  • Fabricアクセス:Fabricワークスペースへのアクセス。
  • Microsoft Entra IDの認証情報:認証に適切な認証情報。
  • ワークスペースおよびレイクハウスID:FabricのワークスペースとレイクハウスのGUID識別子です。
  • Azure CLI (optional):Azure CLI 認証を使用する際に必須。

Linuxでダウンロード・インストール

ドライバーをインストールするには:

  1. ms-sparksql-odbc-linux-2.0.0.tarを抽出します。

  2. 抽出したディレクトリで端末を開きます。

  3. Debianパッケージをインストールする:

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

このパッケージは以下のファイルをインストールします:

ファイル 設置場所
ドライバーライブラリ /usr/lib/libmicrosoftfabricodbc.so
運転者登録テンプレート /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template
DSN構成テンプレート /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template
License /usr/share/doc/microsoft-fabric-odbc-driver/LICENSE
使用ガイド /usr/share/doc/microsoft-fabric-odbc-driver/USAGE_Linux.md

RPMパッケージをインストールしてください

RHEL、Fedora、またはCentOSでは、解凍済みのドライバーアーカイブからRPMパッケージをインストールしてください:

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

あるいは、 rpmを使います:

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

RPMがドライバーを登録したかどうか確認してください:

odbcinst -q -d | grep "Microsoft"

RPMパッケージをアンインストールするには、以下を実行します:

sudo dnf remove microsoft-fabric-odbc-driver

ターボールを設置してください

DebianやRPMパッケージをサポートしていないディストリビューション、またはカスタムインストール場所の場合は、 .tar.gz パッケージを抽出してインストールスクリプトを実行します:

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

インストールスクリプトは以下のオプションをサポートしています:

Option 説明
--prefix=<path> カスタムディレクトリにインストールしてください。 既定値は /opt/microsoft/fabricodbc です。
--no-register unixODBCドライバー登録はスキップしてください。
--dry-run ファイルをインストールしずに計画された変更点を表示します。
--uninstall インストール済みのファイルを削除し、ドライバーの登録解除をしてください。
--help コマンド ヘルプを表示します。

デフォルトのタールボール設置を確認するには、以下を実行します:

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

アンインストールするには、解凍したパッケージディレクトリから sudo ./install.sh --uninstall を実行してください。

手動でドライバーを登録してください

パッケージはドライバーを自動的にunixODBCに登録します。 ドライバーを手動で登録するには、以下を実行します:

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

インストールを確認する

ドライバーが登録されていること、そしてライブラリがインストールされていることを確認しましょう:

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

odbcinstコマンドには[Microsoft ODBC Driver for Microsoft Fabric Data Engineering]が記載されているはずです。

ドライバーをアンインストールしてください

ドライバーをアンインストールするには、以下のコマンドを実行してください:

sudo dpkg -r microsoft-fabric-odbc-driver

このコマンドはドライバーファイルを削除し、unixODBCからドライバーを登録解除します。

クイックスタートの例

以下の例はFabricに接続し、Spark SQLクエリを実行します。 事前条件を満たし、ドライバーをインストールしてからサンプルを実行してください。

Pythonの例

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++の例

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

例を作って実行してください:

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

.NET の例

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

接続文字列の形式

基本的な接続文字列

以下の接続文字列形式を使用します:

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

接続文字列コンポーネント

Component 説明 例
DRIVER ODBC ドライバー識別子 {Microsoft ODBC Driver for Microsoft Fabric Data Engineering}
WorkspaceId Fabricワークスペース識別子(GUID) 4bbf89a8-66bb-443f-91af-df31e6a7560b
LakehouseId Fabric lakehouse 識別子(GUID) d8faa650-1343-496b-b9cc-d4168a676f90
AuthFlow 認証方法 AZURE_CLI、CLIENT_CREDENTIAL、CLIENT_CERTIFICATEまたはACCESS_TOKEN

接続文字列の例

基本的な接続

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

パフォーマンスオプションとの関連

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

伐採との関連

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

高並行モードとの接続

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

完全な設定ガイダンスについては、 ハイコンカレンシー(HC)モードを参照してください。

Authentication

Microsoft ODBCドライバー for Microsoft Fabric Data Engineeringは、Microsoft Entra IDを通じた複数の認証方法をサポートしています。 認証は、接続文字列またはDSNのAuthFlowパラメータを使って設定します。

認証方法

AuthFlow 値 説明
AZURE_CLI Azure CLI 資格情報を使用した開発
CLIENT_CREDENTIAL クライアントシークレットを持つサービスプリンシパル
CLIENT_CERTIFICATE 証明書を持つサービスプリンシパル
ACCESS_TOKEN 事前に取得されたベアラー アクセス トークン
FILE_TOKEN ファイルから認証トークンを読み取る

注

ヘッドレスLinuxサーバーではインタラクティブなブラウザ認証は利用できません。 代わりにAzure CLI、クライアント認証、証明書ベース、またはアクセストークン認証を使いましょう。

Azure CLI 認証

開発やインタラクティブアプリケーションにはAzure CLI認証を使いましょう。

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)

接続する前に、Azure CLIがインストールされているか確認し、サインインしてください:

az --version
az login

DebianまたはUbuntuにAzure CLIをインストールするには、パッケージマネージャーをご利用ください:

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

クライアント認証

自動化サービスやバックグラウンドジョブにはクライアント認証を使いましょう。

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

次のパラメーターを入力します。

  • TenantId: Microsoft Entra テナント ID です。
  • ClientId: アプリケーション (クライアント) ID。
  • ClientSecret: クライアント シークレット。

秘密は安全な秘密ストアや環境変数に保存します。 秘密を平文の接続文字列やINIファイルに保存しないでください。

証明書ベースの認証

証明書認証が必要なエンタープライズアプリケーションには証明書ベースの認証を使用します。

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

次のパラメーターを入力します。

  • TenantId: Microsoft Entra テナント ID です。
  • ClientId: アプリケーション (クライアント) ID。
  • CertificatePath: PFXまたはPKCS12証明書ファイルへのパス。
  • CertificatePassword:証明書のパスワードです。

アクセス トークン認証

アプリケーションが別のメカニズムでトークンを取得する際には、アクセストークン認証を使いましょう。

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

ファイルトークン認証

コンテナ化環境や自動化パイプラインでファイルトークン認証を用いてください。別のプロセスがドライバのよく知られたトークンファイルにベアラートークンを書き込む場合です。

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

サポート可能なクロスドライバープロパティエイリアスについては、 クロスドライバープロパティエイリアスを参照してください。

構成パラメータ

必須のパラメーター

すべての接続文字列に以下のパラメータを含めます:

パラメーター タイプ 説明 例
WorkspaceId UUID(ユニバーサルユニーク識別子) ファブリック ワークスペース識別子 4bbf89a8-...
LakehouseId UUID(ユニバーサルユニーク識別子) Fabric lakehouse の識別子 d8faa650-...
AuthFlow String 認証フローの種類 AZURE_CLI

省略可能なパラメーター

接続設定

パラメーター タイプ Default 説明
Database String なし クラシックモードの初期データベース。 HCモードでは自動的に適用されません。接続後に USE <database> 実行するか、完全に限定されたテーブル名を使うことができます。
Scope String https://api.fabric.microsoft.com/.default OAuth スコープ

パフォーマンス設定

パラメーター タイプ Default 説明
ReuseSession ブール値 true 既存のSparkセッションを再利用します
LargeTableSupport ブール値 false 大きな結果セットの最適化を有効にする
EnableAsyncPrefetch ブール値 false バックグラウンド データプリフェッチを有効にする
PageSizeBytes Integer 18874368 (18 MB) 結果のページネーションにおけるページサイズは 1 MB から 18 MB までです

ログ記録の設定

パラメーター タイプ Default 説明
LogLevel String INFO ログレベル: DEBUG、 INFO、 WARN、または ERROR。 詳細なドライバー診断には DEBUG を使いましょう。
LogFile String odbc_driver.log 絶対または相対ログファイルパス

プロキシの設定

パラメーター タイプ Default 説明
UseProxy ブール値 false プロキシを有効にする
ProxyHost String なし プロキシホスト名
ProxyPort Integer なし プロキシ ポート
ProxyUsername String なし プロキシ認証ユーザー名
ProxyPassword String なし プロキシ認証パスワード

ハイコンカレンシー(HC)設定

これらのパラメータを使ってハイコンカレンド(HC)モードを有効化・設定します。 HCモードはオプトイン制です。 LivyModeや UseHighConcurrency を設定しなければ、ドライバーは従来のシングルセッションパスを使用します。 ガイダンスや例については、 ハイココレンド(HC)モードを参照してください。

パラメーター タイプ Default 説明
LivyMode String 設定されていません セッション取得を制御します。 サポートされている値は、 Classic、 HighConcurrency、および Autoです。 Auto 現在はクラシックパスを使っています。
UseHighConcurrency ブール値 false 設定 LivyMode=HighConcurrencyの代替としてHCモードを有効にします。
SessionTag String なし サーバー側でのパッキングのヒントを提供します。 接続でウォーム状態の Livy セッションを共有するには、一致するサーバー側の構成を使用する必要があります。
IdempotencyKey String なし HC の取得を安全に再試行するための、クライアントで生成されたキーを提供します。 ドライバーは文字セットを検証し、値をログに記録しません。
EnvironmentId String なし HC取得構成で送信されるFabric環境識別子をspark.fabric.environmentDetailsとして指定します。
HeartbeatTimeoutInSecond Integer サーバーの既定値 サーバー側のHCセッションのアイドルタイムアウトを秒単位で設定します。 値は正の整数である必要があります。
AcquireTimeoutSeconds Integer 300 ドライバーがHCセッションが Idle 状態に達するまでの待ち時間を秒単位で設定します。 値は正の整数である必要があります。
conf.<key> String なし HC 取得リクエストで送信される Spark 構成設定のオーバーライドを指定します。 たとえば、「 conf.spark.sql.shuffle.partitions=200 」のように入力します。

モードの優先性と検証

  • LivyMode 両方のパラメータを設定すると、 UseHighConcurrency より優先されます。
  • パラメータ値では、大文字と小文字は区別されません。
  • UseHighConcurrency HCモードを有効にするために true、 1、 yes、または on を受け入れます。 HCモードを無効にするには false、 0、 no、 off を受け入れています。
  • 空でない他の値は、 SQLDriverConnect エラーを返します。 DSNのみの SQLConnect は検証失敗を記録し、クラシックパスを使用します。

互換性の設定

ドライバーは TenantPrincipal および PoolMax、環境変数のフォールバックも受け入れ、以前のHC構成との互換性を確保します。 ドライバーはこれらの値を解析・検証しますが、HCセッションのマッチングやランタイムプール容量には影響しません。 入居者の隔離や接続制限に頼らないでください。

環境変数のフォールバック

ドライバは対応するDSNまたは接続文字列パラメータが設定されていない場合にのみ、以下の環境変数を使用します。

環境変数 にマップされます
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(互換性のみ)
FABRIC_ODBC_HC_HEARTBEAT_SECONDS HeartbeatTimeoutInSecond
FABRIC_ODBC_HC_ACQUIRE_TIMEOUT AcquireTimeoutSeconds
FABRIC_ODBC_HC_POOL_MAX PoolMax (互換性のみ)

FABRIC_ODBC_USE_HC では、環境のみの有効化で true、1、または yes を認識します(大文字と小文字を区別しません)。 他の値はHCモードを無効にします。 onおよびoffエイリアスはDSNおよび接続文字列の値にのみ適用されます。

高並行性(HC)モード

ハイコンカレンシー(HC)モードは、同じワークスペースとレイクハウスへのODBC接続を、各接続ごとに別々のクラスタをプロビジョニングするのではなく、共有されたウォームサーバーサイドのLivy Sparkセッションに接続できるようにします。 多数の短時間接続を確立し、サーバーによって管理される Spark キャパシティを共有できる、BI ダッシュボード、ノートブック カーネル、ETL ファンアウトなどのワークロードに使用できます。

HCモードはオプトイン制です。 HC設定を設定していない場合、ドライバーは従来のシングルセッションパスを使用します。

接続モードを選択する

HCモードを使う場合:

  • あなたのワークロードは、BIダッシュボードやノートブックカーネル、ETLファンアウトなど、多くの短命なODBC接続を開きます。
  • 接続は同じワークスペースとレイクハウスを対象にし、サーバー管理のSparkセッションを共有することができます。
  • 1回あたりのコールドスタート遅延を減らすことが重要です。

クラシックモードを使う場合:

  • 各接続は、異なるSpark構成や厳格なリソース隔離のために、孤立したSparkセッションを必要とします。
  • ターゲットワークスペースとレイクハウス用のFabric LivyエンドポイントはHCモードをサポートしていません。

高並行性モードを有効にする

DSNまたは接続文字列に高並行性モードパラメータを追加します。

推奨: 設定 LivyMode

LivyModeを使ってセッション取得モードを明示的に選択してください:

LivyMode=HighConcurrency

サポートされている値は、 Classic、 HighConcurrency、および Autoです。 値は大文字と小文字が区別されません。 Auto 現在はクラシックモードを選択しています。

代替案: Set UseHighConcurrency

既存の構成との互換性のためにブール設定を活用してください:

UseHighConcurrency=true

高同時進行モードを有効にするには、 true、 1、 yes、または onを使用します。 無効化するには、 false、 0、 no、または offを使ってください。 値は大文字と小文字が区別されません。 SQLDriverConnect SQLSTATE HY024 で他の空でない値を却下します。 DSNのみの SQLConnect は検証失敗を記録し、クラシックモードを使用します。

注

両方のパラメータを設定すると、 LivyMode が UseHighConcurrencyよりも優先されます。

また、環境変数を使って現在のシェルで高同時実行モードを有効にすることもできます:

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

HCモードでの必要なパラメータ

HCの有効化には以下の有効な識別子が必要です:

パラメーター 注記
WorkspaceId 有効なFabricワークスペースのGUIDでなければなりません。
LakehouseId 有効な Fabric レイクハウスの GUID である必要があります。

ウォームセッションのサーバーサイドマッチングに影響を与えるため SessionTag 含めてください。

セッションマッチング

HCモードはすべての接続が既存のセッションを再利用することを保証するわけではありません。 各セッション取得リクエストに対して、ドライバーは以下を送信します:

  • SessionTag の値。
  • 効果的なSpark構成、 conf.* 設定や EnvironmentIdが含まれます。

Fabric Livyサービスはこれらの値を評価し、接続をウォームセッションに付けるか新しいセッションを作成するかを決定します。 セッションの再利用を改善するために、サーバー管理のSpark容量を共有することを意図した接続間で一貫した値を使いましょう。

接続文字列の例

Azure CLI 認証を使用した最小限の HC 接続:

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

タイムアウトが調整されたHC接続:

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

環境および Spark 構成のオーバーライドを使用した HC 接続:

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

pyodbcとPython:

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

Linux DSNでHCモードの設定

各接続文字列でHC設定を繰り返すのではなく、ユーザー固有のDSNの~/.odbc.iniやシステム全体のDSNの/etc/odbc.iniに保存してください。

[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

DSNを保存した後、確認して接続をテストしてください。

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

接続文字列に値が指定されていない場合、ドライバーはDSNから以下の設定を読み込みます。

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

ドライバーは互換性のみの TenantPrincipal や PoolMax 設定も読み込みます。 HCの設定テーブルにあるパラメータ名を使いましょう。

Important

ドライバーは、DSN から conf.* Spark 構成のオーバーライドを読み取りません。 実行時に接続文字列に追加するか、SQLDriverConnectを呼び出す前に注入してください。

HCモードを無効にしてください

ドライバーを再デプロイせずに新しいHCセッションの取得を無効にできます。 HCモードを有効にした方法に対応した方法を使いましょう:

HC構成ソース HCモードを無効にする方法
環境変数のみ FABRIC_ODBC_USE_HC=falseを設定するか、変数を削除してください。
DSN LivyMode=Classicを設定します。 あるいは、 LivyMode を削除して UseHighConcurrency=falseに設定する方法もあります。
接続文字列 LivyMode=Classicを設定するか、ハードコアパラメータを削除してください。

接続文字列やDSN設定が環境変数のフォールバックよりも優先されます。 これらの変更は新規接続にのみ影響します。 既存のHCセッションはリリースされるまで続きます。

HCのランタイム動作を理解する

  • 検証:SQLDriverConnect SQLSTATE HY024で無効なHCブール値および正整数値を拒否します。 無効な LivyMode や、無効または過剰な WorkspaceId、 LakehouseId、 IdempotencyKey の値をSQLSTATE HY000で却下します。 過剰な互換性 TenantPrincipal 値も HY000返します。 DSN のみの SQLConnect の場合、ドライバーは通常の HC 検証の失敗をログに記録し、クラシック モードを使用します。 セキュリティに敏感な過大な値でも接続に失敗します。
  • 機密データ: ドライバーはHCログや診断出力から IdempotencyKey やその他の敏感なフィールドを除外または削除します。
  • キャンセル: ステートメントのキャンセルは協調的です。 すでに進行中のサーバー作業は、すぐに終了するのではなく、きれいに終わらせます。
  • サーキットブレーカー: HCモードとクラシックモードは別々のサーキットブレーカーを使用します。 一方のモードを使い果たしてももう一方には影響しません。
  • 初期データベース:HC接続はDatabaseパラメータの最初のUSE文を実行しません。 接続後に USE <database> を実行するか、完全に条件付きのテーブル名を使ってください。
  • 診断: HC の取得、ポーリング、リリース、およびエラーマッピングの判定をログに記録するように LogLevel=DEBUG を設定します。 重点的なトラブルシューティングのために、LIVY_HC_VERBOSE=1 に、機密情報を除去した HC HTTP 診断情報が追加で含まれるよう設定してください。

DSN の構成

Linuxでは、WindowsレジストリではなくINIファイルでデータソース名(DSN)を設定しましょう。

ファイル Scope アクセス
/etc/odbc.ini システム全体のDSN 要求 sudo
~/.odbc.ini ユーザー固有のDSN 現在のユーザーのみ

DSN を作成する

もし存在 ~/.odbc.ini なら、既存のファイルを置き換えずに新しいDSNセクションを追加してください。 ファイルを作成する際だけインストール済みのテンプレートをコピーしてください:

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

~/.odbc.ini を Fabric ワークスペースの詳細情報で編集します:

[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

DSNの確認

設定済みのDSNをリストアップし、接続をテストします:

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

isqlコマンドはunixODBCのコマンドラインツールを必要とします。 -kオプションはSQLDriverConnectを利用し、ドライバーがDSN接続属性を処理できるようにします。

アプリケーションでDSNを使う

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

使用例

iSQLで接続をテストする

インタラクティブなSQLセッションを開始しましょう:

isql -k -v "DSN=FabricDSN;"

単一のクエリを実行します:

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

Fabric DSNには-kを使用し、isqlがSQLDriverConnectではなくSQLConnectを介して接続するようにします。

大規模な結果セットを扱う

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

スキーマとテーブルの発見

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

データ型マッピング

ドライバーは、Spark SQL データ型を ODBC SQL 型にマップします。

Spark SQL 型 ODBC SQL型 C/C++型 Python 型 .NET 型
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 文字列 string
MAP SQL_VARCHAR SQLCHAR* JSON 文字列 string
STRUCT SQL_VARCHAR SQLCHAR* JSON 文字列 string

プラットフォームの違い

特徴 Windows Linux
ドライバーマネージャー Microsoft ODBC ドライバーマネージャー ユニックスODBC
ドライバーバイナリ microsoftfabricodbc.dll libmicrosoftfabricodbc.so
DSN の構成 WindowsレジストリとGUI /etc/odbc.ini と ~/.odbc.ini
運転者登録 レジストリと odbcad32.exe odbcinst -i -d -f
HTTPクライアント WinHTTP libcurl
TLS Windowsの組み込みサポート Openssl
証明書の認証 Windows CryptoAPI RS256を使用したOpenSSLとPEMまたはPFXファイル
対話型認証 ブラウザウィンドウ ヘッドレスサーバーでは利用できません
梱包 MSI インストーラ .deb、 .rpm、または .tar.gz パッケージ

Troubleshooting

運転手が見つからない

問題: [IM002] Data source name not found and no default driver specifiedで接続が失敗します。

解決策:

  1. 運転者登録証は odbcinst -q -dで確認してください。
  2. /usr/lib/libmicrosoftfabricodbc.soが存在することを確認します。
  3. sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template を実行してドライバーを登録します。
  4. sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.debを実行してパッケージを再インストールしてください。

タールボール設置後にドライバーが見つからない

問題:ドライバーは登録されているが、共有ライブラリが登録経路に存在しない。

解決策:

  1. /opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.soが存在することを確認します。
  2. sudo ./install.sh --prefix=/opt/microsoft/fabricodbcを再実行します。
  3. カスタムプレフィックスを使っている場合は、登録されたドライバーパスが同じプレフィックスを使用しているか確認してください。

DSN が見つかりません

問題: [IM002] Data source name not foundで接続が失敗します。

解決策:

  1. DSNの設定は odbcinst -q -sを実行して確認してください。
  2. ~/.odbc.ini または /etc/odbc.ini に DSN セクションが含まれていることを確認してください。
  3. Driverの価値が登録されたドライバー名と正確に一致していることを確認してください。

接続の失敗

問題:ドライバーがFabricに接続できません。

解決策:

  1. ワークスペースIDとレイクハウスIDが有効なGUIDであることを確認しましょう。
  2. az account show を実行して Azure CLI の認証を確認してください。
  3. 必要なFabricワークスペースの権限を持っていることを確認してください。
  4. ネットワーク接続とプロキシ設定を確認してください。

認証エラー

問題:Azure CLI 認証失敗。

解決策:

  1. 認証情報を更新するために az login を実行してください。
  2. az account set --subscription <subscription-id>を実行して正しいサブスクリプションを設定しましょう。
  3. az account get-access-token --resource https://api.fabric.microsoft.comを走ってトークンを確認してください。
  4. アカウントに必要なFabricワークスペース権限を持っていることを確認してください。

共有ライブラリエラー

問題:運転手が error while loading shared libraries: libmicrosoftfabricodbc.soを報告しています。

解決策:

  1. sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.debを実行してパッケージを再インストールしてください。
  2. /usr/lib/libmicrosoftfabricodbc.soが存在することを確認します。
  3. 共有ライブラリキャッシュをリフレッシュするには sudo ldconfig を実行してください。

クエリのタイムアウト

問題:クエリは大きなテーブルでタイムアウトします。

解決策:

  1. 接続文字列に LargeTableSupport=true を追加します。
  2. 結果のサイズに合わせて PageSizeBytes を調整してください。
  3. 接続文字列に EnableAsyncPrefetch=1 を追加します。
  4. LIMIT節を使って結果のサイズを制限してください。

ログ記録を有効にする

DSNで詳細なログ記録を有効にする:

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

あるいは、接続文字列にログパラメータを追加することもできます:

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

ドライバーは以下のログレベルをサポートしています:

  • DEBUG詳細なデバッグ情報が含まれており、最も詳細なドライバーログレベルです。
  • INFO: 一般情報が含まれ、デフォルトです。
  • WARN警告のみを含みます。
  • ERROR: 誤りのみを含みます。

unixODBCトレーシングを有効にする

低レベルのODBCコール診断では、 /etc/odbcinst.iniに以下の構成を追加してください:

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

トラブルシューティングが終わったら、不要なパフォーマンス オーバーヘッドを避けるためにトレースを無効にしてください。