ไดรเวอร์ Microsoft ODBC สําหรับ Microsoft Fabric Data Engineering

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

  1. ดาวน์โหลดโปรแกรมควบคุม Microsoft ODBC สําหรับแพคเกจ MSI วิศวกรรมข้อมูล Microsoft Fabric
  2. ดับเบิลคลิกMicrosoftFabricODBCDriver-2.0.msi
  3. ทําตามวิซาร์ดการติดตั้งและยอมรับข้อตกลงใบอนุญาต
  4. เลือกไดเร็กทอรีการติดตั้ง (ค่าเริ่มต้น: C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\)
  5. ทําการติดตั้งให้เสร็จสมบูรณ์

การติดตั้งแบบเงียบ

# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet

# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log

ตรวจสอบการติดตั้ง

หลังการติดตั้ง ให้ตรวจสอบว่าไดรเวอร์ลงทะเบียนแล้ว:

  1. เรียกใช้ odbcad32.exe (ผู้ดูแลระบบแหล่งข้อมูล ODBC)
  2. ไปที่แท็บไดรเวอร์
  3. ตรวจสอบว่า "โปรแกรมควบคุม 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:

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

ไดรเวอร์ยังอ่านเฉพาะ 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 และค่าจํานวนเต็มบวกที่ไม่ถูกต้องด้วย SQLSTATE HY024 มันปฏิเสธค่าที่ไม่ถูกต้องLivyModeและผิดปกติ หรือมีขนาดใหญ่WorkspaceIdLakehouseIdเกิน , และIdempotencyKeyค่าที่มี SQLSTATE HY000 ค่าความเข้ากันได้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 ของระบบ

  1. เปิดผู้ดูแลระบบ ODBC

    %SystemRoot%\System32\odbcad32.exe
    
  2. สร้าง DSN ระบบใหม่

    • ไปที่แท็บ "System DSN"
    • เลือก "เพิ่ม"
    • เลือก "Microsoft ODBC Driver for Microsoft Fabric Data Engineering"
    • เลือก "เสร็จสิ้น"
  3. กําหนดการตั้งค่า DSN

    • ชื่อแหล่งข้อมูล: ป้อนชื่อที่ไม่ซ้ํากัน (เช่น FabricODBC)
    • คําอธิบาย: คําอธิบายเพิ่มเติม
    • รหัสพื้นที่ทํางาน: GUID พื้นที่ทํางาน Fabric ของคุณ
    • รหัสเลคเฮาส์: GUID เลคเฮาส์ผ้าของคุณ
    • การรับรองความถูกต้อง: เลือกวิธีการรับรองความถูกต้อง
    • รหัสสภาพแวดล้อม (ไม่บังคับ): ป้อน GUID ของรายการสภาพแวดล้อม Fabric ที่จะแนบระหว่างการสร้างเซสชัน
    • โหมด Livy (ไม่บังคับ): ตั้งค่าเป็น HighConcurrency เพื่อเปิดใช้งานโหมด HC
    • แท็กเซสชัน (ไม่บังคับ): ป้อนป้ายกํากับปฏิบัติการที่ไม่ละเอียดอ่อนสําหรับการจับคู่เซสชัน HC
    • กําหนดการตั้งค่าเพิ่มเติมตามต้องการ
  4. ทดสอบการเชื่อมต่อ

    • เลือก "ทดสอบการเชื่อมต่อ" เพื่อตรวจสอบการตั้งค่า
    • เลือก "ตกลง" เพื่อบันทึก

ใช้ 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

ไมโครซอฟท์ เอ็กเซล

  1. เปิด Excel -> ข้อมูล -> รับข้อมูล -> จากแหล่งอื่น -> จาก ODBC
  2. เลือก DSN ที่คุณกําหนดค่าไว้ (เช่น FabricODBC)
  3. รับรองความถูกต้องหากได้รับแจ้ง
  4. เรียกดูและเลือกตาราง
  5. โหลดข้อมูลลงในแผ่นงาน Excel

Power BI Desktop

  1. เปิด Power BI Desktop -> รับข้อมูล -> ODBC
  2. เลือก DSN ที่คุณกําหนดค่าไว้
  3. เรียกดูแค็ตตาล็อกข้อมูลและเลือกตาราง
  4. แปลงข้อมูลตามต้องการ
  5. สร้างการแสดงภาพ

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 ได้

โซลูชัน:

  1. ตรวจสอบว่า Workspace ID และ Lakehouse ID เป็น GUID ที่ถูกต้อง
  2. ตรวจสอบการรับรองความถูกต้อง Azure CLI: az account show
  3. ตรวจสอบให้แน่ใจว่าคุณมีสิทธิ์พื้นที่ทํางาน Fabric ที่เหมาะสม
  4. ตรวจสอบการเชื่อมต่อเครือข่ายและการตั้งค่าพร็อกซี

ข้อผิดพลาดในการรับรองความถูกต้อง

ปัญหา: การรับรองความถูกต้องล้มเหลวด้วย 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:

  1. เปิด odbcad32.exe
  2. ไปที่แท็บ "การติดตาม"
  3. ตั้งค่าเส้นทางไฟล์การติดตาม (เช่น C:\temp\odbctrace.log)
  4. เลือก "เริ่มติดตามทันที"
  5. สร้างปัญหาซ้ํา
  6. เลือก "หยุดการติดตามทันที"