หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
ODBC (Open Database Connectivity) เป็นมาตรฐานที่นํามาใช้อย่างแพร่หลาย ซึ่งช่วยให้แอปพลิเคชันไคลเอ็นต์สามารถเชื่อมต่อและทํางานกับข้อมูลจากฐานข้อมูลและแพลตฟอร์มข้อมูลขนาดใหญ่ได้
Microsoft ODBC Driver for Fabric Data Engineering ช่วยให้คุณเชื่อมต่อ สืบค้น และจัดการงาน Spark ใน Fabric ด้วยความน่าเชื่อถือและความเรียบง่ายของมาตรฐาน ODBC ไดรเวอร์นี้สร้างขึ้นบน Fabric Livy APIs เพื่อให้การเชื่อมต่อ Spark SQL ที่ปลอดภัยและยืดหยุ่นกับแอปพลิเคชัน C/C++, .NET, Python และแอปพลิเคชันและเครื่องมือ BI ที่รองรับ ODBC อื่น ๆ
คุณลักษณะสำคัญ
- สอดคล้องกับ ODBC 3.x: การใช้งานข้อกําหนด ODBC 3.x อย่างเต็มรูปแบบ
- การรับรองความถูกต้อง Microsoft Entra ID: โฟลว์การรับรองความถูกต้องหลายขั้นตอน รวมถึงการรับรองความถูกต้องของ Azure CLI, อินเทอร์แอคทีฟ, ข้อมูลประจําตัวของไคลเอ็นต์, ตามใบรับรอง และการรับรองความถูกต้องของโทเค็นการเข้าถึง
- รองรับการสืบค้น Spark SQL: การดําเนินการโดยตรงของคําสั่ง Spark SQL
- รองรับประเภทข้อมูลที่ครอบคลุม: รองรับประเภทข้อมูล Spark SQL ทั้งหมด รวมถึงประเภทที่ซับซ้อน (ARRAY, MAP, STRUCT)
- การนําเซสชันกลับมาใช้ใหม่: การจัดการเซสชันในตัวเพื่อประสิทธิภาพที่ดีขึ้น
- โหมดการทํางานพร้อมกันสูง: เลือกเข้าร่วมเซสชัน Livy ฝั่งเซิร์ฟเวอร์ที่แชร์และอบอุ่นเพื่อลดความหน่วงเวลาการเริ่มต้นเชื่อมต่อและการกระจายคลัสเตอร์ของ Spark
- รองรับตารางขนาดใหญ่: การจัดการที่ปรับให้เหมาะสมสําหรับชุดผลลัพธ์ขนาดใหญ่ที่มีขนาดหน้าเว็บที่กําหนดค่าได้
- การดึงข้อมูลล่วงหน้าแบบอะซิงโครนัส: การโหลดข้อมูลเบื้องหลังเพื่อประสิทธิภาพที่ดีขึ้น
- การสนับสนุนพร็อกซี: การกําหนดค่าพร็อกซี HTTP สําหรับสภาพแวดล้อมขององค์กร
- รองรับบ้านพักริมทะเลสาบแบบหลายสคีมา: เชื่อมต่อกับสคีมาเฉพาะภายในบ้านพักริมทะเลสาบ
- การผสานรวม OneLake: เข้าถึงข้อมูลบ้านทะเลสาบที่เก็บไว้ใน OneLake รวมถึงตารางจากหลายสคีมา ผ่านอินเทอร์เฟซ ODBC แบบรวมศูนย์โดยไม่ต้องกําหนดค่าจัดเก็บแยกต่างหาก
- การสนับสนุนรายการสภาพแวดล้อม: แนบรายการสภาพแวดล้อม Fabric ระหว่างการดําเนินการงานเพื่อใช้ไลบรารีพื้นที่ทํางาน คุณสมบัติ Spark และตัวแปรกับแต่ละเซสชัน
- การกําหนดค่า Spark แบบกําหนดเอง: ส่งผ่านคุณสมบัติการกําหนดค่า Spark โดยตรงผ่าน สายอักขระการเชื่อมต่อ เพื่อปรับแต่งลักษณะการทํางานของเซสชัน
Note
ใน Apache Spark แบบโอเพ่นซอร์ส ฐานข้อมูลและสคีมาจะถูกใช้เหมือนกัน ตัวอย่างเช่น การรันSHOW SCHEMASหรือSHOW DATABASESในสมุดบันทึก Fabric จะได้ผลลัพธ์เดียวกัน — คือรายการสคีมาทั้งหมดในบ้านพักริมทะเลสาบ
ข้อกำหนดเบื้องต้น
ก่อนใช้โปรแกรมควบคุม Microsoft ODBC สําหรับ Microsoft Fabric Data Engineering ตรวจสอบให้แน่ใจว่าคุณมี:
- ระบบปฏิบัติการ: Windows 10/11 หรือ Windows Server 2016+
- การเข้าถึง Fabric: การเข้าถึงพื้นที่ทํางาน Fabric
- Microsoft Entra ID credentials: ข้อมูลประจําตัวที่เหมาะสมสําหรับการรับรองความถูกต้อง
- รหัสพื้นที่ทํางานและบ้านพักริมทะเลสาบ: ตัวระบุ GUID สําหรับพื้นที่ทํางาน Fabric และบ้านพักริมทะเลสาบของคุณ
- Azure CLI (ไม่บังคับ): จําเป็นสําหรับวิธีการรับรองความถูกต้องของ Azure CLI
ดาวน์โหลดและติดตั้ง MSI
- ดาวน์โหลดโปรแกรมควบคุม Microsoft ODBC สําหรับแพคเกจ MSI วิศวกรรมข้อมูล Microsoft Fabric
- ดับเบิลคลิก
MicrosoftFabricODBCDriver-2.0.msi - ทําตามวิซาร์ดการติดตั้งและยอมรับข้อตกลงใบอนุญาต
- เลือกไดเร็กทอรีการติดตั้ง (ค่าเริ่มต้น:
C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\) - ทําการติดตั้งให้เสร็จสมบูรณ์
การติดตั้งแบบเงียบ
# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet
# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log
ตรวจสอบการติดตั้ง
หลังการติดตั้ง ให้ตรวจสอบว่าไดรเวอร์ลงทะเบียนแล้ว:
- เรียกใช้
odbcad32.exe(ผู้ดูแลระบบแหล่งข้อมูล ODBC) - ไปที่แท็บไดรเวอร์
- ตรวจสอบว่า "โปรแกรมควบคุม Microsoft ODBC สําหรับวิศวกรรมข้อมูล Microsoft Fabric" แสดงอยู่ในรายการ
ตัวอย่างการเริ่มต้นอย่างรวดเร็ว
ตัวอย่างนี้แสดงวิธีเชื่อมต่อกับ Fabric และดําเนินการคําสั่งโดยใช้ไดรเวอร์ Microsoft ODBC สําหรับ Microsoft Fabric Data Engineering ก่อนเรียกใช้รหัสนี้ ตรวจสอบให้แน่ใจว่าคุณได้ทําตามข้อกําหนดเบื้องต้นและติดตั้งไดรเวอร์แล้ว
ตัวอย่าง C/C++
#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
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
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));
}
รูปแบบสตริงการเชื่อมต่อ
สตริงการเชื่อมต่อพื้นฐาน
โปรแกรมควบคุม Microsoft ODBC สําหรับวิศวกรรมข้อมูล Microsoft Fabric ใช้รูปแบบสายอักขระการเชื่อมต่อต่อไปนี้:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};<parameter1>=<value1>;<parameter2>=<value2>;...
ส่วนประกอบสตริงการเชื่อมต่อ
| ส่วนประกอบ | คำอธิบาย | ตัวอย่าง |
|---|---|---|
| คนขับรถ | ตัวระบุโปรแกรมควบคุม ODBC | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
| WorkspaceId | ตัวระบุพื้นที่ทํางาน Fabric (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| LakehouseId | รหัสบ้านพักริมทะเลสาบ Fabric (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| ออธโฟลว์ | วิธีการรับรองความถูกต้อง |
AZURE_CLI, INTERACTIVE, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE, ACCESS_TOKENFILE_TOKEN |
ตัวอย่างสตริงการเชื่อมต่อ
การเชื่อมต่อพื้นฐาน (การรับรองความถูกต้อง Azure CLI)
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=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
ดูส่วน High-Concurrency (HC) Mode สําหรับคําแนะนําการตั้งค่าอย่างละเอียด
การรับรองความถูกต้อง
โปรแกรมควบคุม Microsoft ODBC สําหรับวิศวกรรมข้อมูล Microsoft Fabric สนับสนุนวิธีการรับรองความถูกต้องหลายวิธีผ่าน Microsoft Entra ID (เดิมคือ Azure Active Directory) การรับรองความถูกต้องถูกกําหนดค่าโดยใช้ AuthFlow พารามิเตอร์ในสตริงการเชื่อมต่อ
วิธีการรับรองความถูกต้อง
| ค่า AuthFlow | คำอธิบาย |
|---|---|
CLIENT_CREDENTIAL (0) |
Service Principal ที่มีความลับของลูกค้า ชื่อเล่น: CLIENT_SECRET_CREDENTIAL. |
BROWSER_BASED (1) |
การตรวจสอบสิทธิ์ผ่านเบราว์เซอร์แบบโต้ตอบ ชื่อเล่น: INTERACTIVE. |
AZURE_CLI (2) |
การพัฒนาโดยใช้ข้อมูลรับรอง Azure CLI |
CLIENT_CERTIFICATE_CREDENTIAL (3) |
Service Principal พร้อมใบรับรอง ชื่อเล่น: CLIENT_CERTIFICATE. |
AUTH_ACCESS_TOKEN (4) |
โทเค็นเข้าถึงแบบ bearer ที่ได้มาล่วงหน้า ชื่อเล่น: ACCESS_TOKEN. |
FILE_TOKEN (5) |
อ่านโทเค็นการตรวจสอบสิทธิ์จากไฟล์ |
คุณสามารถระบุค่าการตรวจสอบสิทธิ์ในรูปแบบตัวพิมพ์ใหญ่ snake case, Pascal case หรือรูปแบบตัวเลข ไดรเวอร์ยังรับนามแฝงสั้น ๆ เช่น Browser, Interactive, CLI, Certificate, Token, และFile ไดรเวอร์จะไม่สนใจขีดล่างเมื่อเปรียบเทียบค่าต่าง ๆ
การรับรองความถูกต้องของ Azure CLI
ดีที่สุดสําหรับ: การพัฒนาและแอปพลิเคชันแบบโต้ตอบ
# 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)
ข้อกําหนดเบื้องต้น:
- ติดตั้ง Azure CLI:
az --version - เข้าสู่ระบบ:
az login
การรับรองความถูกต้องของเบราว์เซอร์แบบโต้ตอบ
ดีที่สุดสําหรับ: แอปพลิเคชันที่ต้องเผชิญหน้ากับผู้ใช้
# 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)
ลักษณะการทํางาน:
- เปิดหน้าต่างเบราว์เซอร์สําหรับการตรวจสอบผู้ใช้
- ข้อมูลประจําตัวจะถูกแคชสําหรับการเชื่อมต่อที่ตามมา
การรับรองความถูกต้องของข้อมูลประจําตัวไคลเอ็นต์ (บริการหลัก)
ดีที่สุดสําหรับ: บริการอัตโนมัติและงานเบื้องหลัง
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: รหัสผู้เช่า Azure -
ClientId: รหัสแอปพลิเคชัน (ไคลเอ็นต์) จาก Microsoft Entra ID -
ClientSecret: ข้อมูลลับของไคลเอ็นต์จาก Microsoft Entra ID
แนวทางปฏิบัติที่ดีที่สุด
- จัดเก็บข้อมูลลับอย่างปลอดภัย (Azure Key Vault, ตัวแปรสภาพแวดล้อม)
- ใช้ข้อมูลประจําตัวที่มีการจัดการเมื่อเป็นไปได้
- หมุนเวียนความลับอย่างสม่ําเสมอ
การรับรองความถูกต้องตามใบรับรอง
ดีที่สุดสําหรับ: แอปพลิเคชันระดับองค์กรที่ต้องการการรับรองความถูกต้องตามใบรับรอง
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>;"
)
พารามิเตอร์ที่จําเป็น:
-
TenantId: รหัสผู้เช่า Azure -
ClientId: รหัสแอปพลิเคชัน (ไคลเอ็นต์) -
CertificatePath: เส้นทางไปยังไฟล์ใบรับรอง PFX/PKCS12 -
CertificatePassword: รหัสผ่านใบรับรอง
การรับรองความถูกต้องของโทเค็นการเข้าถึง
ดีที่สุดสําหรับ: สถานการณ์การรับรองความถูกต้องแบบกําหนดเอง
# 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};"
)
การตรวจสอบสิทธิ์โทเค็นไฟล์
ใช้การตรวจสอบสิทธิ์โทเค็นไฟล์สําหรับสภาพแวดล้อมแบบคอนเทนเนอร์และ pipeline อัตโนมัติที่กระบวนการอื่นเขียนโทเค็นแบร์เลอร์ลงในไฟล์โทเค็นที่รู้จักกันดีของไดรเวอร์:
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=FILE_TOKEN;"
)
ไดรเวอร์จะแก้ไขตําแหน่งไฟล์โทเค็นบน Windows และ Linux
ชื่อปลอมของคุณสมบัติข้ามไดรเวอร์
ไดรเวอร์ ODBC รับชื่อคุณสมบัติ ADO.NET และ JDBC ที่เลือกไว้ นอกเหนือจากชื่อ ODBC ดั้งเดิม การรองรับนี้ช่วยลดการเปลี่ยนแปลงของสายเชื่อมต่อเมื่อคุณสลับระหว่างไดรเวอร์ Fabric
| คุณสมบัติ ADO.NET หรือ JDBC | เทียบเท่า ODBC |
|---|---|
FabricWorkspaceID |
WorkspaceId |
FabricLakehouseID |
LakehouseId |
LivySessionTimeoutSeconds |
หมดเวลาการเชื่อมต่อ |
LivyStatementTimeoutSeconds |
คำสั่งหมดเวลา |
ConnectionPoolEnabled |
เปิดใช้งานพูล |
ไดรเวอร์จะแก้ไขนามแฝงข้ามไดรเวอร์ 17 รายการในขณะเชื่อมต่อ
พารามิเตอร์การกําหนดค่า
พารามิเตอร์ที่ต้องการ
พารามิเตอร์เหล่านี้ต้องมีอยู่ในทุกสตริงการเชื่อมต่อ:
| พารามิเตอร์ | ประเภท | คำอธิบาย | ตัวอย่าง |
|---|---|---|---|
| WorkspaceId | ยูอี | ตัวระบุพื้นที่ทํางานของ Fabric | 4bbf89a8-... |
| LakehouseId | ยูอี | รหัสบ้านพักริมทะเลสาบ Fabric | d8faa650-... |
| ออธโฟลว์ | สตริง | ชนิดโฟลว์การรับรองความถูกต้อง | AZURE_CLI |
พารามิเตอร์เพิ่มเติม
การตั้งค่าการเชื่อมต่อ
| พารามิเตอร์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ฐานข้อมูล | สตริง | ไม่มี | ฐานข้อมูลเริ่มต้นสําหรับโหมดคลาสสิก โหมด HC จะไม่ทํางานโดยอัตโนมัติ;ทํางาน USE <database> หลังจากเชื่อมต่อหรือใช้ชื่อตารางที่สมบูรณ์ |
| ขอบเขต | สตริง | https://api.fabric.microsoft.com/.default |
ขอบเขต OAuth |
การตั้งค่าประสิทธิภาพ
| พารามิเตอร์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ใช้ซ้ําเซสชัน | แบบบูลีน | true |
นําเซสชัน Spark ที่มีอยู่กลับมาใช้ใหม่ |
| LargeTable รองรับ | แบบบูลีน | false |
เปิดใช้งานการเพิ่มประสิทธิภาพสําหรับชุดผลลัพธ์ขนาดใหญ่ |
| เปิดใช้งาน AsyncPrefetch | แบบบูลีน | false |
เปิดใช้งานการดึงข้อมูลพื้นหลังล่วงหน้า |
| เพจไซส์ไบต์ | จำนวนเต็ม |
18874368 (18 MB) |
ขนาดหน้าสําหรับการแบ่งหน้าผลลัพธ์ (1-18 MB) |
การตั้งค่าการบันทึก
| พารามิเตอร์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ระดับบันทึก | สตริง | INFO |
ระดับลอการิทึม: DEBUG, INFO, WARN, หรือ ERROR. ใช้ DEBUG สําหรับการวินิจฉัยไดรเวอร์อย่างละเอียด |
| ไฟล์บันทึก | สตริง | odbc_driver.log |
เส้นทางไฟล์บันทึก (สัมบูรณ์หรือสัมพัทธ์) |
การตั้งค่าพร็อกซี
| พารามิเตอร์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| ใช้พร็อกซี | แบบบูลีน | false |
เปิดใช้พร็อกซี |
| พร็อกซีโฮสต์ | สตริง | ไม่มี | ชื่อโฮสต์พร็อกซี |
| พร็อกซีพอร์ต | จำนวนเต็ม | ไม่มี | พอร์ตพร็อกซี |
| พร็อกซีชื่อผู้ใช้ | สตริง | ไม่มี | ชื่อผู้ใช้การรับรองความถูกต้องของพร็อกซี |
| พร็อกซีรหัสผ่าน | สตริง | ไม่มี | รหัสผ่านการรับรองความถูกต้องของพร็อกซี |
การตั้งค่าความพร้อมกันสูง (HC)
ใช้พารามิเตอร์เหล่านี้เพื่อเปิดและกําหนดค่าโหมด high-concurrency (HC) โหมด HC คือโหมดเลือกเข้าร่วม หากคุณไม่ได้ตั้งค่า LivyMode หรือ UseHighConcurrency, ไดรเวอร์จะใช้เส้นทางเซสชันเดียวแบบคลาสสิก สําหรับคําแนะนําและตัวอย่าง ดูที่ โหมด High-concurrency (HC)
| พารามิเตอร์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
LivyMode |
สตริง | ไม่ได้ตั้งค่า | ควบคุมการเก็บข้อมูลเซสชัน ค่าที่รองรับคือ Classic, HighConcurrencyและAuto
Auto ปัจจุบันใช้เส้นทางคลาสสิก |
UseHighConcurrency |
แบบบูลีน | false |
เปิดใช้งานโหมด HC เป็นทางเลือกแทนการตั้งค่า LivyMode=HighConcurrency. |
SessionTag |
สตริง | ไม่มี | ให้คําแนะนําการบรรจุฝั่งเซิร์ฟเวอร์ การเชื่อมต่อต้องใช้การตั้งค่าฝั่งเซิร์ฟเวอร์ที่ตรงกันเพื่อแชร์เซสชัน Livy ที่อุ่น |
IdempotencyKey |
สตริง | ไม่มี | ให้คีย์ที่สร้างโดยไคลเอนต์สําหรับการพยายามรับ HC ใหม่อย่างปลอดภัย ไดรเวอร์จะตรวจสอบชุดอักขระและไม่เคยบันทึกค่า |
EnvironmentId |
สตริง | ไม่มี | ระบุตัวระบุสภาพแวดล้อม Fabric ที่ส่งตามspark.fabric.environmentDetailsการกําหนดค่าการได้ HC |
HeartbeatTimeoutInSecond |
จำนวนเต็ม | ค่าเริ่มต้นของเซิร์ฟเวอร์ | ตั้งค่าเวลาว่างของเซสชัน HC ฝั่งเซิร์ฟเวอร์เป็นวินาที ค่าต้องเป็นจํานวนเต็มบวก |
AcquireTimeoutSeconds |
จำนวนเต็ม | 300 |
ตั้งค่าระยะเวลาที่ไดรเวอร์รอให้เซสชัน HC ถึง Idle สถานะ เป็นวินาที ค่าต้องเป็นจํานวนเต็มบวก |
conf.<key> |
สตริง | ไม่มี | ระบุการแทนที่การกําหนดค่า Spark ที่ส่งในคําขอ HC acquisition ตัวอย่างเช่น: conf.spark.sql.shuffle.partitions=200 |
ลําดับความสําคัญของโหมดและการตรวจสอบความถูกต้อง
-
LivyModeจะมีความสําคัญมากกว่าUseHighConcurrencyเมื่อคุณตั้งค่าพารามิเตอร์ทั้งสอง - ค่าพารามิเตอร์ไม่แยกตัวพิมพ์ใหญ่-เล็ก
-
UseHighConcurrencyรับtrue,1,yes, หรือonเพื่อเปิดใช้งานโหมด HC มันยอมรับfalse,0,no, หรือoffเพื่อปิดใช้งานโหมด HC - สําหรับค่าที่ไม่ว่างอื่น ๆ จะ
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 และ connection-string เท่านั้น
การตั้งค่าสภาพแวดล้อม
คุณสามารถแนบรายการสภาพแวดล้อม Fabric กับเซสชัน Spark ที่เริ่มต้นโดยโปรแกรมควบคุม ไลบรารี คุณสมบัติ Spark และตัวแปรของสภาพแวดล้อมที่เลือกจะถูกนําไปใช้โดยอัตโนมัติเมื่อมีการสร้างเซสชัน
| พารามิเตอร์ | ประเภท | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| EnvironmentId | ยูอี | ไม่มี | ตัวระบุรายการสภาพแวดล้อม Fabric (GUID) ที่จะนําไปใช้ระหว่างการสร้างเซสชัน Spark |
ตัวอย่าง สายอักขระการเชื่อมต่อ ที่มีรายการสภาพแวดล้อม:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;EnvironmentId=<environment-id>
Note
สภาพแวดล้อมจะถูกนําไปใช้เมื่อเซสชัน Spark เริ่มต้นขึ้น หากคุณระบุคุณสมบัติการกําหนดค่า Spark แบบกําหนดเองด้วย คุณสมบัติระดับเซสชันจะมีความสําคัญเหนือค่าเริ่มต้นของสภาพแวดล้อม
การกําหนดค่า Spark แบบกําหนดเอง
คุณสามารถส่งผ่านคุณสมบัติการกําหนดค่า Spark ได้โดยตรงใน สายอักขระการเชื่อมต่อ พารามิเตอร์ใดๆ ที่นําหน้า ด้วย spark. จะถูกนําไปใช้กับเซสชัน Spark โดยอัตโนมัติในเวลาที่สร้าง ซึ่งช่วยให้คุณสามารถแทนที่ค่าเริ่มต้นของพื้นที่ทํางานหรือรันไทม์ได้
ตัวอย่างการกําหนดค่า Spark:
spark.sql.shuffle.partitions=200
spark.sql.adaptive.enabled=true
spark.sql.autoBroadcastJoinThreshold=10485760
ตัวอย่าง สายอักขระการเชื่อมต่อ ที่มีคุณสมบัติ Spark ที่กําหนดเอง:
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
Note
คุณสมบัติการกําหนดค่า Spark จะถูกนําไปใช้เมื่อสร้างเซสชัน ใช้กับคิวรีทั้งหมดที่ทํางานภายในเซสชันนั้น และแทนที่สภาพแวดล้อมหรือค่าเริ่มต้นรันไทม์สําหรับคุณสมบัติเดียวกัน
โหมดการทํางานพร้อมกันสูง (HC)
โหมด High-concurrency (HC) ช่วยให้การเชื่อมต่อ ODBC ไปยังพื้นที่ทํางานเดียวกันและ lakehouse เชื่อมต่อกับเซสชัน Livy Spark ฝั่งเซิร์ฟเวอร์ที่แชร์และอบอุ่น แทนที่จะต้องจัดคลัสเตอร์แยกสําหรับแต่ละการเชื่อมต่อ ใช้สําหรับงาน เช่น แดชบอร์ด BI, เคอร์เนลโน้ตบุ๊ก และ ETL fan-out ที่เปิดการเชื่อมต่อระยะสั้นจํานวนมากและสามารถแชร์ความจุ Spark ที่จัดการโดยเซิร์ฟเวอร์ได้
โหมด HC คือโหมดเลือกเข้าร่วม หากคุณไม่ได้กําหนดค่า HC ไดรเวอร์จะใช้เส้นทางเซสชันเดียวแบบคลาสสิก
เลือกโหมดการเชื่อมต่อ
ใช้โหมด HC เมื่อ:
- ภาระงานของคุณจะเปิดการเชื่อมต่อ ODBC ที่มีอายุสั้นหลายรายการ เช่น แดชบอร์ด BI, เคอร์เนลโน้ตบุ๊ก หรือการออก ETL
- การเชื่อมต่อจะมุ่งเป้าไปที่พื้นที่ทํางานเดียวกันและบ้านริมทะเลสาบเดียวกัน และสามารถแชร์เซสชัน Spark ที่จัดการโดยเซิร์ฟเวอร์ได้
- การลดความหน่วงเวลาการเริ่มต้นแบบเย็นต่อการเชื่อมต่อเป็นสิ่งสําคัญ
ใช้โหมดคลาสสิกเมื่อ:
- แต่ละการเชื่อมต่อต้องการเซสชัน Spark แยกเนื่องจากการตั้งค่า Spark ที่แตกต่างกันหรือการแยกทรัพยากรอย่างเคร่งครัด
- จุดสิ้นสุด Fabric Livy สําหรับพื้นที่ทํางานเป้าหมายและ lakehouse ไม่รองรับโหมด HC
เปิดใช้งานโหมดการทํางานพร้อมกันสูง
เพิ่มพารามิเตอร์โหมด high-concurrency ลงใน 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 บันทึกความล้มเหลวในการตรวจสอบและใช้โหมดคลาสสิก
Note
ถ้าคุณตั้งค่าพารามิเตอร์LivyModeทั้งสอง จะมีลําดับความสําคัญเหนือUseHighConcurrency
พารามิเตอร์ที่จําเป็นในโหมด HC
การเปิดใช้งาน HC ต้องใช้ตัวระบุที่ถูกต้องดังต่อไปนี้:
| พารามิเตอร์ | หมายเหตุ |
|---|---|
WorkspaceId |
ต้องเป็น GUID พื้นที่ทํางาน Fabric ที่ถูกต้อง |
LakehouseId |
ต้องมี GUID ของ Fabric lakehouse ที่ถูกต้อง |
รวม SessionTag เพราะมีผลต่อการจับคู่ฝั่งเซิร์ฟเวอร์สําหรับเซสชันที่ร้อน
การจับคู่เซสชัน
โหมด HC ไม่ได้รับประกันว่าทุกการเชื่อมต่อจะกลับมาใช้เซสชันเดิมซ้ํา สําหรับแต่ละคําขอการเก็บเซสชัน ไดรเวอร์จะส่ง:
- คุณค่า
SessionTag - การกําหนดค่าประกายไฟที่มีประสิทธิภาพ รวมถึง
conf.*การตั้งค่าและEnvironmentId
บริการ Fabric Livy จะประเมินค่าเหล่านี้และตัดสินใจว่าจะเชื่อมต่อกับเซสชันอุ่นหรือสร้างเซสชันใหม่ เพื่อปรับปรุงการนําเซสชันกลับมาใช้ใหม่ ให้ใช้ค่าที่สอดคล้องกันระหว่างการเชื่อมต่อที่มีวัตถุประสงค์เพื่อแบ่งปันความจุ Spark ที่จัดการโดยเซิร์ฟเวอร์
ตัวอย่างสตริงการเชื่อมต่อ
การเชื่อมต่อ HC น้อยที่สุด (Azure CLI auth):
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
HC กับการขอเวลานอกที่ปรับจูน:
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 กับ environment และ Spark conf จะยกเลิก:
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 ใน DSN
คุณสามารถเก็บการตั้งค่า HC ไว้ใน DSN แทนที่จะต้องซ้ํากันในแต่ละ สายอักขระการเชื่อมต่อ เมื่อ สายอักขระการเชื่อมต่อ ไม่ได้ระบุค่า ไดรเวอร์จะอ่านการตั้งค่าเหล่านี้จาก DSN:
LivyModeUseHighConcurrencyEnvironmentIdSessionTagIdempotencyKeyHeartbeatTimeoutInSecondAcquireTimeoutSeconds
ไดรเวอร์ยังอ่านเฉพาะ TenantPrincipal ความเข้ากันได้และ PoolMax การตั้งค่าต่าง ๆ ด้วย หากต้องการบันทึกการตั้งค่าเหล่านี้ ให้แก้ไข DSN ใน odbcad32.exe หรือใช้ SQLWritePrivateProfileString. ใช้ชื่อพารามิเตอร์ในตารางการตั้งค่า HC
สำคัญ
ไดรเวอร์จะไม่อ่าน conf.* การตั้งค่า Spark ที่ override จาก DSN เพิ่มข้อมูลเหล่านี้ลงใน สายอักขระการเชื่อมต่อ ขณะรันไทม์ หรือฉีดข้อมูลก่อนเรียกใช้งานSQLDriverConnect
ปิดโหมด HC
คุณสามารถปิดการรับเซสชัน HC ใหม่ได้โดยไม่ต้องปรับใช้ไดรเวอร์ใหม่ ใช้วิธีการที่สอดคล้องกับวิธีที่คุณเปิดใช้งานโหมด HC:
| แหล่งที่มาการกําหนดค่า HC | วิธีปิดโหมด HC |
|---|---|
| เฉพาะตัวแปรสภาพแวดล้อม | ตั้งค่า FABRIC_ODBC_USE_HC=false, หรือลบตัวแปร |
| ดีเอสเอ็น | เซตLivyMode=Classic อีกทางเลือกหนึ่งคือ ลบ LivyMode และตั้งค่า UseHighConcurrency=false. |
| สตริงการเชื่อมต่อ | ตั้งค่า LivyMode=Classic, หรือลบพารามิเตอร์ HC |
การตั้งค่า connection-string และ DSN มีความสําคัญเหนือ fallback ของตัวแปรสภาพแวดล้อม การเปลี่ยนแปลงเหล่านี้มีผลเฉพาะกับการเชื่อมต่อใหม่เท่านั้น เซสชัน HC ที่มีอยู่จะดําเนินต่อไปจนกว่าจะปล่อยออกมา
เข้าใจพฤติกรรมรันไทม์ของ HC
- การตรวจสอบความถูกต้อง:
SQLDriverConnectปฏิเสธค่าบูลีน HC และค่าจํานวนเต็มบวกที่ไม่ถูกต้องด้วย SQLSTATEHY024มันปฏิเสธค่าที่ไม่ถูกต้องLivyModeและผิดปกติ หรือมีขนาดใหญ่WorkspaceIdLakehouseIdเกิน , และIdempotencyKeyค่าที่มี SQLSTATEHY000ค่าความเข้ากันได้TenantPrincipalที่ใหญ่เกินก็จะคืนค่าHY000สําหรับ DSN เท่านั้นSQLConnectไดรเวอร์จะบันทึกความล้มเหลวในการตรวจสอบ HC ปกติและใช้โหมดคลาสสิก ค่าที่มีความสําคัญต่อความปลอดภัยที่ใหญ่เกินก็ยังล้มเหลวในการเชื่อมต่อ -
ข้อมูลที่ละเอียดอ่อน: ไดรเวอร์จะยกเว้นหรือลบ
IdempotencyKeyข้อมูลและฟิลด์ที่ละเอียดอ่อนอื่น ๆ ออกจากบันทึก HC และผลลัพธ์การวินิจฉัย - การยกเลิก: การยกเลิกใบแจ้งยอดเป็นแบบร่วมมือ งานเซิร์ฟเวอร์ที่กําลังดําเนินอยู่จะจบลงอย่างราบรื่นแทนที่จะถูกยกเลิกทันที
- เบรกเกอร์วงจร: โหมด HC และ Classic ใช้เบรกเกอร์วงจรแยกกัน การใช้โหมดหนึ่งจนหมดจะไม่ส่งผลกระทบต่ออีกโหมดหนึ่ง
-
ฐานข้อมูลเริ่มต้น: การเชื่อมต่อ HC จะไม่รันคําสั่งเริ่มต้น
USEสําหรับDatabaseพารามิเตอร์ เรียกใช้USE <database>หลังจากเชื่อมต่อหรือใช้ชื่อตารางที่มีคุณสมบัติครบถ้วน -
การวินิจฉัย: ตั้งค่า
LogLevel=DEBUGให้บันทึกการได้มาซึ่ง HC, การสํารวจ, การปล่อย และการตัดสินใจทําแผนที่ข้อผิดพลาด สําหรับการแก้ไขปัญหาเฉพาะจุด ให้ตั้งค่าLIVY_HC_VERBOSE=1ให้รวมการวินิจฉัย HC HTTP ที่ถูกลบเพิ่มเติม
กําหนดค่า DSN
สร้าง DSN ของระบบ
เปิดผู้ดูแลระบบ ODBC
%SystemRoot%\System32\odbcad32.exeสร้าง DSN ระบบใหม่
- ไปที่แท็บ "System DSN"
- เลือก "เพิ่ม"
- เลือก "Microsoft ODBC Driver for Microsoft Fabric Data Engineering"
- เลือก "เสร็จสิ้น"
กําหนดการตั้งค่า DSN
-
ชื่อแหล่งข้อมูล: ป้อนชื่อที่ไม่ซ้ํากัน (เช่น
FabricODBC) - คําอธิบาย: คําอธิบายเพิ่มเติม
- รหัสพื้นที่ทํางาน: GUID พื้นที่ทํางาน Fabric ของคุณ
- รหัสเลคเฮาส์: GUID เลคเฮาส์ผ้าของคุณ
- การรับรองความถูกต้อง: เลือกวิธีการรับรองความถูกต้อง
- รหัสสภาพแวดล้อม (ไม่บังคับ): ป้อน GUID ของรายการสภาพแวดล้อม Fabric ที่จะแนบระหว่างการสร้างเซสชัน
-
โหมด Livy (ไม่บังคับ): ตั้งค่าเป็น
HighConcurrencyเพื่อเปิดใช้งานโหมด HC - แท็กเซสชัน (ไม่บังคับ): ป้อนป้ายกํากับปฏิบัติการที่ไม่ละเอียดอ่อนสําหรับการจับคู่เซสชัน HC
- กําหนดการตั้งค่าเพิ่มเติมตามต้องการ
-
ชื่อแหล่งข้อมูล: ป้อนชื่อที่ไม่ซ้ํากัน (เช่น
ทดสอบการเชื่อมต่อ
- เลือก "ทดสอบการเชื่อมต่อ" เพื่อตรวจสอบการตั้งค่า
- เลือก "ตกลง" เพื่อบันทึก
ใช้ DSN ในแอปพลิเคชัน
# Python - Connect using DSN
conn = pyodbc.connect("DSN=FabricODBC")
// .NET - Connect using DSN
using var connection = new OdbcConnection("DSN=FabricODBC");
await connection.OpenAsync();
ตัวอย่างการใช้
การเชื่อมต่อและแบบสอบถามพื้นฐาน
หลาม
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));
}
}
}
}
การทํางานกับชุดผลลัพธ์ขนาดใหญ่
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
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;
}
ใช้ executeDml ร่วมกับ INSERT, UPDATE, หรือ DELETE ข้อความ จํานวนแถวที่รายงานขึ้นอยู่กับว่าผลลัพธ์มีจํานวนการอัปเดตที่ไดรเวอร์รับรู้หรือไม่
การค้นพบสคีมา
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()
การแมปชนิดข้อมูล
โปรแกรมควบคุมแมปชนิดข้อมูล Spark SQL กับชนิด ODBC SQL:
| ประเภท Spark SQL | ชนิด ODBC SQL | ประเภท C/C++ | ประเภท Python | ประเภท .NET |
|---|---|---|---|---|
| บูลีน | SQL_BIT | SQLCHAR | bool | bool |
| ไบต์ | SQL_TINYINT | SQLSCHAR | int | เอสไบต์ |
| สั้น | SQL_SMALLINT | SQLSMALLINT | int | สั้น |
| INT | SQL_INTEGER | SQLINTEGER สแคว้น | int | int |
| ยาว | SQL_BIGINT | สโคลบิจินต์ | int | long |
| ลอย | SQL_REAL | SQLREAL | float | float |
| คู่ | SQL_DOUBLE | SQLDOUBLE | float | สองเท่า |
| ทศนิยม | SQL_DECIMAL | SQLCHAR* | ทศนิยม ทศนิยม | decimal |
| เชือก | SQL_VARCHAR | SQLCHAR* | str | สตริง |
| วาร์ชาร์(n) | SQL_VARCHAR | SQLCHAR* | str | สตริง |
| ชาร์(n) | SQL_CHAR | SQLCHAR* | str | สตริง |
| ไบ นารี | SQL_VARBINARY | SQLCHAR* | ไบต์ | ไบต์[] |
| วันที่ | SQL_TYPE_DATE | SQL_DATE_STRUCT | วันที่เวลา.วันที่ | DateTime |
| ประทับเวลา | SQL_TYPE_TIMESTAMP | SQL_TIMESTAMP_STRUCT | วันที่เวลา.วันที่เวลา | DateTime |
| อาร์เรย์ | SQL_VARCHAR | SQLCHAR* | str (JSON) | สตริง |
| แผนที่ | SQL_VARCHAR | SQLCHAR* | str (JSON) | สตริง |
| โครงสร้าง | SQL_VARCHAR | SQLCHAR* | str (JSON) | สตริง |
การรวมเครื่องมือ BI
ไมโครซอฟท์ เอ็กเซล
- เปิด Excel -> ข้อมูล -> รับข้อมูล -> จากแหล่งอื่น -> จาก ODBC
- เลือก DSN ที่คุณกําหนดค่าไว้ (เช่น
FabricODBC) - รับรองความถูกต้องหากได้รับแจ้ง
- เรียกดูและเลือกตาราง
- โหลดข้อมูลลงในแผ่นงาน Excel
Power BI Desktop
- เปิด Power BI Desktop -> รับข้อมูล -> ODBC
- เลือก DSN ที่คุณกําหนดค่าไว้
- เรียกดูแค็ตตาล็อกข้อมูลและเลือกตาราง
- แปลงข้อมูลตามต้องการ
- สร้างการแสดงภาพ
SQL Server Management Studio (เซิร์ฟเวอร์ที่เชื่อมโยง)
-- 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;
การแก้ไขปัญหา
ส่วนนี้ให้คําแนะนําสําหรับการแก้ไขปัญหาทั่วไปที่คุณอาจพบเมื่อใช้โปรแกรมควบคุม Microsoft ODBC สําหรับวิศวกรรมข้อมูล Microsoft Fabric
ปัญหาทั่วไป
ส่วนต่อไปนี้จะอธิบายปัญหาทั่วไปและวิธีแก้ไข:
การเชื่อมต่อล้มเหลว
ปัญหา: ไม่สามารถเชื่อมต่อกับ Fabric ได้
โซลูชัน:
- ตรวจสอบว่า Workspace ID และ Lakehouse 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
หมดเวลาคิวรี
ปัญหา: การสืบค้นหมดเวลาบนตารางขนาดใหญ่
โซลูชัน:
- เปิดใช้งาน
LargeTableSupport=true - ปรับ
PageSizeBytesให้มีขนาดก้อนที่เหมาะสมที่สุด - เปิดใช้งานการดึงข้อมูลล่วงหน้าแบบอะซิงโครนัส:
EnableAsyncPrefetch=1 - ใช้
LIMITส่วนคําสั่งเพื่อจํากัดขนาดผลลัพธ์
เปิดใช้งานการบันทึก
เมื่อแก้ไขปัญหา การเปิดใช้งานการบันทึกโดยละเอียดสามารถช่วยคุณระบุสาเหตุของปัญหาได้ คุณสามารถเปิดใช้งานการบันทึกผ่านสตริงการเชื่อมต่อ
วิธีเปิดใช้งานการบันทึกโดยละเอียด:
LogLevel=DEBUG;LogFile=C:\temp\odbc_driver_debug.log;
ระดับบันทึก:
-
DEBUG: ข้อมูลการดีบักอย่างละเอียดและระดับบันทึกไดรเวอร์ที่ละเอียดที่สุด -
INFO: ข้อมูลทั่วไป (ค่าเริ่มต้น) -
WARN: คําเตือนเท่านั้น -
ERROR: ข้อผิดพลาดเท่านั้น
การติดตาม ODBC
สําหรับการวินิจฉัยระดับต่ํา คุณสามารถเปิดใช้งานการติดตาม Windows ODBC เพื่อบันทึกการเรียก ODBC API โดยละเอียดและลักษณะการทํางานของโปรแกรมควบคุม อย่าลืมปิดการติดตามเมื่อไม่ต้องการเพื่อรักษาประสิทธิภาพสูงสุด
เมื่อต้องการเปิดใช้งานการติดตาม ODBC:
- เปิด
odbcad32.exe - ไปที่แท็บ "การติดตาม"
- ตั้งค่าเส้นทางไฟล์การติดตาม (เช่น
C:\temp\odbctrace.log) - เลือก "เริ่มติดตามทันที"
- สร้างปัญหาซ้ํา
- เลือก "หยุดการติดตามทันที"