Controlador Microsoft ODBC para Microsoft Fabric Data Engineering en Linux (Vista previa)

Importante

Esta característica se encuentra en versión preliminar.

ODBC (conectividad abierta de bases de datos) es un estándar ampliamente adoptado que permite a las aplicaciones cliente conectarse y trabajar con datos de bases de datos y plataformas de macrodatos.

El controlador ODBC de Microsoft para Fabric Data Engineering te permite conectar, consultar y gestionar cargas de trabajo de Spark en Fabric con la fiabilidad y simplicidad del estándar ODBC. Construido sobre las APIs Livy de Fabric, el controlador proporciona conectividad Spark SQL segura y flexible para tus aplicaciones compatibles con C/C++, .NET, Python y otras compatibles con ODBC en Linux.

Características clave

  • Compatible con ODBC 3.x: Implementación completa de la especificación ODBC 3.x.
  • Autenticación Microsoft Entra ID: Múltiples flujos de autenticación, incluyendo CLI de Azure, credenciales de cliente, autenticación basada en certificados y autenticación de token de acceso.
  • Soporte para consultas SQL de Spark: Ejecución directa de sentencias SQL de Spark.
  • Soporte integral de tipos de datos: Soporte para todos los tipos de datos SQL de Spark, incluyendo tipos complejos (ARRAY, MAP, y STRUCT).
  • Reutilización de sesión: Gestión de sesiones integrada para mejorar el rendimiento.
  • Soporte para tablas grandes: Manejo optimizado para grandes conjuntos de resultados con tamaños de página configurables.
  • Prelectura asincrónica: Carga de datos en segundo plano para mejorar el rendimiento.
  • Soporte de proxy: Configuración de proxy HTTP para entornos empresariales.
  • Soporte multi-esquema para casas de lago: Conectarse a un esquema específico dentro de una casa de lago.

Note

En Apache Spark de código abierto, la base de datos y el esquema se usan como sinónimos. Por ejemplo, al ejecutar SHOW SCHEMAS o SHOW DATABASES en un cuaderno Fabric se devuelve el mismo resultado: una lista de todos los esquemas en la casa del lago.

Prerequisites

Antes de usar el controlador ODBC de Microsoft para Microsoft Fabric Data Engineering en Linux, asegúrate de cumplir con los siguientes requisitos previos:

  • Sistema operativo: Ubuntu 22.04 o posterior, Debian 11 o posterior, o Red Hat Enterprise Linux (RHEL) 8 o posterior en x86-64.
  • unixODBC: El gestor de controladores ODBC para Linux. Instala los unixodbc paquetes de y (y unixodbc-dev los paquetes).
  • Acceso a Fabric: Acceso a un espacio de trabajo Fabric.
  • Credenciales Microsoft Entra ID: Credenciales adecuadas para la autenticación.
  • IDs de espacio de trabajo y casa del lago: Los identificadores GUID para tu espacio de trabajo Fabric y la casa del lago.
  • CLI de Azure (opcional): Obligatorio cuando usas autenticación con CLI de Azure.

Descargar e instalar en Linux

El controlador ODBC de Microsoft para Microsoft Fabric Data Engineering versión 1.0.0 está disponible en vista previa pública.

Para instalar el controlador, haga lo siguiente:

  1. Extraiga ms-sparksql-odbc-linux-1.0.0.zip.

  2. Abre un terminal en el directorio extraído.

  3. Instala el paquete Debian:

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

El paquete instala los siguientes archivos:

Archivo Ubicación instalada
Biblioteca de pilotos /usr/lib/libmicrosoftfabricodbc.so
Plantilla de registro de pilotos /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template
Plantilla de configuración DSN /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template
License /usr/share/doc/microsoft-fabric-odbc-driver/LICENSE
Guía de uso /usr/share/doc/microsoft-fabric-odbc-driver/USAGE_Linux.md

Controladora de registro manual

El paquete registra automáticamente el controlador con unixODBC. Para registrar el controlador manualmente, ejecuta:

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

Comprobación de la instalación

Verifica que el controlador esté registrado y que la biblioteca esté instalada:

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

El odbcinst comando debería indicar [Microsoft ODBC Driver for Microsoft Fabric Data Engineering].

Desinstala el controlador

Para desinstalar el controlador, ejecuta el siguiente comando:

sudo dpkg -r microsoft-fabric-odbc-driver

Este comando elimina los archivos del controlador y desregistra el controlador de unixODBC.

Ejemplo de inicio rápido

Los siguientes ejemplos se conectan a Fabric y ejecutan una consulta SQL de Spark. Cumple los requisitos previos e instala el controlador antes de ejecutar un ejemplo.

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

Ejemplo de 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;
}

Construye y ejecuta el ejemplo:

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

ejemplo de .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));
}

Formato de la cadena de conexión

Cadena de conexión básica

Utiliza el siguiente formato de cadena de conexión:

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

Componentes de cadena de conexión

Component Descripción Ejemplo
DRIVER Identificador del controlador ODBC {Microsoft ODBC Driver for Microsoft Fabric Data Engineering}
WorkspaceId Identificador de espacio de trabajo Fabric (GUID) 4bbf89a8-66bb-443f-91af-df31e6a7560b
LakehouseId Identificador Fabric de la casa del lago (GUID) d8faa650-1343-496b-b9cc-d4168a676f90
AuthFlow Método de autenticación AZURE_CLI, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE o ACCESS_TOKEN

Ejemplos de cadena de conexión

Conexión básica

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

Conexión con opciones de rendimiento

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

Conexión con la tala

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

El controlador Microsoft ODBC para Microsoft Fabric Data Engineering soporta múltiples métodos de autenticación a través de Microsoft Entra ID. Configura la autenticación usando el AuthFlow parámetro de la cadena de conexión o DSN.

Métodos de autenticación

AuthFlow valor Descripción
AZURE_CLI Desarrollo mediante credenciales de la CLI de Azure
CLIENT_CREDENTIAL Principal de servicio con un secreto de cliente
CLIENT_CERTIFICATE Principal de servicio con certificado
ACCESS_TOKEN Token de acceso de portador adquirido previamente

Note

La autenticación interactiva por navegador no está disponible en servidores Linux sin pantalla. Utiliza CLI de Azure, credenciales de cliente, autenticación basada en certificados o token de acceso.

Autenticación de la CLI de Azure

Utiliza la autenticación de CLI de Azure para aplicaciones de desarrollo e interactivas.

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)

Antes de conectarte, verifica que la CLI de Azure esté instalada y inicia sesión:

az --version
az login

Para instalar CLI de Azure en Debian o Ubuntu, utiliza el gestor de paquetes:

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

Autenticación de credenciales del cliente

Utiliza la autenticación de credenciales del cliente para servicios automatizados y trabajos en segundo plano.

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

Introduzca los siguientes parámetros:

  • TenantId: El ID del tenant de Microsoft Entra.
  • ClientId: el identificador de la aplicación (cliente).
  • ClientSecret: El secreto del cliente.

Almacena secretos en un almacén secreto seguro o en variables de entorno. No almacenes secretos en cadenas de conexión en texto plano ni en archivos INI.

Autenticación basada en certificados

Utiliza autenticación basada en certificados para aplicaciones empresariales que requieren credenciales de certificado.

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

Introduzca los siguientes parámetros:

  • TenantId: El ID del tenant de Microsoft Entra.
  • ClientId: el identificador de la aplicación (cliente).
  • CertificatePath: La ruta hacia el archivo de certificados PFX o PKCS12.
  • CertificatePassword: La contraseña del certificado.

Autenticación de token de acceso

Utiliza la autenticación de token de acceso cuando tu aplicación adquiera un token a través de otro mecanismo.

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

Parámetros de configuración

Parámetros necesarios

Incluye estos parámetros en cada cadena de conexión:

Parámetro Tipo Descripción Ejemplo
WorkspaceId Identificador Único Universal (UUID) Identificador del área de trabajo de Fabric 4bbf89a8-...
LakehouseId Identificador Único Universal (UUID) Identificador de Fabric lakehouse d8faa650-...
AuthFlow String Tipo de flujo de autenticación AZURE_CLI

Parámetros opcionales

Configuración de conexión

Parámetro Tipo Predeterminado Descripción
Database String Ninguno Base de datos específica a la que conectarse
Scope String https://api.fabric.microsoft.com/.default Ámbito de OAuth

Configuración de rendimiento

Parámetro Tipo Predeterminado Descripción
ReuseSession Boolean true Reutilizar una sesión existente de Spark
LargeTableSupport Boolean false Habilitación de optimizaciones para grandes conjuntos de resultados
EnableAsyncPrefetch Boolean false Habilitar la precarga de datos en segundo plano
PageSizeBytes Entero 18874368 (18 MB) Tamaño de página para la paginación de resultados de 1 a 18 MB

Configuración del registro

Parámetro Tipo Predeterminado Descripción
LogLevel String INFO Nivel logarítmico: TRACE, DEBUG, INFO, WARN, o ERROR
LogFile String odbc_driver.log Ruta de archivo de registro absoluta o relativa

Configuración del proxy

Parámetro Tipo Predeterminado Descripción
UseProxy Boolean false Habilitar un proxy
ProxyHost String Ninguno Nombre de host proxy
ProxyPort Entero Ninguno Puerto de proxy
ProxyUsername String Ninguno Nombre de usuario de autenticación proxy
ProxyPassword String Ninguno Contraseña de autenticación de proxy

Configuración de DSN

En Linux, configura los nombres de las fuentes de datos (DSNs) en archivos INI en lugar del registro de Windows.

Archivo Ámbito Access
/etc/odbc.ini DSN a nivel de sistema Requiere sudo
~/.odbc.ini DSN específicos para usuarios Solo usuario actual

Creación de un DSN

Copia la plantilla instalada:

cp /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template ~/.odbc.ini

Edición ~/.odbc.ini con los detalles de tu espacio de trabajo en 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

Verifica la DSN

Enumera las DSN configuradas y luego prueba la conexión:

odbcinst -q -s
isql -v FabricDSN

El isql comando requiere las herramientas de línea de comandos unixODBC.

Utilizar una DSN en aplicaciones

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

Ejemplos de uso

Prueba una conexión con isql

Inicia una sesión SQL interactiva:

isql -v FabricDSN

Ejecuta una sola consulta:

echo "SELECT 1 AS test" | isql -v FabricDSN -b

Trabajo con grandes conjuntos de resultados

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

Descubre esquemas y tablas

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

Asignación de tipos de datos

El controlador asigna los tipos de datos de Spark SQL a tipos de SQL ODBC:

Tipo Spark SQL Tipo ODBC SQL Tipo C/C++ Tipo de Python Tipo de .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* Cadena JSON. string
MAP SQL_VARCHAR SQLCHAR* Cadena JSON. string
STRUCT SQL_VARCHAR SQLCHAR* Cadena JSON. string

Diferencias entre plataformas

Feature Windows Linux
Mánager de pilotos Administrador de controladores Microsoft ODBC unixODBC
Binario de controladores microsoftfabricodbc.dll libmicrosoftfabricodbc.so
Configuración de DSN Registro y interfaz gráfica de Windows /etc/odbc.ini y ~/.odbc.ini
Matrícula de pilotos Registro y odbcad32.exe odbcinst -i -d -f
Cliente HTTP WinHTTP libcurl
TLS Soporte integrado para Windows OpenSSL
Autenticación de certificado Windows CryptoAPI OpenSSL con archivos RS256 y PEM o PFX
Autenticación interactiva Ventana del navegador No disponible en servidores headless
Embalaje Instalador MSI Paquete Linux

Troubleshooting

Conductor no encontrado

Problema: La conexión falla con [IM002] Data source name not found and no default driver specified.

Soluciones:

  1. Verifica el registro de los conductores ejecutando odbcinst -q -d.
  2. Compruebe que /usr/lib/libmicrosoftfabricodbc.so existe.
  3. Registra al conductor ejecutando sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template.
  4. Reinstala el paquete ejecutando sudo dpkg -i microsoft-fabric-odbc-driver-1.0.0-Linux.deb.

No se encontró DSN

Problema: La conexión falla con [IM002] Data source name not found.

Soluciones:

  1. Verifica la configuración del DSN ejecutando odbcinst -q -s.
  2. Verifica eso ~/.odbc.ini o /etc/odbc.ini contiene la sección DSN.
  3. Asegúrate de que el Driver valor coincida exactamente con el nombre del conductor registrado.

Fallos de conexión

Problema: El controlador no puede conectarse a Fabric.

Soluciones:

  1. Verifica que el ID del espacio de trabajo y el ID de la casa del lago sean GUIDs válidos.
  2. Comprueba la autenticación de CLI de Azure ejecutando az account show.
  3. Asegúrate de tener los permisos necesarios para el espacio de trabajo de Fabric.
  4. Comprueba la conectividad de red y la configuración del proxy.

Errores de autenticación

Problema: La autenticación de CLI de Azure falla.

Soluciones:

  1. Corre az login a refrescar tus credenciales.
  2. Configura la suscripción correcta ejecutando az account set --subscription <subscription-id>.
  3. Comprueba el token ejecutando az account get-access-token --resource https://api.fabric.microsoft.com.
  4. Asegúrate de que tu cuenta tenga los permisos necesarios para el espacio de trabajo de Fabric.

Errores de biblioteca compartida

Problema: El conductor informa error while loading shared libraries: libmicrosoftfabricodbc.so.

Soluciones:

  1. Reinstala el paquete ejecutando sudo dpkg -i microsoft-fabric-odbc-driver-1.0.0-Linux.deb.
  2. Compruebe que /usr/lib/libmicrosoftfabricodbc.so existe.
  3. Ejecuta sudo ldconfig para actualizar la caché compartida de la biblioteca.

Tiempos de espera de las consultas

Problema: Las consultas se agotan en tablas grandes.

Soluciones:

  1. Agregue LargeTableSupport=true a la cadena de conexión.
  2. Ajusta PageSizeBytes el tamaño del resultado.
  3. Agregue EnableAsyncPrefetch=1 a la cadena de conexión.
  4. Utiliza una LIMIT cláusula para restringir el tamaño del resultado.

Habilitar registro

Habilitar el registro detallado en una DSN:

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

Alternativamente, añadir parámetros de registro a la cadena de conexión:

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

El controlador soporta los siguientes niveles logarítmicos:

  • TRACE: Incluye todas las llamadas a la API.
  • DEBUG: Incluye información detallada de depuración.
  • INFO: Incluye información general y es el valor predeterminado.
  • WARN: Incluye solo advertencias.
  • ERROR: Solo incluye errores.

Activar el trazado de unixODBC

Para diagnósticos de llamadas ODBC de bajo nivel, añade la siguiente configuración a /etc/odbcinst.ini:

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

Desactiva el rastreo cuando termines de solucionar problemas para evitar sobrecarga de rendimiento innecesaria.