Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 de Livy de Fabric, el controlador proporciona conectividad Spark SQL segura y flexible para tus aplicaciones y herramientas de BI compatibles con C/C++, .NET, Python y otras.
Características clave
- Compatible con ODBC 3.x: implementación completa de la especificación ODBC 3.x
- Autenticación Microsoft Entra ID: varios flujos de autenticación, que incluyen autenticación con CLI de Azure, interactiva, de credenciales de cliente, basada en certificados y de tokens de acceso
- Compatibilidad con consultas SQL de Spark: ejecución directa de instrucciones SQL de Spark
- Compatibilidad completa con tipos de datos: compatibilidad con todos los tipos de datos de Spark SQL, incluidos tipos complejos (ARRAY, MAP, STRUCT)
- Reutilización de sesión: administración de sesiones integrada para mejorar el rendimiento
- Modo de alta concurrencia: Opta por sesiones compartidas y cálidas en el lado del servidor para reducir la latencia de inicio de conexión y la expansión del clúster Spark
- Compatibilidad con tablas grandes: control optimizado para grandes conjuntos de resultados con tamaños de página configurables
- Captura previa asincrónica: carga de datos en segundo plano para mejorar el rendimiento
- Compatibilidad con proxy: configuración de proxy HTTP para entornos empresariales
- Soporte multi-esquema para casas lacustres: Conectarse a un esquema específico dentro de una casa lacustre
- Integración OneLake: Acceder a los datos de lakehouse almacenados en OneLake, incluyendo tablas en múltiples esquemas, a través de una interfaz ODBC unificada sin configuración de almacenamiento separada
- Elementos de entorno compatibles: Adjuntar elementos de entorno de Fabric durante la ejecución del trabajo para aplicar bibliotecas del área de trabajo, propiedades de Spark y variables a cada sesión
- Configuración de Spark personalizada: Pase las propiedades de configuración de Spark directamente a través del cadena de conexión para optimizar el comportamiento de la sesión
Nota:
En Apache Spark de código abierto, la base de datos y el esquema se usan como sinónimos. Por ejemplo, ejecutar SHOW SCHEMAS o SHOW DATABASES en un cuaderno de Fabric devuelve el mismo resultado: una lista de todos los esquemas del lakehouse.
Prerrequisitos
Antes de usar Microsoft ODBC Driver for Microsoft Fabric Data Engineering, asegúrese de que tiene:
- Sistema operativo: Windows 10/11 o Windows Server 2016+
- Fabric Access: Acceso a un espacio de trabajo Fabric
- Microsoft Entra ID credenciales: credenciales adecuadas para la autenticación
- IDs de espacio de trabajo y casa del lago: identificadores GUID para tu espacio de trabajo en Fabric y la casa del lago
- CLI de Azure (opcional): necesario para el método de autenticación de la CLI de Azure
Descarga e instalación de MSI
- Descargar el paquete MSI del Microsoft ODBC Driver para Microsoft Fabric Data Engineering
- Haga doble clic en
MicrosoftFabricODBCDriver-2.0.msi. - Siga el Asistente para la instalación y acepte el contrato de licencia.
- Elija el directorio de instalación (valor predeterminado:
C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\) - Completar la instalación
Instalación silenciosa
# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet
# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log
Comprobación de la instalación
Después de la instalación, compruebe que el controlador está registrado:
- Ejecutar
odbcad32.exe(Administrador de Orígenes de Datos ODBC) - Vaya a la pestaña Controladores
- Compruebe que aparece "Microsoft ODBC Driver for Microsoft Fabric Data Engineering"
Ejemplo de inicio rápido
Este ejemplo demuestra cómo conectarse a Fabric y ejecutar una consulta utilizando el controlador ODBC de Microsoft para Microsoft Fabric Data Engineering. Antes de ejecutar este código, asegúrese de que ha completado los requisitos previos e instalado el controlador.
Ejemplo de 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;
}
ejemplo de 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()
Ejemplo de .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));
}
Formato de la cadena de conexión
Cadena de conexión básica
Microsoft ODBC Driver for Microsoft Fabric Data Engineering usa 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
| Componente | Description | Example |
|---|---|---|
| DRIVER | Identificador del controlador ODBC | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
| WorkspaceId | Identificador de espacio de trabajo Fabric (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| LakehouseId | Identificador de lakehouse de Fabric (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| AuthFlow | Método de autenticación |
AZURE_CLI, INTERACTIVE, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE, ACCESS_TOKEN, FILE_TOKEN |
Ejemplos de cadena de conexión
Conexión básica (autenticación de la CLI de Azure)
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI
Con las 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
Con la función de registro
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LogLevel=DEBUG;LogFile=odbc_driver.log
Con modo de alta concurrencia
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
Consulta la sección Modo de alta concurrencia (HC) para obtener la guía completa de configuración.
Autenticación
Microsoft ODBC Driver for Microsoft Fabric Data Engineering admite varios métodos de autenticación a través de Microsoft Entra ID (anteriormente Azure Active Directory). La autenticación se configura mediante el AuthFlow parámetro en la cadena de conexión.
Métodos de autenticación
| Valor de AuthFlow | Description |
|---|---|
CLIENT_CREDENTIAL (0) |
Principal de servicio con secreto del cliente. Alias: CLIENT_SECRET_CREDENTIAL. |
BROWSER_BASED (1) |
Autenticación interactiva basada en navegador. Alias: INTERACTIVE. |
AZURE_CLI (2) |
Desarrollo usando credenciales CLI de Azure. |
CLIENT_CERTIFICATE_CREDENTIAL (3) |
Principal de servicio con certificado. Alias: CLIENT_CERTIFICATE. |
AUTH_ACCESS_TOKEN (4) |
Token de acceso de portador obtenido previamente. Alias: ACCESS_TOKEN. |
FILE_TOKEN (5) |
Lee un token de autenticación de un archivo. |
Puedes especificar valores de autenticación en formato UPPER_SNAKE_CASE, PascalCase o numérico. El controlador también acepta alias cortos como Browser, Interactive, CLI, Certificate, Token, y File. El controlador ignora los subrayos cuando compara valores.
Autenticación de la CLI de Azure
Ideal para: Desarrollo e aplicaciones interactivas
# 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)
Requisitos previos:
- CLI de Azure instalada:
az --version - Iniciado sesión:
az login
Autenticación interactiva del explorador
Mejor para: aplicaciones orientadas al usuario
# 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)
Comportamiento:
- Abre una ventana del explorador para la autenticación de usuario
- Las credenciales se almacenan en caché para las conexiones posteriores
Autenticación de credenciales de cliente (principal de servicio)
Mejor 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};"
)
Parámetros necesarios
-
TenantId: identificador de inquilino de Azure -
ClientId: ID de aplicación (cliente) de Microsoft Entra ID -
ClientSecret: secreto de cliente de Microsoft Entra ID
procedimientos recomendados
- Almacenamiento de secretos de forma segura (Azure Key Vault, variables de entorno)
- Uso de identidades administradas siempre que sea posible
- Rotación periódica de secretos
Autenticación basada en certificados
Mejor para: Aplicaciones empresariales que requieren autenticación basada en certificados
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>;"
)
Parámetros necesarios:
-
TenantId: identificador de inquilino de Azure -
ClientId: ID de aplicación (cliente) -
CertificatePath: ruta de acceso al archivo de certificado PFX/PKCS12 -
CertificatePassword: contraseña de certificado
Autenticación de token de acceso
Mejor para: Escenarios de autenticación personalizados
# 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};"
)
Autenticación mediante token de archivo
Utiliza la autenticación mediante token de archivo para entornos en contenedores y canalizaciones automatizadas en las que otro proceso escribe un token de portador en el archivo de token predefinido del controlador:
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=FILE_TOKEN;"
)
El controlador resuelve la ubicación del archivo token en Windows y Linux.
Alias de propiedades entre controladores
El controlador ODBC acepta nombres de propiedades seleccionados de ADO.NET y JDBC además de nombres nativos ODBC. Este soporte puede reducir los cambios en la cadena de conexión cuando cambias entre controladores Fabric.
| Propiedad ADO.NET o JDBC | Equivalente a ODBC |
|---|---|
FabricWorkspaceID |
WorkspaceId |
FabricLakehouseID |
LakehouseId |
LivySessionTimeoutSeconds |
Tiempo de espera de conexión |
LivyStatementTimeoutSeconds |
Tiempo de espera de la instrucción |
ConnectionPoolEnabled |
Pool habilitado |
El controlador resuelve 17 alias entre controladores al establecer la conexión.
Parámetros de configuración
Parámetros necesarios
Estos parámetros deben estar presentes en cada cadena de conexión:
| Parámetro | Tipo | Description | Example |
|---|---|---|---|
| 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 | Description |
|---|---|---|---|
| Base de datos | String | Ninguno | Base de datos inicial para el modo clásico. El modo HC no lo aplica automáticamente; ejecuta USE <database> después de conectar o usa nombres de tablas totalmente cualificados. |
| Ámbito | String | https://api.fabric.microsoft.com/.default |
Ámbito de OAuth |
Configuración de rendimiento
| Parámetro | Tipo | Predeterminado | Description |
|---|---|---|---|
| ReutilizarSesión | Booleano | true |
Reutilización de la sesión de Spark existente |
| SoporteParaGrandesTablas | Booleano | false |
Habilitación de optimizaciones para grandes conjuntos de resultados |
| EnableAsyncPrefetch | Booleano | false |
Habilitar la precarga de datos en segundo plano |
| TamañoDePáginaEnBytes | Integer |
18874368 (18 MB) |
Tamaño de página para la paginación de resultados (1-18 MB) |
Configuración de registro
| Parámetro | Tipo | Predeterminado | Description |
|---|---|---|---|
| LogLevel | String | INFO |
Nivel de registro: DEBUG, INFO, WARN o ERROR. Usa DEBUG para el diagnóstico detallado del controlador. |
| LogFile | String | odbc_driver.log |
Ruta de acceso del archivo de registro (absoluta o relativa) |
Configuración del proxy
| Parámetro | Tipo | Predeterminado | Description |
|---|---|---|---|
| UseProxy | Booleano | false |
Habilitación del proxy |
| ProxyHost | String | Ninguno | Nombre de host del proxy |
| ProxyPort | Integer | Ninguno | Puerto de proxy |
| ProxyUsername | String | Ninguno | Nombre de usuario de autenticación de proxy |
| ProxyPassword | String | Ninguno | Contraseña de autenticación de proxy |
Configuraciones de alta concurrencia (HC)
Utiliza estos parámetros para habilitar y configurar el modo de alta concurrencia (HC). El modo HC es opcional. Si no configuras LivyMode o UseHighConcurrency, el controlador utiliza la ruta clásica de una sola sesión. Para orientación y ejemplos, véase Modo de alta concurrencia (HC).
| Parámetro | Tipo | Predeterminado | Description |
|---|---|---|---|
LivyMode |
String | No establecido | Controla la adquisición de sesión. Los valores admitidos son Classic, HighConcurrencyy Auto.
Auto actualmente utiliza el camino clásico. |
UseHighConcurrency |
Booleano | false |
Activa el modo HC como alternativa a configurar LivyMode=HighConcurrency. |
SessionTag |
String | Ninguno | Proporciona una indicación de empaquetado del lado del servidor. Las conexiones deben usar una configuración similar del lado del servidor para compartir una sesión cálida de Livy. |
IdempotencyKey |
String | Ninguno | Proporciona una clave generada por el cliente para reintentos seguros en la adquisición de HC. El controlador valida el conjunto de caracteres y nunca registra el valor. |
EnvironmentId |
String | Ninguno | Especifica el identificador de entorno Fabric enviado como spark.fabric.environmentDetails en la configuración de adquisición HC. |
HeartbeatTimeoutInSecond |
Integer | Valor predeterminado del servidor | Establece el tiempo de inactividad máximo de la sesión HC en el servidor, en segundos. El valor debe ser un entero positivo. |
AcquireTimeoutSeconds |
Integer | 300 |
Establece cuánto tiempo espera el controlador para que una sesión de HC alcance el estado Idle, en segundos. El valor debe ser un entero positivo. |
conf.<key> |
String | Ninguno | Especifica una anulación de la configuración de Spark enviada en la solicitud de adquisición de HC. Por ejemplo: conf.spark.sql.shuffle.partitions=200. |
Precedencia de modos y validación
-
LivyModetiene prioridad sobreUseHighConcurrencycuando configuras ambos parámetros. - Los valores de los parámetros no distinguen entre mayúsculas y minúsculas.
-
UseHighConcurrencyaceptatrue,1,yes, oonpara activar el modo HC. Aceptafalse,0,no, ooffpara desactivar el modo HC. - Para otros valores no vacíos,
SQLDriverConnectdevuelve un error. SoloSQLConnectDSN registra el fallo de validación y utiliza la ruta clásica.
Configuración de compatibilidad
El controlador acepta TenantPrincipal y PoolMax, incluidos sus valores alternativos mediante variables de entorno, para mantener la compatibilidad con configuraciones anteriores de HC. El controlador analiza y valida estos valores, pero estos no afectan a la coincidencia de sesiones de HC ni a la capacidad del pool en tiempo de ejecución. No dependas de ellos para aislamiento de inquilinos ni límites de conexión.
Alternativas variables de entorno
El controlador utiliza las siguientes variables de entorno solo cuando el parámetro DSN o cadena de conexión correspondiente no está activado:
| Variable del entorno | Se asigna a |
|---|---|
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 (solo compatibilidad) |
FABRIC_ODBC_HC_HEARTBEAT_SECONDS |
HeartbeatTimeoutInSecond |
FABRIC_ODBC_HC_ACQUIRE_TIMEOUT |
AcquireTimeoutSeconds |
FABRIC_ODBC_HC_POOL_MAX |
PoolMax (solo compatibilidad) |
Para FABRIC_ODBC_USE_HC, la habilitación solo para entorno reconoce true, 1 o yes (sin distinguir entre mayúsculas y minúsculas). Otros valores dejan a HC desactivado. Los on alias y off solo se aplican a valores DSN y cadena de conexión.
Parámetros del entorno
Puede adjuntar un elemento de entorno de Fabric a la sesión de Spark iniciada por el controlador. Las bibliotecas, las propiedades y las variables del entorno seleccionado se aplican automáticamente cuando se crea la sesión.
| Parámetro | Tipo | Predeterminado | Description |
|---|---|---|---|
| EnvironmentId | Identificador Único Universal (UUID) | Ninguno | Identificador del elemento del entorno de Fabric (GUID) que se aplicará al iniciar la sesión de Spark |
Cadena de conexión de ejemplo con el elemento del entorno:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;EnvironmentId=<environment-id>
Nota:
El entorno se aplica cuando se inicia la sesión de Spark. Si también especifica propiedades de configuración personalizadas de Spark, las propiedades de nivel de sesión tienen prioridad sobre los valores predeterminados del entorno.
Configuración personalizada de Spark
Puede pasar las propiedades de configuración de Spark directamente en el cadena de conexión. Cualquier parámetro con spark. prefijo se aplica automáticamente a la sesión de Spark en el momento de la creación, lo que le permite invalidar los valores predeterminados de área de trabajo o tiempo de ejecución.
Configuraciones de Spark de ejemplo:
spark.sql.shuffle.partitions=200
spark.sql.adaptive.enabled=true
spark.sql.autoBroadcastJoinThreshold=10485760
Ejemplo de cadena de conexión con propiedades personalizadas de 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
Nota:
Las propiedades de configuración de Spark se aplican cuando se crea la sesión. Se aplican a todas las consultas que se ejecutan dentro de esa sesión e invalidan el entorno o los valores predeterminados en tiempo de ejecución para las mismas propiedades.
Modo de alta concurrencia (HC)
El modo de alta concurrencia (HC) permite que las conexiones ODBC al mismo espacio de trabajo y lakehouse se conecten a sesiones Livy Spark compartidas y cálidas en el lado del servidor, en lugar de provisionar un clúster separado para cada conexión. Úsalo para cargas de trabajo como paneles de BI, kernels de cuadernos y ramificaciones de ETL que abren muchas conexiones de corta duración y pueden compartir la capacidad de Spark administrada por el servidor.
El modo HC es opcional. Si no configuras una configuración HC, el controlador usa la ruta clásica de sesión única.
Elegir un modo de conexión
Usa el modo HC cuando:
- Tu carga de trabajo abre muchas conexiones ODBC de corta duración, como paneles de BI, núcleos de cuadernos o procesos ETL distribuidos en paralelo.
- Las conexiones se dirigen al mismo espacio de trabajo y al mismo lago y pueden compartir una sesión de Spark gestionada por el servidor.
- Reducir la latencia de arranque en frío por conexión es importante.
Usa el modo clásico cuando:
- Cada conexión requiere una sesión Spark aislada debido a diferentes configuraciones o al estricto aislamiento de recursos.
- El endpoint de Fabric Livy para el espacio de trabajo objetivo y la casa del lago no soporta el modo HC.
Activar el modo de alta concurrencia
Añade un parámetro de modo de alta concurrencia al DSN o a la cadena de conexión.
Recomendado: Establecer LivyMode
Utilizar LivyMode para seleccionar explícitamente el modo de adquisición de sesión:
LivyMode=HighConcurrency
Los valores admitidos son Classic, HighConcurrencyy Auto. Los valores no distinguen mayúsculas de minúsculas.
Auto Actualmente selecciona el modo clásico.
Alternativa: Set UseHighConcurrency
Utiliza la configuración booleana para compatibilidad con configuraciones existentes:
UseHighConcurrency=true
Para activar el modo de alta concurrencia, use true, 1, yes, o on. Para desactivarlo, usa false, 0, no, o off. Los valores no distinguen mayúsculas de minúsculas.
SQLDriverConnect rechaza otros valores no vacíos con SQLSTATE HY024. Solo SQLConnect DSN registra el fallo de validación y utiliza el modo clásico.
Nota:
Si se configuran ambos parámetros, LivyMode tiene precedencia sobre UseHighConcurrency.
Parámetros requeridos en modo HC
La activación de HC requiere los siguientes identificadores válidos:
| Parámetro | Notas |
|---|---|
WorkspaceId |
Debe ser un GUID válido de Fabric workspace. |
LakehouseId |
Debe ser un GUID válido de Fabric Lakehouse. |
Incluye SessionTag porque influye en la emparejación del servidor para las sesiones calientes.
Emparejamiento de sesiones
El modo HC no garantiza que todas las conexiones reutilicen una sesión existente. Para cada solicitud de adquisición de sesión, el controlador envía:
- El valor
SessionTag. - La configuración efectiva de Spark, incluida la configuración de
conf.*yEnvironmentId.
El servicio Fabric Livy evalúa estos valores y decide si adjunta la conexión a una sesión caliente o crea una nueva. Para mejorar la reutilización de sesiones, utiliza valores consistentes entre conexiones que estén destinadas a compartir la capacidad de Spark gestionada por el servidor.
Ejemplos de cadena de conexión
Conexión mínima de HC (autenticación de CLI de Azure):
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
HC con tiempos de espera ajustados:
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 con entorno y anulaciones de 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"
)
Configurar el modo HC en una DSN
Puedes guardar los ajustes de HC en un DSN en lugar de repetirlos en cada cadena de conexión. Cuando una cadena de conexión no especifica un valor, el controlador lee estos ajustes desde la DSN:
LivyModeUseHighConcurrencyEnvironmentIdSessionTagIdempotencyKeyHeartbeatTimeoutInSecondAcquireTimeoutSeconds
El controlador también lee los ajustes de solo compatibilidad TenantPrincipal y PoolMax. Para guardar estos ajustes, edita la DSN en odbcad32.exe o usa SQLWritePrivateProfileString. Usa los nombres de parámetros en la tabla de configuración de HC.
Importante
El controlador no lee conf.* las invalidaciones de la configuración de Spark desde el DSN. Añádelas a la cadena de conexión en tiempo de ejecución o inyéctalas antes de llamar a SQLDriverConnect.
Desactivar el modo HC
Puedes desactivar nuevas adquisiciones de sesión HC sin tener que volver a desplegar el controlador. Usa el método que corresponde a cómo activaste el modo HC:
| Fuente de configuración de HC | Cómo desactivar el modo HC |
|---|---|
| Solo variable de entorno | Establece FABRIC_ODBC_USE_HC=false, o elimina la variable. |
| DSN | Establezca LivyMode=Classic. Alternativamente, quita LivyMode y establece UseHighConcurrency=false. |
| Cadena de conexión | Establece LivyMode=Classic, o elimina los parámetros HC. |
La cadena de conexión y la configuración de DSN tienen prioridad sobre la alternativa basada en variables de entorno. Estos cambios afectan solo a nuevas conexiones. Las sesiones de HC existentes siguen activas hasta que se liberan.
Comprender el comportamiento del runtime de HC
-
Validación:
SQLDriverConnectrechaza valores HC booleanos y enteros positivos inválidos con SQLSTATEHY024. Rechaza unLivyModeno válido y valores deWorkspaceId,LakehouseIdyIdempotencyKeyno válidos o demasiado grandes con SQLSTATEHY000. Un valor de compatibilidadTenantPrincipalsobredimensionado también devuelveHY000. ParaSQLConnectsolo con DSN, el controlador registra errores habituales de validación de HC y utiliza el modo clásico. Los valores confidenciales demasiado grandes siguen haciendo fallar la conexión. -
Datos sensibles: El controlador excluye o elimina
IdempotencyKeyotros campos sensibles de los registros HC y de la salida de diagnóstico. - Cancelación: La cancelación del extracto es cooperativa. El trabajo del servidor ya en curso finaliza correctamente en lugar de interrumpirse de inmediato.
- Interruptores automáticos: Los modos HC y clásico usan interruptores automáticos separados. Agotar un modo no afecta al otro.
-
Base de datos inicial: Las conexiones HC no ejecutan la instrucción inicial
USEdelDatabaseparámetro. EjecutaUSE <database>después de conectar o usa nombres de tablas totalmente cualificados. -
Diagnóstico: Configura
LogLevel=DEBUGpara registrar las decisiones de adquisición HC, sondeo, liberación y mapeo de errores. Para una solución de problemas específica, estableceLIVY_HC_VERBOSE=1para que incluya diagnósticos HTTP de HC adicionales depurados.
Configurar una DSN
Cree un DSN del sistema
Abrir el administrador de ODBC
%SystemRoot%\System32\odbcad32.exeCreación de un nuevo DSN del sistema
- Vaya a la pestaña "DSN del sistema"
- Seleccione "Agregar".
- Seleccione "Microsoft ODBC Driver for Microsoft Fabric Data Engineering"
- Seleccione "Finish" (Finalizar).
Configuración de las opciones de DSN
-
Nombre del origen de datos: escriba un nombre único (por ejemplo,
FabricODBC) - Descripción: Descripción opcional
- ID del espacio de trabajo: GUID de tu espacio de trabajo de Fabric
- Identificador de Lakehouse: GUID de Fabric Lakehouse
- Autenticación: Selección del método de autenticación
- Id. de entorno (opcional): escriba el GUID del elemento de entorno de Fabric que se va a adjuntar durante la creación de la sesión.
-
Modo Livy (opcional): Establecer en
HighConcurrencypara activar el modo HC - Etiqueta de sesión (opcional): Introduce una etiqueta operativa no sensible para la coincidencia de sesión HC
- Configuración de opciones adicionales según sea necesario
-
Nombre del origen de datos: escriba un nombre único (por ejemplo,
Probar conexión
- Seleccione "Probar conexión" para comprobar la configuración.
- Seleccione "Aceptar" para guardar.
Uso de DSN en aplicaciones
# Python - Connect using DSN
conn = pyodbc.connect("DSN=FabricODBC")
// .NET - Connect using DSN
using var connection = new OdbcConnection("DSN=FabricODBC");
await connection.OpenAsync();
Ejemplos de uso
Conexión básica y consulta
Pitón
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));
}
}
}
}
Trabajar 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;" # 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()
Ejecutar sentencias 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;
}
Use executeDml con las instrucciones INSERT, UPDATE o DELETE. El recuento de filas reportado depende de si el resultado contiene un recuento de actualizaciones reconocido por el controlador.
Detección de esquemas
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()
Asignación de tipos de datos
El controlador asigna los tipos de datos de Spark SQL a tipos de SQL ODBC:
| Tipo de SQL de Spark | Tipo SQL ODBC | Tipo de C/C++ | Tipo de Python | Tipo .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 |
| FLOTAR | SQL_REAL | SQLREAL | flotante | flotante |
| DOUBLE | SQL_DOUBLE | SQLDOUBLE | flotante | double |
| DECIMAL | SQL_DECIMAL | SQLCHAR* | decimal.Decimal | Decimal |
| STRING | SQL_VARCHAR | SQLCHAR* | str | cuerda / cadena |
| VARCHAR(n) | SQL_VARCHAR | SQLCHAR* | str | cuerda / cadena |
| CHAR(n) | SQL_CHAR | SQLCHAR* | str | cuerda / cadena |
| BINARY | SQL_VARBINARY | SQLCHAR* | bytes | byte[] |
| DATE | SQL_TYPE_DATE | SQL_DATE_STRUCT | datetime.date | DateTime |
| TIMESTAMP | SQL_TYPE_TIMESTAMP | SQL_TIMESTAMP_STRUCT | datetime.datetime | DateTime |
| ARRAY | SQL_VARCHAR | SQLCHAR* | str (JSON) | cuerda / cadena |
| MAP | SQL_VARCHAR | SQLCHAR* | cadena (JSON) | cuerda / cadena |
| ESTRUCTURA | SQL_VARCHAR | SQLCHAR* | cadena (JSON) | cuerda / cadena |
Integración de herramientas de BI
Microsoft Excel
- Abrir Excel - Datos ->> Obtener datos -> de otros orígenes -> desde ODBC
- Seleccione el DSN configurado (por ejemplo,
FabricODBC) - Autenticación si se le solicita
- Examinar y seleccionar tablas
- Cargar datos en la hoja de cálculo de Excel
Power BI Escritorio
- Abrir Power BI Desktop-> Obtener datos :> ODBC
- Selección del DSN configurado
- Examinar el catálogo de datos y seleccionar tablas
- Transformación de datos según sea necesario
- Creación de visualizaciones
SQL Server Management Studio (Servidor vinculado)
-- 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;
Solución de problemas
En esta sección se proporcionan instrucciones para resolver problemas comunes que pueden surgir al usar Microsoft ODBC Driver for Microsoft Fabric Data Engineering.
Problemas comunes
En las secciones siguientes se describen problemas comunes y sus soluciones:
Fallos de conexión
Problema: No se puede conectar a Fabric
Soluciones:
- Verifica que el ID del espacio de trabajo y el ID de Lakehouse sean GUIDs correctos
- Compruebe la autenticación de la CLI de Azure:
az account show - Asegúrese de que tiene los permisos adecuados del área de trabajo de Fabric.
- Comprobación de la conectividad de red y la configuración del proxy
Errores de autenticación
Problema: error de autenticación con la CLI de Azure
Soluciones:
- Ejecución
az loginpara actualizar las credenciales - Compruebe el inquilino correcto:
az account set --subscription <subscription-id> - Comprobar la validez del token:
az account get-access-token --resource https://api.fabric.microsoft.com
Tiempos de espera de consulta agotados
Problema: Las consultas agotan el tiempo de espera en tablas grandes
Soluciones:
- Habilitar
LargeTableSupport=true - Ajuste
PageSizeBytespara un tamaño de fragmento óptimo - Habilite la captura previa asincrónica:
EnableAsyncPrefetch=1 - Utilice la cláusula
LIMITpara restringir el tamaño del resultado
Habilitar registro
Al solucionar problemas, habilitar el registro detallado puede ayudarle a identificar la causa principal de los problemas. Puede habilitar el registro a través de la cadena de conexión.
Para habilitar el registro detallado:
LogLevel=DEBUG;LogFile=C:\temp\odbc_driver_debug.log;
Niveles de registro:
-
DEBUG: Información de depuración detallada y el nivel de registro más detallado del controlador -
INFO: información general (valor predeterminado) -
WARN: solo advertencias -
ERROR: solo errores
Seguimiento de ODBC
Para diagnósticos de bajo nivel, puede habilitar el trazado ODBC de Windows para capturar llamadas detalladas a la API ODBC y el comportamiento del controlador. Recuerde desactivar el seguimiento cuando no sea necesario para mantener un rendimiento óptimo.
Para habilitar el seguimiento de ODBC:
- Abrir
odbcad32.exe - Vaya a la pestaña "Seguimiento"
- Establecer la ruta de acceso del archivo de seguimiento (por ejemplo,
C:\temp\odbctrace.log) - Seleccione "Iniciar seguimiento ahora".
- Reproducir el problema
- Seleccione "Detener seguimiento ahora".