Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O ODBC (Open Database Connectivity) é um padrão amplamente adotado que permite que os aplicativos cliente se conectem e trabalhem com dados de bancos de dados e plataformas de Big Data.
O driver Microsoft ODBC para Engenharia de Dados Fabric permite conectar, consultar e gerenciar cargas de trabalho Spark no Fabric com a confiabilidade e simplicidade do padrão ODBC. Construído sobre as APIs Livy da Fabric, o driver oferece conectividade Spark SQL segura e flexível para suas aplicações compatíveis com C/C++, .NET, Python e outras compatíveis com ODBC no Linux.
Características principais
- Compatível com ODBC 3.x: Implementação completa da especificação ODBC 3.x.
- Autenticação do Microsoft Entra ID: vários fluxos de autenticação, incluindo CLI do Azure, credenciais de cliente, autenticação baseada em certificado e autenticação por token de acesso.
- Suporte a consultas SQL do Spark: Execução direta das instruções SQL do Spark.
-
Suporte abrangente de tipos de dados: Suporte para todos os tipos de dados SQL do Spark, incluindo tipos complexos (
ARRAY,MAP, eSTRUCT). - Reutilização de sessões: Gerenciamento de sessões integrado para melhorar o desempenho.
- Modo de alta concorrência: Opte por sessões compartilhadas e quentes do lado do servidor do Livy para reduzir a latência de início da conexão e a expansão do cluster Spark.
- Suporte a tabelas grandes: Tratamento otimizado para conjuntos de resultados grandes com tamanhos de página configuráveis.
- Pré-carregamento assíncrono: carregamento de dados em segundo plano para melhorar o desempenho.
- Suporte a proxy: Configuração de proxy HTTP para ambientes empresariais.
- Suporte a vários esquemas no lakehouse: Conecte-se a um esquema específico em um lakehouse.
Note
No Apache Spark de software livre, o banco de dados e o esquema são usados sinônimos. Por exemplo, executar SHOW SCHEMAS ou SHOW DATABASES em um notebook do Fabric retorna o mesmo resultado: uma lista de todos os esquemas no lakehouse.
Pré-requisitos
Antes de usar o driver Microsoft ODBC para Microsoft Fabric Data Engineering no Linux, certifique-se de cumprir os seguintes pré-requisitos:
- Sistema operacional: Ubuntu 22.04 ou posterior, Debian 11 ou posterior, ou Red Hat Enterprise Linux (RHEL) 8 ou posterior em x86-64.
-
unixODBC: O gerenciador de drivers ODBC para Linux. Instale os pacotes
unixodbceunixodbc-dev. -
libcurl: a dependência de tempo de execução HTTP, como
libcurl4ou o pacote equivalente para sua distribuição. -
OpenSSL: A dependência de tempo de execução de TLS e criptografia, como
opensslelibssl3ou pacotes equivalentes. - Acesso ao Fabric: Acesso a um espaço de trabalho do Fabric.
- Credenciais do Microsoft Entra ID: Credenciais apropriadas para autenticação.
- IDs de espaço de trabalho e casa do lago: Os identificadores GUID para seu espaço de trabalho Fabric e casa do lago.
- CLI do Azure (opcional): Exigido quando você usa autenticação CLI do Azure.
Baixe e instale no Linux
Para instalar o driver:
Extrair
ms-sparksql-odbc-linux-2.0.0.tar.Abra um terminal no diretório extraído.
Instale o pacote Debian:
sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.deb
O pacote instala os seguintes arquivos:
| File | Local de instalação |
|---|---|
| Biblioteca de pilotos | /usr/lib/libmicrosoftfabricodbc.so |
| Modelo de registro de pilotos | /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template |
| Template de configuração DSN | /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template |
| License | /usr/share/doc/microsoft-fabric-odbc-driver/LICENSE |
| Guia de uso | /usr/share/doc/microsoft-fabric-odbc-driver/USAGE_Linux.md |
Instale um pacote RPM
No RHEL, Fedora ou CentOS, instale o pacote RPM a partir do arquivo de drivers extraídos:
sudo dnf install ./microsoft-fabric-odbc-driver-*.x86_64.rpm
Alternativamente, use rpm:
sudo rpm -i microsoft-fabric-odbc-driver-*.x86_64.rpm
Verifique se o RPM registrou o driver:
odbcinst -q -d | grep "Microsoft"
Para desinstalar o pacote RPM, execute:
sudo dnf remove microsoft-fabric-odbc-driver
Instale um arquivo tar
Para distribuições sem suporte a Debian ou pacotes RPM, ou para um local de instalação personalizado, extraia o .tar.gz pacote e execute seu script de instalação:
tar -xzf microsoft-fabric-odbc-driver-2.0.0-linux-x86_64.tar.gz
cd microsoft-fabric-odbc-driver-2.0.0
# Install to /opt/microsoft/fabricodbc.
sudo ./install.sh
# Or install to a custom writable location.
./install.sh --prefix=$HOME/fabricodbc
O script de instalação suporta estas opções:
| Opção | Description |
|---|---|
--prefix=<path> |
Instale em um diretório personalizado. O padrão é /opt/microsoft/fabricodbc. |
--no-register |
Ignore o registro de drivers do unixODBC. |
--dry-run |
Mostre as mudanças planejadas sem instalar arquivos. |
--uninstall |
Remova os arquivos instalados e desregistre o driver. |
--help |
Mostre ajuda com comandos. |
Para verificar a instalação padrão do tarball, execute:
odbcinst -q -d
ls -la /opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.so
Para desinstalá-lo, execute sudo ./install.sh --uninstall a partir do diretório de pacotes extraídos.
Registrar driver manualmente
O pacote registra automaticamente o driver com unixODBC. Para registrar o driver manualmente, execute:
sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template
Verificar a instalação
Verifique se o driver está registrado e que a biblioteca está instalada:
odbcinst -q -d
ls -la /usr/lib/libmicrosoftfabricodbc.so
O odbcinst comando deve listar [Microsoft ODBC Driver for Microsoft Fabric Data Engineering].
Desinstale o driver
Para desinstalar o driver, execute o seguinte comando:
sudo dpkg -r microsoft-fabric-odbc-driver
Esse comando remove os arquivos do driver e desregistra o driver do unixODBC.
Exemplo de início rápido
Os exemplos a seguir conectam-se ao Fabric e executam uma consulta SQL do Spark. Complete os pré-requisitos e instale o driver antes de rodar um exemplo.
Exemplo 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()
Exemplo em 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;
}
Construa e execute o exemplo:
g++ -o fabric_test fabric_test.cpp -lodbc -std=c++17
./fabric_test
Exemplo 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 da cadeia de conexão
Cadeia de conexão básica
Use o seguinte formato de cadeia de conexão:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};<parameter1>=<value1>;<parameter2>=<value2>;...
Componentes da cadeia de conexão
| Componente | Description | Example |
|---|---|---|
DRIVER |
Identificador do driver ODBC | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
WorkspaceId |
Identificador de espaço de trabalho do Fabric (GUID) | 4bbf89a8-66bb-443f-91af-df31e6a7560b |
LakehouseId |
Identificador Fabric da casa do lago (GUID) | d8faa650-1343-496b-b9cc-d4168a676f90 |
AuthFlow |
Método de autenticação |
AZURE_CLI, CLIENT_CREDENTIAL, CLIENT_CERTIFICATEou ACCESS_TOKEN |
Exemplos de cadeias de conexão
Conexão básica
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI
Conexão com opções de desempenho
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;ReuseSession=true;LargeTableSupport=true;PageSizeBytes=18874368
Conexão com a exploração de madeira
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
Conexão com modo de alta concorrência
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
Para orientações completas de configuração, veja modo de alta concorrência (HC).
Authentication
O Microsoft ODBC Driver for Microsoft Fabric Data Engineering suporta múltiplos métodos de autenticação por meio do Microsoft Entra ID. Configure a autenticação usando o parâmetro AuthFlow na cadeia de conexão ou no DSN.
Métodos de autenticação
AuthFlow Valor |
Description |
|---|---|
AZURE_CLI |
Desenvolvimento usando credenciais da CLI do Azure |
CLIENT_CREDENTIAL |
Principal de serviço com um segredo de cliente |
CLIENT_CERTIFICATE |
Principal de serviço com certificado |
ACCESS_TOKEN |
Token de acesso do portador pré-adquirido |
FILE_TOKEN |
Lê um token de autenticação a partir de um arquivo |
Note
A autenticação interativa no navegador não está disponível em servidores Linux headless. Use a CLI do Azure, autenticação com credenciais de cliente, autenticação baseada em certificado ou autenticação por token de acesso, em vez disso.
Autenticação da CLI do Azure
Use a autenticação da CLI do Azure para o desenvolvimento e aplicativos interativos.
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 se conectar, verifique se a CLI do Azure está instalada e faça login:
az --version
az login
Para instalar o CLI do Azure no Debian ou Ubuntu, use o gerenciador de pacotes:
sudo apt-get update
sudo apt-get install -y azure-cli
Autenticação de credenciais do cliente
Use autenticação de credenciais de clientes para serviços automatizados e trabalhos em 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};"
)
Forneça os parâmetros a seguir:
-
TenantId: O ID do tenant da Microsoft Entra. -
ClientId: A ID do aplicativo (cliente). -
ClientSecret: O segredo do cliente.
Armazene segredos em um armazenamento secreto seguro ou variáveis de ambiente. Não armazene segredos em cadeias de conexão em texto simples ou arquivos INI.
Autenticação baseada em certificado
Use autenticação baseada em certificado para aplicações empresariais que exigem credenciais 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>;"
)
Forneça os parâmetros a seguir:
-
TenantId: O ID do tenant da Microsoft Entra. -
ClientId: A ID do aplicativo (cliente). -
CertificatePath: O caminho para o arquivo de certificados PFX ou PKCS12. -
CertificatePassword: A senha do certificado.
Autenticação de token de acesso
Use autenticação de token de acesso quando sua aplicação adquirir um token por outro 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};"
)
Autenticação de token de arquivo
Use a autenticação por token em arquivo em ambientes conteinerizados e pipelines automatizados, nos quais outro processo grava um token de portador no arquivo de token bem conhecido do driver:
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=FILE_TOKEN;"
)
Para aliases de propriedade cross-driver suportados, veja Aliases de propriedade cross-driver.
Parâmetros de configuração
Parâmetros necessários
Inclua estes parâmetros em cada cadeia de conexão:
| Parâmetro | Tipo | Description | Example |
|---|---|---|---|
WorkspaceId |
Identificador Único Universal (UUID) | Identificador do espaço de trabalho do Fabric | 4bbf89a8-... |
LakehouseId |
Identificador Único Universal (UUID) | Identificador de Fabric lakehouse | d8faa650-... |
AuthFlow |
String | Tipo de fluxo de autenticação | AZURE_CLI |
Parâmetros opcionais
Configurações de conexão
| Parâmetro | Tipo | Padrão | Description |
|---|---|---|---|
Database |
String | None | Banco de dados inicial para o modo clássico. O modo HC não aplica isso automaticamente; execute USE <database> após se conectar ou use nomes de tabela totalmente qualificados. |
Scope |
String | https://api.fabric.microsoft.com/.default |
Escopo do OAuth |
Configurações de desempenho
| Parâmetro | Tipo | Padrão | Description |
|---|---|---|---|
ReuseSession |
booleano | true |
Reutilize uma sessão Spark existente |
LargeTableSupport |
booleano | false |
Habilitar otimizações para grandes conjuntos de resultados |
EnableAsyncPrefetch |
booleano | false |
Habilitar pré-carregamento de dados em segundo plano |
PageSizeBytes |
Número inteiro |
18874368 (18 MB) |
Tamanho da página para paginação de resultados de 1 a 18 MB |
Configurações de registro
| Parâmetro | Tipo | Padrão | Description |
|---|---|---|---|
LogLevel |
String | INFO |
Nível de log: DEBUG, INFO, WARN, ou ERROR. Use DEBUG para diagnósticos detalhados do driver. |
LogFile |
String | odbc_driver.log |
Caminho absoluto ou relativo do arquivo de log |
Configurações de proxy
| Parâmetro | Tipo | Padrão | Description |
|---|---|---|---|
UseProxy |
booleano | false |
Ativar um proxy |
ProxyHost |
String | None | Nome do host proxy |
ProxyPort |
Número inteiro | None | Porta de proxy |
ProxyUsername |
String | None | Nome de usuário de autenticação por proxy |
ProxyPassword |
String | None | Senha de autenticação de proxy |
Configurações de alta concorrência (HC)
Use esses parâmetros para ativar e configurar o modo de alta concorrência (HC). O modo HC é opcional. Se você não definir LivyMode ou UseHighConcurrency, o driver usa o caminho clássico de sessão única. Para orientações e exemplos, veja Modo de alta concorrência (HC).
| Parâmetro | Tipo | Padrão | Description |
|---|---|---|---|
LivyMode |
String | Não definido | Controla a aquisição de sessão. Os valores com suporte são Classic, HighConcurrencye Auto.
Auto Atualmente usa o caminho clássico. |
UseHighConcurrency |
booleano | false |
Ativa o modo HC como alternativa à configuração LivyMode=HighConcurrency. |
SessionTag |
String | None | Fornece uma dica de empacotamento no servidor. As conexões devem usar uma configuração correspondente no servidor para compartilhar uma sessão ativa do Livy. |
IdempotencyKey |
String | None | Fornece uma chave gerada pelo cliente para novas tentativas seguras de obtenção de HC. O driver valida o conjunto de caracteres e nunca registra o valor. |
EnvironmentId |
String | None | Especifica o identificador do ambiente Fabric enviado como spark.fabric.environmentDetails na configuração de aquisição do HC. |
HeartbeatTimeoutInSecond |
Número inteiro | Padrão do servidor | Define o timeout de inatividade da sessão HC do lado do servidor, em segundos. O valor deve ser um inteiro positivo. |
AcquireTimeoutSeconds |
Número inteiro | 300 |
Define por quanto tempo o driver espera que uma sessão HC atinja o estado Idle, em segundos. O valor deve ser um inteiro positivo. |
conf.<key> |
String | None | Especifica uma substituição de configuração do Spark enviada na solicitação de aquisição HC. Por exemplo, conf.spark.sql.shuffle.partitions=200. |
Precedência de modos e validação
-
LivyModeTem prioridade sobreUseHighConcurrencyquando você define ambos os parâmetros. - Os valores dos parâmetros não diferenciam maiúsculas de minúsculas.
-
UseHighConcurrencyaceitatrue,1,yes, ouonpara ativar o modo HC. Aceitafalse,0,no, ouoffpara desativar o modo HC. - Para outros valores não vazios,
SQLDriverConnectretorna um erro. Somente o DSNSQLConnectregistra a falha de validação e usa o caminho clássico.
Configurações de compatibilidade
O driver aceita TenantPrincipal e PoolMax, incluindo suas alternativas por variáveis de ambiente, para compatibilidade com configurações anteriores do HC. O driver analisa e valida esses valores, mas eles não afetam a correspondência de sessões HC ou a capacidade do pool de runtime. Não confie neles para isolamento de inquilinos ou limites de conexão.
Alternativas de variáveis ambientais
O driver usa as seguintes variáveis de ambiente apenas quando o parâmetro correspondente DSN ou string de conexão não está definido:
| Variável de ambiente | Mapeia para |
|---|---|
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 (apenas para compatibilidade) |
FABRIC_ODBC_HC_HEARTBEAT_SECONDS |
HeartbeatTimeoutInSecond |
FABRIC_ODBC_HC_ACQUIRE_TIMEOUT |
AcquireTimeoutSeconds |
FABRIC_ODBC_HC_POOL_MAX |
PoolMax (apenas para compatibilidade) |
Para FABRIC_ODBC_USE_HC, a habilitação somente por ambiente reconhece true, 1 ou yes (sem diferenciar maiúsculas de minúsculas). Outros valores deixam o modo HC desativado. Os on aliases e off se aplicam apenas a valores DSN e de string de conexão.
Modo de alta concorrência (HC)
O modo de alta concorrência (HC) permite que conexões ODBC com o mesmo workspace e lakehouse se conectem a sessões Livy Spark compartilhadas e já ativas no servidor, em vez de provisionar um cluster separado para cada conexão. Use-o para cargas de trabalho, como painéis de BI, kernels de notebook e distribuição de ETL, que abrem muitas conexões de curta duração e podem compartilhar a capacidade do Spark gerenciada pelo servidor.
O modo HC é opcional. Se você não configurar uma configuração HC, o driver usa o caminho clássico de sessão única.
Escolher um modo de conexão
Use o modo HC quando:
- Sua carga de trabalho abre muitas conexões ODBC de curta duração, como painéis de BI, kernels de notebook ou processos ETL paralelos.
- As conexões têm como alvo o mesmo espaço de trabalho e o mesmo lakehouse e podem compartilhar uma sessão Spark gerenciada pelo servidor.
- Reduzir a latência de início a frio por conexão é importante.
Use o modo clássico quando:
- Cada conexão requer uma sessão Spark isolada devido a diferentes configurações do Spark ou isolamento rigoroso de recursos.
- O endpoint do Fabric Livy para o workspace de destino e o lakehouse não é compatível com o modo HC.
Ativar o modo de alta concorrência
Adicione um parâmetro de modo de alta concorrência ao DSN ou à cadeia de conexão.
Recomendado: Definir LivyMode
Use LivyMode para selecionar explicitamente o modo de aquisição de sessão:
LivyMode=HighConcurrency
Os valores com suporte são Classic, HighConcurrencye Auto. Os valores não diferenciam maiúsculas de minúsculas.
Auto Atualmente seleciona o modo clássico.
Alternativa: Set UseHighConcurrency
Use a configuração booleana para compatibilidade com configurações existentes:
UseHighConcurrency=true
Para ativar o modo de alta concorrência, use true, 1, yes, ou on. Para desativá-lo, use false, 0, no, ou off. Os valores não diferenciam maiúsculas de minúsculas.
SQLDriverConnect rejeita outros valores não vazios com SQLSTATE HY024. Somente DSN SQLConnect registra em log a falha de validação e usa o modo clássico.
Note
Se você definir ambos os parâmetros, LivyMode tem precedência sobre UseHighConcurrency.
Você também pode ativar o modo de alta concorrência para a shell atual usando variáveis de ambiente:
export FABRIC_ODBC_USE_HC=true
export FABRIC_ODBC_WORKSPACE_ID=<workspace-id>
export FABRIC_ODBC_LAKEHOUSE_ID=<lakehouse-id>
export FABRIC_ODBC_SESSION_TAG=bi-dashboard
Parâmetros necessários no modo HC
A ativação HC requer os seguintes identificadores válidos:
| Parâmetro | Notes |
|---|---|
WorkspaceId |
Deve ser um GUID válido do Fabric Workspace. |
LakehouseId |
Deve ser um GUID válido da Fabric lakehouse. |
Inclua SessionTag porque isso influencia o matching do lado do servidor para sessões quentes.
Associação de sessões
O modo HC não garante que toda conexão reutilize uma sessão existente. Para cada solicitação de aquisição de sessão, o driver envia:
- O
SessionTagvalor. - A configuração efetiva do Spark, incluindo as configurações de
conf.*eEnvironmentId.
O serviço Fabric Livy avalia esses valores e decide se deve anexar a conexão a uma sessão quente ou criar uma nova sessão. Para melhorar o reuso das sessões, use valores consistentes entre conexões que tenham a intenção de compartilhar a capacidade do Spark gerenciado pelo servidor.
Exemplos de cadeias de conexão
Conexão HC mínima com autenticação da CLI do Azure:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LivyMode=HighConcurrency;SessionTag=bi-dashboard
Conexão HC com tempos limite 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
Conexão HC com um ambiente e substituições de configuração do Spark:
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 com 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 o modo HC em um DSN Linux
Em vez de repetir as configurações de HC em cada cadeia de conexão, armazene-as em ~/.odbc.ini para um DSN específico do usuário ou em /etc/odbc.ini para um DSN de sistema.
[FabricHCDSN]
Description = Microsoft Fabric Data Engineering with HC mode
Driver = Microsoft ODBC Driver for Microsoft Fabric Data Engineering
WorkspaceId = <workspace-id>
LakehouseId = <lakehouse-id>
AuthFlow = AZURE_CLI
LivyMode = HighConcurrency
SessionTag = bi-dashboard
AcquireTimeoutSeconds = 300
HeartbeatTimeoutInSecond = 600
Depois de salvar o DSN, verifique e teste a conexão.
odbcinst -q -s
isql -k -v "DSN=FabricHCDSN;"
Quando uma cadeia de conexão não especifica um valor, o driver lê estas configurações da DSN:
LivyModeUseHighConcurrencyEnvironmentIdSessionTagIdempotencyKeyHeartbeatTimeoutInSecondAcquireTimeoutSeconds
O driver também lê apenas TenantPrincipal compatibilidade e PoolMax configurações. Use os nomes dos parâmetros na tabela de configurações do HC.
Importante
O driver não lê conf.* sobreposições de configuração do Spark do DSN. Adicione-os à cadeia de conexão em tempo de execução ou injete-os antes de chamar SQLDriverConnect.
Desativar o modo HC
Você pode desativar novas aquisições de sessão HC sem precisar reimplantar o driver. Use o método que corresponde a como você ativou o modo HC:
| Fonte de configuração HC | Como desativar o modo HC |
|---|---|
| Apenas variável de ambiente | Defina FABRIC_ODBC_USE_HC=false, ou remova a variável. |
| DSN | Defina LivyMode=Classic. Alternativamente, remova LivyMode e defina UseHighConcurrency=false. |
| string de conexão | Defina LivyMode=Classic, ou remova os parâmetros HC. |
As configurações de conexão string e DSN têm precedência sobre o fallback da variável ambiental. Essas mudanças afetam apenas novas conexões. As sessões de HC existentes continuam até serem encerradas.
Entenda o comportamento em tempo de execução do HC
-
Validação:
SQLDriverConnectrejeita valores booleanos HC e inteiros positivos inválidos com SQLSTATEHY024. Rejeita um valor inválido deLivyModee valores inválidos ou grandes demais deWorkspaceId,LakehouseIdeIdempotencyKeycom SQLSTATEHY000. Um valor de compatibilidadeTenantPrincipalsobredimensionado também retornaHY000. ParaSQLConnectsomente DSN, o driver registra falhas comuns na validação de HC e usa o modo clássico. Valores sensíveis relacionados à segurança excessivamente grandes ainda causam falha na conexão. -
Dados sensíveis: O driver exclui ou remove
IdempotencyKeyoutros campos sensíveis dos logs HC e da saída de diagnóstico. - Cancelamento: O cancelamento da instrução ocorre de forma cooperativa. O processamento no servidor já em andamento é finalizado de forma limpa, em vez de ser encerrado imediatamente.
- Disjuntores: Os modos HC e clássico usam disjuntores separados. Esgotar um modo não afeta o outro.
-
Banco de dados inicial: As conexões HC não executam a instrução
USEinicial para o parâmetroDatabase. ExecuteUSE <database>após conectar ou use nomes de tabelas totalmente qualificados. -
Diagnóstico: Defina
LogLevel=DEBUGpara registrar a aquisição de HC, a sondagem, a liberação e as decisões de mapeamento de erros. Para solução de problemas focada, configureLIVY_HC_VERBOSE=1para incluir diagnósticos HC HTTP adicionais e eliminados.
Configuração de DSN
No Linux, configure nomes de fontes de dados (DSNs) em arquivos INI em vez do registro do Windows.
| File | Scope | Acesso |
|---|---|---|
/etc/odbc.ini |
DSNs em todo o sistema | Requer sudo |
~/.odbc.ini |
DSNs específicas para usuários | Somente usuário atual |
Criar um DSN
Se ~/.odbc.ini existir, adicione a nova seção DSN sem substituir o arquivo existente. Copie o template instalado apenas quando criar o arquivo:
if [ -e "$HOME/.odbc.ini" ]; then
echo "Preserve ~/.odbc.ini and add the new DSN section manually."
else
cp /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template "$HOME/.odbc.ini"
fi
Edite ~/.odbc.ini com os detalhes do seu espaço de trabalho 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
Verifique a DSN
Liste as DSNs configuradas e então teste a conexão:
odbcinst -q -s
isql -k -v "DSN=FabricDSN;"
O isql comando requer as ferramentas de linha de comando unixODBC. A opção -k usa SQLDriverConnect, que permite ao driver processar atributos de conexão do DSN.
Use uma DSN em aplicações
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);
Exemplos de uso
Teste uma conexão com o isql
Inicie uma sessão interativa de SQL:
isql -k -v "DSN=FabricDSN;"
Execute uma única consulta:
echo "SELECT 1 AS test" | isql -k -v "DSN=FabricDSN;" -b
Use -k para DSNs do Fabric para que isql se conecte através de SQLDriverConnect em vez de SQLConnect.
Trabalhar com 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()
Descubra esquemas e tabelas
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()
Mapeamento de tipo de dados
O driver mapeia tipos de dados SQL do Spark para tipos SQL ODBC:
| Tipo Spark SQL | Tipo SQL ODBC | Tipo C/C++ | Tipo do 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_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* |
cadeia de caracteres JSON | string |
MAP |
SQL_VARCHAR |
SQLCHAR* |
cadeia de caracteres JSON | string |
STRUCT |
SQL_VARCHAR |
SQLCHAR* |
cadeia de caracteres JSON | string |
Diferenças de plataforma
| Característica | Windows | Linux |
|---|---|---|
| Gerente de pilotos | Gerenciador de Driver ODBC da Microsoft | unixODBC |
| Binário do driver | microsoftfabricodbc.dll |
libmicrosoftfabricodbc.so |
| Configuração de DSN | Registro e interface gráfica do Windows |
/etc/odbc.ini e ~/.odbc.ini |
| Registro de pilotos | Registro e odbcad32.exe |
odbcinst -i -d -f |
| Cliente HTTP | WinHTTP | libcurl |
| TLS | Suporte embutido para Windows | OpenSSL |
| Autenticação de certificado | Windows CryptoAPI | OpenSSL com arquivos RS256 e PEM ou PFX |
| Autenticação interativa | Janela do navegador | Não disponível em servidores headless |
| Embalagem | Instalador MSI |
.deb, .rpm, ou .tar.gz pacote |
Troubleshooting
Motorista não encontrado
Problema: A conexão falha com [IM002] Data source name not found and no default driver specified.
Soluções:
- Verifique o registro do motorista executando
odbcinst -q -d. - Verifique se existe
/usr/lib/libmicrosoftfabricodbc.so. - Registre o motorista executando
sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template. - Reinstale o pacote executando
sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.deb.
Driver não encontrado após uma instalação via tarball
Problema: O driver está registrado, mas a biblioteca compartilhada não está presente no caminho registrado.
Soluções:
- Verifique se existe
/opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.so. - Executar novamente
sudo ./install.sh --prefix=/opt/microsoft/fabricodbc. - Se você usou um prefixo personalizado, verifique se o caminho do driver registrado usa o mesmo prefixo.
DSN não encontrado
Problema: A conexão falha com [IM002] Data source name not found.
Soluções:
- Verifique a configuração da DSN executando
odbcinst -q -s. - Verifique se
~/.odbc.iniou/etc/odbc.inicontém a seção DSN. - Certifique-se de que o
Drivervalor corresponda exatamente ao nome do motorista registrado.
Falhas na conexão
Problema: O driver não consegue se conectar ao Fabric.
Soluções:
- Verifique se o ID do workspace e o ID do lakehouse são GUIDs válidos.
- Verifique a autenticação da CLI do Azure executando
az account show. - Certifique-se de ter as permissões necessárias para o espaço de trabalho do Fabric.
- Verifique a conectividade de rede e as configurações do proxy.
Erros de autenticação
Problema: A autenticação do CLI do Azure falha.
Soluções:
- Corra
az loginpara atualizar suas credenciais. - Defina a assinatura correta executando
az account set --subscription <subscription-id>. - Verifique o token executando
az account get-access-token --resource https://api.fabric.microsoft.com. - Certifique-se de que sua conta tenha as permissões necessárias para o espaço de trabalho do Fabric.
Erros de biblioteca compartilhada
Problema: O motorista relata error while loading shared libraries: libmicrosoftfabricodbc.so.
Soluções:
- Reinstale o pacote executando
sudo dpkg -i microsoft-fabric-odbc-driver-2.0.0-Linux.deb. - Verifique se existe
/usr/lib/libmicrosoftfabricodbc.so. - Execute
sudo ldconfigpara atualizar o cache da biblioteca compartilhada.
Tempos limite de consulta
Problema: As consultas expiram em tabelas grandes.
Soluções:
- Adicione
LargeTableSupport=trueà cadeia de conexão. - Ajuste
PageSizeBytesde acordo com o tamanho do resultado. - Adicione
EnableAsyncPrefetch=1à cadeia de conexão. - Use uma
LIMITcláusula para restringir o tamanho do resultado.
Habilitar registro de log
Ative o registro detalhado em uma DSN:
[FabricDSN]
LogLevel = DEBUG
LogFile = /tmp/fabric_odbc_debug.log
Alternativamente, adicione parâmetros de registro à cadeia de conexão:
LogLevel=DEBUG;LogFile=/tmp/fabric_odbc_debug.log;
O driver suporta os seguintes níveis logarítmicos:
-
DEBUG: Inclui informações detalhadas de depuração e é o nível de log de driver mais extenso. -
INFO: Inclui informações gerais e é o padrão. -
WARN: Inclui apenas avisos. -
ERROR: Inclui apenas erros.
Ativar o rastreamento unixODBC
Para diagnósticos de chamadas ODBC de baixo nível, adicione a seguinte configuração a /etc/odbcinst.ini:
[ODBC]
Trace = yes
TraceFile = /tmp/odbc_trace.log
Desative o rastreamento quando terminar de solucionar o problema para evitar sobrecarga desnecessária de desempenho.