Important
この機能は プレビュー段階です。
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データ型をサポートしています)。 - セッション再利用:パフォーマンス向上のための組み込みセッション管理機能。
- 大規模テーブルサポート:設定可能なページサイズを持つ大規模な結果セットの最適化された処理。
- 非同期プリフェッチ:性能向上のためのバックグラウンドデータロード。
- プロキシサポート:エンタープライズ環境向けの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パッケージをインストールしてください。 - Fabricアクセス:Fabricワークスペースへのアクセス。
- Microsoft Entra IDの認証情報:認証に適切な認証情報。
- ワークスペースおよびレイクハウスID:FabricのワークスペースとレイクハウスのGUID識別子です。
- Azure CLI (optional):Azure CLI 認証を使用する際に必須。
Linuxでダウンロード・インストール
Microsoft ODBCドライバー for Microsoft Fabric Data Engineering バージョン1.0.0はパブリックプレビューで利用可能です。
ドライバーをインストールするには:
ms-sparksql-odbc-linux-1.0.0.zipを抽出します。抽出したディレクトリで端末を開きます。
Debianパッケージをインストールする:
sudo dpkg -i microsoft-fabric-odbc-driver-1.0.0-Linux.deb
このパッケージは以下のファイルをインストールします:
| File | 設置場所 |
|---|---|
| ドライバーライブラリ | /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 |
手動でドライバーを登録してください
パッケージはドライバーを自動的に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
Authentication
Microsoft ODBCドライバー for Microsoft Fabric Data Engineeringは、Microsoft Entra IDを通じた複数の認証方法をサポートしています。 認証は、接続文字列またはDSNのAuthFlowパラメータを使って設定します。
認証方法
AuthFlow 値 |
説明 |
|---|---|
AZURE_CLI |
Azure CLI 資格情報を使用した開発 |
CLIENT_CREDENTIAL |
クライアントシークレットを持つサービスプリンシパル |
CLIENT_CERTIFICATE |
証明書を持つサービスプリンシパル |
ACCESS_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};"
)
構成パラメータ
必須のパラメーター
すべての接続文字列に以下のパラメータを含めます:
| パラメーター | タイプ | 説明 | 例 |
|---|---|---|---|
WorkspaceId |
UUID(ユニバーサルユニーク識別子) | ファブリック ワークスペース識別子 | 4bbf89a8-... |
LakehouseId |
UUID(ユニバーサルユニーク識別子) | Fabric lakehouse識別子 | d8faa650-... |
AuthFlow |
String | 認証フローの種類 | AZURE_CLI |
省略可能なパラメーター
接続設定
| パラメーター | タイプ | Default | 説明 |
|---|---|---|---|
Database |
String | なし | 接続先の特定のデータベース |
Scope |
String | https://api.fabric.microsoft.com/.default |
OAuth スコープ |
パフォーマンス設定
| パラメーター | タイプ | Default | 説明 |
|---|---|---|---|
ReuseSession |
ブール値 | true |
既存のSparkセッションを再利用します |
LargeTableSupport |
ブール値 | false |
大きな結果セットの最適化を有効にする |
EnableAsyncPrefetch |
ブール値 | false |
バックグラウンド データプリフェッチを有効にする |
PageSizeBytes |
Integer |
18874368 (18 MB) |
結果ページ番号のページサイズは1から18MBまでです |
ログ記録の設定
| パラメーター | タイプ | Default | 説明 |
|---|---|---|---|
LogLevel |
String | INFO |
ログレベル: TRACE、 DEBUG、 INFO、 WARN、または ERROR |
LogFile |
String | odbc_driver.log |
絶対または相対ログファイルパス |
プロキシの設定
| パラメーター | タイプ | Default | 説明 |
|---|---|---|---|
UseProxy |
ブール値 | false |
プロキシを有効にする |
ProxyHost |
String | なし | プロキシホスト名 |
ProxyPort |
Integer | なし | プロキシ ポート |
ProxyUsername |
String | なし | プロキシ認証ユーザー名 |
ProxyPassword |
String | なし | プロキシ認証パスワード |
DSN の構成
Linuxでは、WindowsレジストリではなくINIファイルでデータソース名(DSN)を設定しましょう。
| File | Scope | アクセス |
|---|---|---|
/etc/odbc.ini |
システム全体のDSN | 要求 sudo |
~/.odbc.ini |
ユーザー固有のDSN | 現在のユーザーのみ |
DSN を作成する
インストール済みのテンプレートをコピーしてください:
cp /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template ~/.odbc.ini
Fabricワークスペースの詳細で編集~/.odbc.ini:
[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 -v FabricDSN
isqlコマンドはunixODBCのコマンドラインツールを必要とします。
アプリケーションで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 -v FabricDSN
単一のクエリを実行します:
echo "SELECT 1 AS test" | isql -v FabricDSN -b
大規模な結果セットの作業
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_BINARY |
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 | OpenSSLとRS256およびPEMまたはPFXファイル |
| 対話型認証 | ブラウザウィンドウ | ヘッドレスサーバーでは利用できません |
| 梱包 | MSI インストーラ | Linuxパッケージ |
Troubleshooting
運転手が見つからない
問題: [IM002] Data source name not found and no default driver specifiedで接続が失敗します。
解決策:
- 運転者登録証は
odbcinst -q -dで確認してください。 -
/usr/lib/libmicrosoftfabricodbc.soが存在することを確認します。 - ドライバーを登録するには
sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template。 -
sudo dpkg -i microsoft-fabric-odbc-driver-1.0.0-Linux.debを実行してパッケージを再インストールしてください。
DSN が見つかりません
問題: [IM002] Data source name not foundで接続が失敗します。
解決策:
- DSNの設定は
odbcinst -q -sを実行して確認してください。 -
~/.odbc.iniまたはDSNのセクションが含まれているか/etc/odbc.ini確認してください。 -
Driverの価値が登録されたドライバー名と正確に一致していることを確認してください。
接続の失敗
問題:ドライバーがFabricに接続できません。
解決策:
- ワークスペースIDとレイクハウスIDが有効なGUIDであることを確認しましょう。
- 認証Azure CLI
az account showを実行してください。 - 必要なFabricワークスペースの権限を持っていることを確認してください。
- ネットワーク接続とプロキシ設定を確認してください。
認証エラー
問題:Azure CLI 認証失敗。
解決策:
- 認証情報を更新するために
az loginを実行してください。 -
az account set --subscription <subscription-id>を実行して正しいサブスクリプションを設定しましょう。 -
az account get-access-token --resource https://api.fabric.microsoft.comを走ってトークンを確認してください。 - アカウントに必要なFabricワークスペース権限を持っていることを確認してください。
共有ライブラリエラー
問題:運転手が error while loading shared libraries: libmicrosoftfabricodbc.soを報告しています。
解決策:
-
sudo dpkg -i microsoft-fabric-odbc-driver-1.0.0-Linux.debを実行してパッケージを再インストールしてください。 -
/usr/lib/libmicrosoftfabricodbc.soが存在することを確認します。 - 共有ライブラリキャッシュをリフレッシュするには
sudo ldconfigを実行してください。
クエリのタイムアウト
問題:クエリは大きなテーブルでタイムアウトします。
解決策:
- 接続文字列に
LargeTableSupport=trueを追加します。 - 結果のサイズに合わせて
PageSizeBytesを調整してください。 - 接続文字列に
EnableAsyncPrefetch=1を追加します。 -
LIMIT節を使って結果のサイズを制限してください。
ログ記録を有効にする
DSNで詳細なログ記録を有効にする:
[FabricDSN]
LogLevel = DEBUG
LogFile = /tmp/fabric_odbc_debug.log
あるいは、接続文字列にログパラメータを追加することもできます:
LogLevel=DEBUG;LogFile=/tmp/fabric_odbc_debug.log;
ドライバーは以下のログレベルをサポートしています:
-
TRACE: すべてのAPIコールを含みます。 -
DEBUG詳細なデバッグ情報を含む。 -
INFO: 一般情報が含まれ、デフォルトです。 -
WARN警告のみを含みます。 -
ERROR: 誤りのみを含みます。
unixODBCトレーシングを有効にする
低レベルのODBCコール診断では、 /etc/odbcinst.iniに以下の構成を追加してください:
[ODBC]
Trace = yes
TraceFile = /tmp/odbc_trace.log
トラブルシューティングが終わったら、不要なパフォーマンス負荷を避けるためにトレーシングをオフにしてください。