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. Baseado nas APIs Livy do Fabric, o driver oferece conectividade segura e flexível com o Spark SQL para seus aplicativos C/C++, .NET e Python, além de outros aplicativos e ferramentas de BI compatíveis com ODBC.
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, interativo, credenciais do cliente, autenticação baseada em certificado e token de acesso
- Suporte à consulta SQL do Spark: execução direta de instruções SQL do Spark
- Suporte a tipos de dados abrangentes: suporte para todos os tipos de dados SQL do Spark, incluindo tipos complexos (ARRAY, MAP, STRUCT)
- Reutilização de sessão: gerenciamento de sessão interno para melhorar o desempenho
- Modo de alta concorrência: Use sessões compartilhadas e pré-aquecidas do Livy no servidor para reduzir a latência no estabelecimento da conexão e a proliferação de clusters do Spark
- Suporte à tabela grande: manipulação otimizada para grandes conjuntos de resultados com tamanhos de página configuráveis
- Pré-busca assíncrona: 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 em um lakehouse: Conecte-se a um esquema específico dentro de um lakehouse
- Integração OneLake: Acesse os dados do lakehouse armazenados no OneLake, incluindo tabelas em múltiplos esquemas, por meio de uma interface ODBC unificada sem configuração de armazenamento separada
- suporte a itens Environment: Anexar itens de ambiente Fabric durante a execução do trabalho para aplicar bibliotecas de workspace, propriedades do Spark e variáveis a cada sessão
- Custom Spark configuration: passe as propriedades de configuração do Spark diretamente pela string de conexão para ajustar o comportamento da sessão
Observação
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 Microsoft ODBC Driver for Microsoft Fabric Data Engineering, verifique se você tem:
- Sistema operacional: Windows 10/11 ou Windows Server 2016+
- Fabric Access: Acesso a um espaço de trabalho Fabric
- Credenciais do Microsoft Entra ID: credenciais adequadas para autenticação
- IDs de espaço de trabalho e casa do lago: identificadores GUID para seu espaço de trabalho Fabric e casa do lago
- CLI do Azure (opcional): necessário para o método de autenticação da CLI do Azure
Baixar e instalar o MSI
- Baixar o pacote MSI do Microsoft ODBC Driver para Engenharia de Dados do Microsoft Fabric
- Clique duas vezes em
MicrosoftFabricODBCDriver-2.0.msi. - Siga o assistente de instalação e aceite o contrato de licença
- Escolha o diretório de instalação (padrão:
C:\Program Files\Microsoft ODBC Driver for Microsoft Fabric Data Engineering\) - Concluir a instalação
Instalação silenciosa
# Silent installation
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /quiet
# Installation with logging
msiexec /i "MicrosoftFabricODBCDriver-2.0.msi" /l*v install.log
Verifique a instalação
Após a instalação, verifique se o driver está registrado:
- Executar
odbcad32.exe(Administrador da Fonte de Dados ODBC) - Navegue até a guia Drivers
- Verifique se "Microsoft ODBC Driver for Microsoft Fabric Data Engineering" está listado
Exemplo de início rápido
Este exemplo demonstra como conectar ao Fabric e executar uma consulta usando o Microsoft ODBC Driver for Microsoft Fabric Data Engineering. Antes de executar esse código, verifique se você concluiu os pré-requisitos e instalou o driver.
Exemplo em 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;
}
Exemplo 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()
Exemplo 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 da cadeia de conexão
Cadeia de conexão básica
O Microsoft ODBC Driver for Microsoft Fabric Data Engineering usa 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 | DESCRIÇÃO | Example |
|---|---|---|
| Driver | Identificador do driver ODBC | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
| WorkspaceID | Identificador do espaço de trabalho do Fabric (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| LakehouseId | Identificador Fabric da casa do lago (GUID) | xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxx |
| AuthFlow | Método de autenticação |
AZURE_CLI, INTERACTIVE, CLIENT_CREDENTIAL, CLIENT_CERTIFICATE, ACCESS_TOKEN, FILE_TOKEN |
Cadeias de conexão de exemplo
Conexão básica (autenticação da CLI do Azure)
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI
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
Com o registro de logs
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;LogLevel=DEBUG;LogFile=odbc_driver.log
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
Veja a seção Modo de alta simultaneidade (HC) para obter instruções completas de configuração.
Autenticação
O Microsoft ODBC Driver for Microsoft Fabric Data Engineering dá suporte a vários métodos de autenticação por meio da ID do Microsoft Entra (anteriormente Azure Active Directory). A autenticação é configurada usando o AuthFlow parâmetro na cadeia de conexão.
Métodos de autenticação
| Valor do AuthFlow | DESCRIÇÃO |
|---|---|
CLIENT_CREDENTIAL (0) |
Principal de serviço com segredo do cliente. Alias: CLIENT_SECRET_CREDENTIAL. |
BROWSER_BASED (1) |
Autenticação interativa baseada em navegador. Alias: INTERACTIVE. |
AZURE_CLI (2) |
Desenvolvimento usando credenciais CLI do Azure. |
CLIENT_CERTIFICATE_CREDENTIAL (3) |
Diretor de serviço com certificado. Alias: CLIENT_CERTIFICATE. |
AUTH_ACCESS_TOKEN (4) |
Token de acesso do portador obtido previamente. Alias: ACCESS_TOKEN. |
FILE_TOKEN (5) |
Lê um token de autenticação de um arquivo. |
Você pode especificar valores de autenticação em SNAKE_CASE MAIÚSCULO, PascalCase ou em formato numérico. O driver também aceita apelidos curtos como Browser, Interactive, CLI, Certificate, Token, e File. O driver ignora caracteres de sublinhado ao comparar valores.
Autenticação da CLI do Azure
Melhor para: desenvolvimento e aplicativos interativos
# 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)
Pré-requisitos:
- CLI do Azure instalada:
az --version - Conectado:
az login
Autenticação interativa do navegador
Melhor para: aplicativos voltados para o usuário
# 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)
Comportamento:
- Abre uma janela do navegador para autenticação do usuário
- As credenciais são armazenadas em cache para conexões subsequentes
Autenticação de credenciais do cliente (principal de serviço)
Melhor 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};"
)
Parâmetros necessários
-
TenantId: ID do locatário do Azure -
ClientId: ID do aplicativo (cliente) da Microsoft Entra ID -
ClientSecret: segredo do cliente do Microsoft Entra ID
Práticas recomendadas
- Armazenar segredos com segurança (Azure Key Vault, variáveis de ambiente)
- Usar identidades gerenciadas quando possível
- Alternar segredos regularmente
Autenticação baseada em certificado
Melhor para: aplicativos empresariais que exigem autenticação baseada em 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=C:\\certs\\mycert.pfx;"
"CertificatePassword=<password>;"
)
Parâmetros necessários:
-
TenantId: ID do locatário do Azure -
ClientId: ID do aplicativo (cliente) -
CertificatePath: caminho para o arquivo de certificado PFX/PKCS12 -
CertificatePassword: senha do certificado
Autenticação de token de acesso
Melhor para: cenários de autenticação 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};"
)
Autenticação de token de arquivo
Use a autenticação por token em arquivo para ambientes em contêineres e pipelines automatizados, nos quais outro processo grava um token ao 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;"
)
O driver resolve a localização do arquivo token no Windows e Linux.
Aliases de propriedades entre drivers
O driver ODBC aceita nomes selecionados de propriedades ADO.NET e JDBC, além dos nomes nativos ODBC. Esse suporte pode reduzir as mudanças na cadeia de conexão quando você se move entre drivers Fabric.
| Propriedade ADO.NET ou JDBC | Equivalente ao ODBC |
|---|---|
FabricWorkspaceID |
WorkspaceId |
FabricLakehouseID |
LakehouseId |
LivySessionTimeoutSeconds |
Tempo de espera da conexão esgotado |
LivyStatementTimeoutSeconds |
Tempo limite da instrução |
ConnectionPoolEnabled |
Pool habilitado |
O driver resolve 17 aliases entre drivers ao estabelecer a conexão.
Parâmetros de configuração
Parâmetros necessários
Esses parâmetros devem estar presentes em todas as cadeias de conexão:
| Parâmetro | Tipo | DESCRIÇÃO | 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 | DESCRIÇÃO |
|---|---|---|---|
| Banco de dados | String | Nenhum | 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 | DESCRIÇÃO |
|---|---|---|---|
| ReuseSession | booleano | true |
Reutilizar sessão do Spark existente |
| SuporteParaGrandesTabelas | booleano | false |
Habilitar otimizações para grandes conjuntos de resultados |
| EnableAsyncPrefetch | booleano | false |
Habilitar pré-carregamento de dados em segundo plano |
| PageSizeBytes | Integer |
18874368 (18 MB) |
Tamanho da página para paginação de resultado (1 a 18 MB) |
Configurações de registro em log
| Parâmetro | Tipo | Padrão | DESCRIÇÃO |
|---|---|---|---|
| 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 do arquivo de log (absoluto ou relativo) |
Configurações de proxy
| Parâmetro | Tipo | Padrão | DESCRIÇÃO |
|---|---|---|---|
| Useproxy | booleano | false |
Habilitar proxy |
| ProxyHost | String | Nenhum | Nome do host do proxy |
| ProxyPort | Integer | Nenhum | Porta de proxy |
| ProxyUsername | String | Nenhum | Nome de usuário de autenticação de proxy |
| ProxyPassword | String | Nenhum | 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 | DESCRIÇÃO |
|---|---|---|---|
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 | Nenhum | 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 | Nenhum | 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 | Nenhum | Especifica o identificador do ambiente Fabric enviado como spark.fabric.environmentDetails na configuração de aquisição do HC. |
HeartbeatTimeoutInSecond |
Integer | 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 |
Integer | 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 | Nenhum | 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 de ambiente
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 (somente 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 HC desativado. Os on aliases e off se aplicam apenas a valores DSN e de string de conexão.
Configurações de ambiente
Você pode anexar um item de ambiente Fabric à sessão do Spark iniciada pelo driver. As bibliotecas do ambiente selecionado, as propriedades do Spark e as variáveis são aplicadas automaticamente quando a sessão é criada.
| Parâmetro | Tipo | Padrão | DESCRIÇÃO |
|---|---|---|---|
| EnvironmentId | Identificador Único Universal (UUID) | Nenhum | Identificador de item de ambiente (GUID) do Fabric a ser aplicado durante a criação da sessão do Spark |
Exemplo de cadeia de conexão com um item de ambiente:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI;EnvironmentId=<environment-id>
Observação
O ambiente é aplicado quando a sessão do Spark é iniciada. Se você também especificar propriedades de configuração personalizadas do Spark, as propriedades de nível de sessão têm precedência sobre os padrões de ambiente.
Configuração personalizada do Spark
Você pode passar as propriedades de configuração do Spark diretamente no cadeia de conexão. Qualquer parâmetro prefixado com spark. é aplicado automaticamente à sessão do Spark no momento da criação, permitindo que você substitua os padrões de workspace ou runtime.
Exemplo de configurações do Spark:
spark.sql.shuffle.partitions=200
spark.sql.adaptive.enabled=true
spark.sql.autoBroadcastJoinThreshold=10485760
Exemplo de string de conexão com propriedades personalizadas do 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
Observação
As propriedades de configuração do Spark são aplicadas quando a sessão é criada. Elas se aplicam a todas as consultas executadas dentro dessa sessão e substituem os padrões de ambiente ou runtime para as mesmas propriedades.
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.
Observação
Se você definir ambos os parâmetros, LivyMode tem precedência sobre UseHighConcurrency.
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.
Cadeias de conexão de exemplo
Conexão HC mínima (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
HC com tempos 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 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 (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
Você pode armazenar as configurações de HC em um DSN em vez de repeti-las em cada cadeia de conexão. 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. Para salvar essas configurações, edite o DSN em odbcad32.exe ou use SQLWritePrivateProfileString. 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.
Configurar DSN
Criar um DSN do sistema
Abrir Administrador ODBC
%SystemRoot%\System32\odbcad32.exeCriar um novo DSN do sistema
- Vá para a aba "DSN do Sistema"
- Selecione "Adicionar"
- Selecione "Microsoft ODBC Driver for Microsoft Fabric Data Engineering"
- Selecione "Concluir"
Definir configurações de DSN
-
Nome da fonte de dados: insira um nome exclusivo (por exemplo,
FabricODBC) - Descrição: descrição opcional
- ID do espaço de trabalho: GUID do espaço de trabalho do Fabric
- ID do Lakehouse: O GUID do Lakehouse do Fabric
- Autenticação: selecionar método de autenticação
- Environment ID (opcional): insira o GUID do item de ambiente Fabric a ser anexado durante a criação da sessão
-
Modo Livy (opcional): Definido para
HighConcurrencyativar o modo HC - Tag de sessão (opcional): Insira um rótulo operacional não sensível para correspondência de sessão HC
- Definir configurações adicionais conforme necessário
-
Nome da fonte de dados: insira um nome exclusivo (por exemplo,
Testar Conexão
- Selecione "Testar Conexão" para verificar as configurações
- Selecione "OK" para salvar
Usar DSN em aplicativos
# Python - Connect using DSN
conn = pyodbc.connect("DSN=FabricODBC")
// .NET - Connect using DSN
using var connection = new OdbcConnection("DSN=FabricODBC");
await connection.OpenAsync();
Exemplos de uso
Conexão e consulta básicas
Python
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));
}
}
}
}
Trabalhando 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;" # 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()
Executar instruções 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 com as instruções INSERT, UPDATE ou DELETE. A contagem de linhas reportada depende se o resultado contém uma contagem de atualizações reconhecida pelo driver.
Descoberta de esquema
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()
Mapeamento de tipo de dados
O driver mapeia tipos de dados SQL do Spark para tipos SQL ODBC:
| Tipo SQL do Spark | Tipo ODBC SQL | Tipo C/C++ | Tipo de Python | Tipo .NET |
|---|---|---|---|---|
| BOOLEAN | SQL_BIT | SQLCHAR | bool | bool |
| BYTE | SQL_TINYINT | SQLSCHAR | int | sbyte |
| CURTO | SQL_SMALLINT | SQLSMALLINT | int | short |
| INT | SQL_INTEGER | SQLINTEGER | int | int |
| LONG | SQL_BIGINT | SQLBIGINT | int | long |
| FLOAT | SQL_REAL | SQLREAL | derivar | derivar |
| DUPLO | SQL_DOUBLE | SQLDOUBLE | derivar | duplo |
| DECIMAL | SQL_DECIMAL | SQLCHAR* | decimal.Decimal | decimal |
| STRING | SQL_VARCHAR | SQLCHAR* | Str | cadeia |
| VARCHAR(n) | SQL_VARCHAR | SQLCHAR* | Str | cadeia |
| CHAR(n) | SQL_CHAR | SQLCHAR* | Str | cadeia |
| 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) | cadeia |
| MAP | SQL_VARCHAR | SQLCHAR* | str (JSON) | cadeia |
| STRUCT | SQL_VARCHAR | SQLCHAR* | str (JSON) | cadeia |
Integração de ferramentas de BI
Microsoft Excel
- Abrir o Excel –> Dados –> Obter dados –> de outras fontes –> do ODBC
- Selecione o DSN configurado (por exemplo,
FabricODBC) - Autentique-se se solicitado
- Navegar e selecionar tabelas
- Carregar dados na planilha do Excel
Power BI Desktop
- Abrir o Power BI Desktop –> Obter Dados –> ODBC
- Selecione o DSN configurado
- Navegar no catálogo de dados e selecionar tabelas
- Transformar dados conforme necessário
- Criar visualizações
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;
Resolução de problemas
Esta seção fornece diretrizes para resolver problemas comuns que você pode encontrar ao usar o Microsoft ODBC Driver for Microsoft Fabric Data Engineering.
Problemas comuns
As seções a seguir descrevem problemas comuns e suas soluções:
Falhas na conexão
Problema: Não consigo conectar ao Fabric
Soluções:
- Verifique se a ID do workspace e a ID do lakehouse são GUIDs válidos
- Verifique a autenticação da CLI do Azure:
az account show - Verifique se você tem permissões de workspace apropriadas do Fabric
- Verificar as configurações de proxy e conectividade de rede
Erros de autenticação
Problema: a autenticação falha com a CLI do Azure
Soluções:
- Executar
az loginpara atualizar credenciais - Verifique o locatário correto:
az account set --subscription <subscription-id> - Verificar a validade do token:
az account get-access-token --resource https://api.fabric.microsoft.com
Tempos limite da consulta
Problema: consultas estão atingindo o tempo limite em tabelas grandes
Soluções:
- Habilitar
LargeTableSupport=true - Ajustar
PageSizeBytespara o tamanho ideal do bloco - Habilitar pré-busca assíncrona:
EnableAsyncPrefetch=1 - Usar
LIMITcláusula para restringir o tamanho do resultado
Habilitar registro de log
Ao solucionar problemas, habilitar o log detalhado pode ajudá-lo a identificar a causa raiz dos problemas. Você pode habilitar o registro em log por meio da cadeia de conexão.
Para habilitar o registro em log detalhado:
LogLevel=DEBUG;LogFile=C:\temp\odbc_driver_debug.log;
Níveis de log:
-
DEBUG: Informações detalhadas de depuração e o nível de log de driver mais extenso -
INFO: informações gerais (padrão) -
WARN: somente avisos -
ERROR: apenas erros
Rastreamento ODBC
Para diagnósticos de baixo nível, você pode habilitar o rastreamento ODBC do Windows para capturar chamadas detalhadas da API ODBC e o comportamento do driver. Lembre-se de desativar o rastreamento quando não for necessário para manter o desempenho ideal.
Para habilitar o rastreamento ODBC:
- Abrir
odbcad32.exe - Vá para a guia "Rastreamento"
- Definir caminho do arquivo de rastreamento (por exemplo,
C:\temp\odbctrace.log) - Selecione "Iniciar Rastreamento Agora"
- Reproduzir o problema
- Selecione "Parar Rastreamento Agora"