Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
ODBC (Open Database Connectivity) é um padrão amplamente adotado que permite que aplicações clientes se liguem e trabalhem com dados provenientes de bases de dados e plataformas de big data.
O Microsoft ODBC Driver for Fabric Data Engineering permite-lhe ligar, consultar e gerir cargas de trabalho Spark no Fabric com a fiabilidade e simplicidade do padrão ODBC. Construído sobre as APIs Livy da Fabric, o driver fornece conectividade Spark SQL segura e flexível para as suas aplicações compatíveis com C/C++, .NET, Python e outras compatíveis com ODBC no Linux.
Principais características
- Compatível com ODBC 3.x: Implementação completa da especificação ODBC 3.x.
- Autenticação Microsoft Entra ID: Múltiplos fluxos de autenticação, incluindo CLI do Azure, credenciais de clientes, autenticação baseada em certificados e autenticação de token de acesso.
- Suporte para consultas Spark SQL: Execução direta de instruções SQL 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: Gestão de sessões integrada para melhorar o desempenho.
- Modo de alta concorrência: Opte por sessões Livy partilhadas e pré-aquecidas no servidor para reduzir a latência no estabelecimento da ligação e a proliferaçã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 multi-esquema para casas de lago: Ligue-se a um esquema específico dentro de uma casa de lago.
Note
No Apache Spark de código aberto, base de dados e esquema são usados como sinónimos. Por exemplo, executar SHOW SCHEMAS ou SHOW DATABASES num notebook do Fabric devolve o mesmo resultado: uma lista de todos os esquemas do lakehouse.
Pré-requisitos
Antes de usar o Microsoft ODBC Driver for Microsoft Fabric Data Engineering no Linux, certifique-se de que tem os seguintes pré-requisitos:
- Sistema operativo: Ubuntu 22.04 ou posterior, Debian 11 ou posterior, ou Red Hat Enterprise Linux (RHEL) 8 ou posterior em x86-64.
-
unixODBC: O gestor de drivers ODBC para Linux. Instale os pacotes
unixodbceunixodbc-dev. -
libcurl: A dependência HTTP em tempo de execução, como
libcurl4ou o pacote equivalente para a 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 Microsoft Entra ID: Credenciais apropriadas para autenticação.
- IDs de espaço de trabalho e casa do lago: Os identificadores GUID para o seu espaço de trabalho Fabric e a casa do lago.
- CLI do Azure (opcional): Obrigatória quando usa autenticação CLI do Azure.
Descarregar e instalar 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 ficheiros:
| Ficheiro | Local de instalação |
|---|---|
| Biblioteca de pilotos | /usr/lib/libmicrosoftfabricodbc.so |
| Modelo de registo de pilotos | /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template |
| Modelo de configuração DSN | /usr/share/microsoft-fabric-odbc-driver/odbc.ini.template |
| License | /usr/share/doc/microsoft-fabric-odbc-driver/LICENSE |
| Guia de utilização | /usr/share/doc/microsoft-fabric-odbc-driver/USAGE_Linux.md |
Instalar um pacote RPM
No RHEL, Fedora ou CentOS, instale o pacote RPM a partir do arquivo de drivers extraído:
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 registou o condutor:
odbcinst -q -d | grep "Microsoft"
Para desinstalar o pacote RPM, execute:
sudo dnf remove microsoft-fabric-odbc-driver
Instale uma bola de alcatrão
Para distribuições sem suporte a Debian ou pacotes RPM, ou para um local de instalação personalizado, extrai o .tar.gz pacote e executa o 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:
| Option | Description |
|---|---|
--prefix=<path> |
Instala num diretório personalizado. A predefinição é /opt/microsoft/fabricodbc. |
--no-register |
Ignorar o registo do controlador unixODBC. |
--dry-run |
Mostra as alterações planeadas sem instalar ficheiros. |
--uninstall |
Remova os ficheiros instalados e anule o registo do controlador. |
--help |
Mostrar ajuda no comando. |
Para verificar a instalação padrão do tarball, execute:
odbcinst -q -d
ls -la /opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.so
Para o desinstalar, execute sudo ./install.sh --uninstall a partir do diretório de pacotes extraídos.
Registar controlador manualmente
O pacote regista automaticamente o driver com unixODBC. Para registar o driver manualmente, execute:
sudo odbcinst -i -d -f /usr/share/microsoft-fabric-odbc-driver/odbcinst.ini.template
Verifique a instalação
Verifique se o driver está registado e que a biblioteca está instalada:
odbcinst -q -d
ls -la /usr/lib/libmicrosoftfabricodbc.so
O odbcinst comando deve indicar [Microsoft ODBC Driver for Microsoft Fabric Data Engineering].
Desinstalar o driver
Para desinstalar o driver, execute o seguinte comando:
sudo dpkg -r microsoft-fabric-odbc-driver
Este comando remove os ficheiros do driver e desregista o driver do unixODBC.
Exemplo de início rápido
Os exemplos seguintes ligam-se ao Fabric e executam uma consulta SQL no Spark. Cumpra os pré-requisitos e instale o driver antes de executar 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;
}
Constrói e executa o exemplo:
g++ -o fabric_test fabric_test.cpp -lodbc -std=c++17
./fabric_test
Exemplo do .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 ligação
Cadeia básica de ligação
Use o seguinte formato de cadeia de ligação:
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};<parameter1>=<value1>;<parameter2>=<value2>;...
Componentes da corda de ligação
| Component | Description | Exemplo |
|---|---|---|
DRIVER |
Identificador de driver ODBC | {Microsoft ODBC Driver for Microsoft Fabric Data Engineering} |
WorkspaceId |
Identificador de espaço de trabalho Fabric (GUID) | 4bbf89a8-66bb-443f-91af-df31e6a7560b |
LakehouseId |
Identificador de Fabric lakehouse (GUID) | d8faa650-1343-496b-b9cc-d4168a676f90 |
AuthFlow |
Método de autenticação |
AZURE_CLI, CLIENT_CREDENTIAL, CLIENT_CERTIFICATEou ACCESS_TOKEN |
Exemplo de cadeias de conexão
Ligação básica
DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};WorkspaceId=<workspace-id>;LakehouseId=<lakehouse-id>;AuthFlow=AZURE_CLI
Ligação às 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
Ligação com a exploração florestal
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
Ligação com o 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).
Autenticação
O Microsoft ODBC Driver for Microsoft Fabric Data Engineering suporta múltiplos métodos de autenticação através do Microsoft Entra ID. Configure a autenticação utilizando o parâmetro AuthFlow na cadeia de ligação ou no DSN.
Métodos de autenticação
AuthFlow valor |
Description |
|---|---|
AZURE_CLI |
Desenvolvimento utilizando credenciais do CLI do Azure |
CLIENT_CREDENTIAL |
principal de serviço com segredo do cliente |
CLIENT_CERTIFICATE |
Principal de serviço com certificado |
ACCESS_TOKEN |
Token de acesso pré-adquirido ao portador |
FILE_TOKEN |
Lê um token de autenticação a partir de um ficheiro |
Note
A autenticação interativa no navegador não está disponível em servidores Linux sem interface gráfica. Utilize, em alternativa, a autenticação através da CLI do Azure, de credenciais de cliente, baseada em certificados ou por token de acesso.
Autenticação da CLI do Azure
Utilize a autenticação da CLI do Azure para desenvolvimento e aplicações interativas.
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 ligar, verifique se a CLI do Azure está instalada e inicie sessão:
az --version
az login
Para instalar o CLI do Azure no Debian ou Ubuntu, use o gestor de pacotes:
sudo apt-get update
sudo apt-get install -y azure-cli
Autenticação de credenciais do cliente
Use autenticação de credenciais do cliente 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 inquilino da Microsoft Entra. -
ClientId: O ID do aplicativo (cliente). -
ClientSecret: O segredo do cliente.
Armazene segredos num cofre de segredos seguro ou em variáveis de ambiente. Não guarde segredos em cadeias de ligação em texto simples ou ficheiros INI.
Autenticação baseada em certificado
Use autenticação baseada em certificados para aplicações empresariais que requerem 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 inquilino da Microsoft Entra. -
ClientId: O ID do aplicativo (cliente). -
CertificatePath: O caminho para o ficheiro de certificados PFX ou PKCS12. -
CertificatePassword: A palavra-passe do certificado.
Autenticação de token de acesso
Use autenticação de token de acesso quando a sua aplicação adquirir um token através de 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 por token de ficheiro
Use autenticação por token de ficheiro em ambientes containerizados e pipelines automatizados onde outro processo escreve um token portador no ficheiro de token conhecido do driver:
connection_string = (
"DRIVER={Microsoft ODBC Driver for Microsoft Fabric Data Engineering};"
"WorkspaceId=<workspace-id>;"
"LakehouseId=<lakehouse-id>;"
"AuthFlow=FILE_TOKEN;"
)
Para os nomes alternativos de propriedades entre controladores suportados, consulte Nomes alternativos de propriedades entre controladores.
Parâmetros de configuração
Parâmetros necessários
Inclua estes parâmetros em cada cadeia de ligação:
| Parâmetro | Tipo | Description | Exemplo |
|---|---|---|---|
WorkspaceId |
Identificador Único Universal (UUID) | Identificador de espaço de trabalho 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
Definições de ligação
| Parâmetro | Tipo | Default | Description |
|---|---|---|---|
Database |
String | None | Base de dados inicial para o modo clássico. O modo HC não o aplica automaticamente; execute USE <database> depois de estabelecer ligação ou use nomes de tabela completamente qualificados. |
Scope |
String | https://api.fabric.microsoft.com/.default |
Âmbito OAuth |
Configurações de desempenho
| Parâmetro | Tipo | Default | Description |
|---|---|---|---|
ReuseSession |
booleano | true |
Reutilizar uma sessão Spark existente |
LargeTableSupport |
booleano | false |
Permitir otimizações para grandes conjuntos de resultados |
EnableAsyncPrefetch |
booleano | false |
Ativar pré-carregamento de dados em segundo plano |
PageSizeBytes |
Integer |
18874368 (18 MB) |
Tamanho da página para a paginação dos resultados de 1 a 18 MB |
Configurações de registo
| Parâmetro | Tipo | Default | Description |
|---|---|---|---|
LogLevel |
String | INFO |
Nível de registo: DEBUG, INFO, WARN, ou ERROR. Use DEBUG para diagnósticos detalhados de condutores. |
LogFile |
String | odbc_driver.log |
Caminho absoluto ou relativo do ficheiro de registo |
Definições de proxy
| Parâmetro | Tipo | Default | Description |
|---|---|---|---|
UseProxy |
booleano | false |
Ativar um proxy |
ProxyHost |
String | None | Nome do anfitrião do proxy |
ProxyPort |
Integer | None | Porta proxy |
ProxyUsername |
String | None | Nome de utilizador de autenticação por proxy |
ProxyPassword |
String | None | Palavra-passe de autenticação por proxy |
Definições de alta concorrência (HC)
Use estes parâmetros para ativar e configurar o modo de alta concorrência (HC). O modo HC é de adesão voluntária. Se não definires 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 | Default | Description |
|---|---|---|---|
LivyMode |
String | Não definido | Controla a obtenção da sessão. Os valores suportados são Classic, HighConcurrencye Auto.
Auto Atualmente utiliza o caminho clássico. |
UseHighConcurrency |
booleano | false |
Ativa o modo HC como alternativa a definir LivyMode=HighConcurrency. |
SessionTag |
String | None | Fornece uma dica de embalagem do lado do servidor. As ligações devem usar uma configuração correspondente do lado do servidor para partilhar uma sessão quente do Livy. |
IdempotencyKey |
String | None | Fornece uma chave gerada pelo cliente para tentativas seguras de aquisição HC. O driver valida o conjunto de caracteres e nunca regista o valor. |
EnvironmentId |
String | None | Especifica o identificador de ambiente Fabric enviado como spark.fabric.environmentDetails na configuração de aquisição HC. |
HeartbeatTimeoutInSecond |
Integer | Servidor predefinido | Define o timeout de inatividade da sessão HC do lado do servidor, em segundos. O valor deve ser um número inteiro positivo. |
AcquireTimeoutSeconds |
Integer | 300 |
Define durante quanto tempo o controlador aguarda que uma sessão HC atinja o estado Idle, em segundos. O valor deve ser um número inteiro positivo. |
conf.<key> |
String | None | Especifica uma substituição da configuração do Spark enviada no pedido de aquisição de HC. Por exemplo, conf.spark.sql.shuffle.partitions=200. |
Precedência de modos e validação
-
LivyModeTem prioridade sobreUseHighConcurrencyquando defines ambos os parâmetros. - Os valores dos parâmetros não são diferenciados em maiúsculas minúsculas.
-
UseHighConcurrencyaceitatrue,1,yes, ouonpara ativar o modo HC. Aceitafalse,0,no, ouoffpara desativar o modo HC. - Para outros valores não vazios,
SQLDriverConnectdevolve um erro. A configuração apenas com DSNSQLConnectregista a falha de validação e segue o caminho clássico.
Definições de compatibilidade
O driver aceita TenantPrincipal e PoolMax, incluindo as respetivas alternativas através de variáveis de ambiente, para garantir a compatibilidade com configurações HC anteriores. O controlador interpreta e valida estes valores, mas eles não afetam a correspondência das sessões HC nem a capacidade do pool em tempo de execução. Não dependa deles para isolamento de inquilinos ou limites de ligação.
Alternativas para variáveis de ambiente
O driver utiliza as seguintes variáveis de ambiente apenas quando o parâmetro correspondente DSN ou string de ligação não está definido:
| Variável de ambiente | Mapas 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 ativação apenas por ambiente reconhece true, 1 ou yes (sem distinção entre maiúsculas e minúsculas). Outros valores deixam o modo HC desativado. Os on aliases e off aplicam-se apenas a valores DSN e de strings de ligação.
Modo de alta concorrência (HC)
O modo de alta concorrência (HC) permite que as ligações ODBC ao mesmo espaço de trabalho e lakehouse se associem a sessões partilhadas, já ativas, do Livy Spark no servidor, em vez de aprovisionar um cluster separado para cada ligação. Utilize-o para cargas de trabalho como painéis de BI, kernels de notebooks e expansão ETL que abrem muitas ligações de curta duração e podem partilhar capacidade Spark gerida pelo servidor.
O modo HC é de adesão voluntária. Se não configurar uma configuração HC, o controlador utiliza o modo clássico de sessão única.
Escolha um modo de ligação
Use o modo HC quando:
- A sua carga de trabalho abre muitas ligações ODBC de curta duração, como painéis de BI, núcleos de notebooks ou ramificação de ETL.
- As ligações visam o mesmo espaço de trabalho e a mesma casa do lago e podem partilhar uma sessão Spark gerida pelo servidor.
- Reduzir a latência de arranque a frio por ligação é importante.
Use o modo clássico quando:
- Cada ligação requer uma sessão Spark isolada devido a diferentes configurações Spark ou isolamento estrito de recursos.
- O ponto final do Fabric Livy para o espaço de trabalho de destino e o armazém de dados 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 ligação.
Recomendado: Definir LivyMode
Use LivyMode para selecionar explicitamente o modo de aquisição de sessão:
LivyMode=HighConcurrency
Os valores suportados são Classic, HighConcurrencye Auto. Valores não são sensíveis a maiúsculas e minúsculas.
Auto Atualmente seleciona o modo clássico.
Alternativa: Set UseHighConcurrency
Use a definiçã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 o desativar, use false, 0, no, ou off. Valores não são sensíveis a maiúsculas e minúsculas.
SQLDriverConnect rejeita outros valores não vazios com SQLSTATE HY024. Apenas SQLConnect DSN regista a falha de validação e usa o modo clássico.
Note
Se definir ambos os parâmetros, LivyMode tem precedência sobre UseHighConcurrency.
Também pode ativar o modo de alta concorrência para a shell atual utilizando 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 |
Tem de ser um GUID válido da área de trabalho do Fabric. |
LakehouseId |
Tem de ser um GUID válido da Fabric lakehouse. |
Inclui SessionTag porque influencia o matching do lado do servidor para sessões quentes.
Associação de sessões
O modo HC não garante que todas as ligações reutilizam uma sessão existente. Para cada solicitação de obtenção de sessão, o controlador envia:
- O valor
SessionTag. - A configuração efetiva do Spark, incluindo as definições de
conf.*eEnvironmentId.
O serviço Fabric Livy avalia estes valores e decide se deve ligar a ligação a uma sessão quente ou criar uma nova sessão. Para melhorar a reutilização da sessão, utilize valores consistentes entre as ligações que pretendam partilhar a capacidade do Spark gerido pelo servidor.
Exemplo de cadeias de conexão
Ligação mínima do HC 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
Ligação do HC a um ambiente e substituições da 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 o 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 numa DSN Linux
Em vez de repetir as definições de HC em cada cadeia de ligação, guarde-as em ~/.odbc.ini para um DSN específico de utilizador ou em /etc/odbc.ini para um DSN de âmbito do 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 guardares o DSN, verifica-o e testa a ligação.
odbcinst -q -s
isql -k -v "DSN=FabricHCDSN;"
Quando uma cadeia de ligação não especifica um valor, o driver lê estas definições do DSN:
LivyModeUseHighConcurrencyEnvironmentIdSessionTagIdempotencyKeyHeartbeatTimeoutInSecondAcquireTimeoutSeconds
O controlador também lê as definições apenas de compatibilidade TenantPrincipal e PoolMax. Use os nomes dos parâmetros na tabela de definições HC.
Importante
O driver não lê conf.* os overrides de configuração do Spark do DSN. Adicione-os à cadeia de ligação em tempo de execução ou injete-os antes de chamar SQLDriverConnect.
Desativar o modo HC
Podes desativar novas aquisições de sessão HC sem redistribuir o driver. Usa o método que corresponde à forma como ativaste o modo HC:
| Origem da configuração de 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. |
| Cadeia de ligação | Define LivyMode=Classic, ou remove os parâmetros HC. |
As definições da cadeia de ligação e do DSN têm prioridade sobre a alternativa da variável de ambiente. Estas alterações afetam apenas novas ligações. As sessões de HC existentes mantêm-se ativas até serem libertadas.
Compreenda o comportamento em tempo de execução do HC
-
Validação:
SQLDriverConnectrejeita valores booleanos de HC e inteiros positivos inválidos com SQLSTATEHY024. Rejeita um valor inválido deLivyModee valores inválidos ou demasiado grandes deWorkspaceId,LakehouseIdeIdempotencyKeycom SQLSTATEHY000. Um valor de compatibilidadeTenantPrincipalsobredimensionado também devolveHY000. Para apenasSQLConnectDSN, o driver regista falhas normais de validação HC e utiliza o modo clássico. Valores sensíveis do ponto de vista da segurança demasiado grandes continuam a fazer falhar a ligação. -
Dados sensíveis: O driver exclui ou elimina
IdempotencyKeyoutros campos sensíveis dos registos HC e da saída de diagnóstico. - Cancelamento: O cancelamento do extrato é cooperativo. O trabalho do servidor já em curso é concluído de forma controlada, em vez de ser interrompido imediatamente.
- Disjuntores: Os modos HC e clássico usam disjuntores separados. Esgotar um modo não afeta o outro.
-
Base de dados inicial: As ligações HC não executam a instrução inicial
USEpara oDatabaseparâmetro. ExecuteUSE <database>após estabelecer a ligação ou utilize nomes de tabelas completamente qualificados. -
Diagnósticos: Configure
LogLevel=DEBUGpara registar decisões relativas à aquisição, sondagem, libertação e mapeamento de erros de HC. Para uma resolução de problemas direcionada, configureLIVY_HC_VERBOSE=1para incluir diagnósticos HTTP adicionais do HC anonimizados.
Configuração DSN
No Linux, configure os nomes das fontes de dados (DSNs) em ficheiros INI em vez do registo do Windows.
| Ficheiro | Scope | Access |
|---|---|---|
/etc/odbc.ini |
DSNs a nível de sistema | Requer sudo |
~/.odbc.ini |
DSNs específicas para utilizadores | Apenas utilizador atual |
Criar um DSN
Se ~/.odbc.ini existir, adicione a nova secção DSN sem substituir o ficheiro existente. Copie o modelo instalado apenas quando criar o ficheiro:
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 o ~/.odbc.ini com os dados do seu espaço de trabalho do 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
Verificar a DSN
Liste as DSNs configuradas e depois teste a ligação:
odbcinst -q -s
isql -k -v "DSN=FabricDSN;"
O isql comando requer as ferramentas de linha de comandos unixODBC. A opção -k utiliza SQLDriverConnect, o que permite ao controlador processar atributos de ligação por DSN.
Usar uma DSN nas 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 utilização
Testar uma ligação com 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
Utilize -k para DSNs do Fabric para que isql se ligue através de SQLDriverConnect em vez de SQLConnect.
Trabalhe 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()
Descobrir 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 tipos de dados
O driver mapeia os tipos de dados SQL do Spark para tipos SQL ODBC:
| Tipo Spark SQL | Tipo SQL do ODBC | Tipo C/C++ | Tipo 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 |
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 JSON | string |
MAP |
SQL_VARCHAR |
SQLCHAR* |
Cadeia JSON | string |
STRUCT |
SQL_VARCHAR |
SQLCHAR* |
Cadeia JSON | string |
Diferenças de plataforma
| Feature | Windows | Linux |
|---|---|---|
| Gestor de pilotos | Gestor de Controladores Microsoft ODBC | unixODBC |
| Binário do driver | microsoftfabricodbc.dll |
libmicrosoftfabricodbc.so |
| Configuração DSN | Registo e interface gráfica do Windows |
/etc/odbc.ini e ~/.odbc.ini |
| Registo de pilotos | Registo e odbcad32.exe |
odbcinst -i -d -f |
| Cliente HTTP | WinHTTP | libcurl |
| TLS | Suporte integrado para Windows | OpenSSL |
| Autenticação de certificados | Windows CryptoAPI | OpenSSL com ficheiros RS256 e PEM ou PFX |
| Autenticação interativa | Janela do navegador | Não disponível em servidores headless |
| Embalagem | Programa de instalação MSI |
.deb, .rpm, ou .tar.gz pacote |
Solução de problemas
Condutor não encontrado
Problema: A ligação falha com [IM002] Data source name not found and no default driver specified.
Soluções:
- Verifique o registo do condutor executando
odbcinst -q -d. - Verifica que
/usr/lib/libmicrosoftfabricodbc.soexiste. - Registe o condutor 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.
Controlador não encontrado após a instalação de um ficheiro tar
Problema: O condutor está registado, mas a biblioteca partilhada não está presente no caminho registado.
Soluções:
- Verifique se
/opt/microsoft/fabricodbc/lib/libmicrosoftfabricodbc.soexiste. - Executar novamente
sudo ./install.sh --prefix=/opt/microsoft/fabricodbc. - Se usaste um prefixo personalizado, verifica se o caminho do driver registado usa o mesmo prefixo.
DSN não encontrado
Problema: A ligaçã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 secção DSN. - Certifique-se de que o
Drivervalor corresponde exatamente ao nome do condutor registado.
Falhas de ligação
Problema: O driver não consegue ligar-se ao Fabric.
Soluções:
- Verifique se o ID do espaço de trabalho e o ID do lakehouse são GUIDs válidos.
- Verifique a autenticação do CLI do Azure executando
az account show. - Certifique-se de que tem as permissões necessárias para o espaço de trabalho do Fabric.
- Verifique a conectividade de rede e as definições do proxy.
Erros de autenticação
Problema: A autenticação CLI do Azure falha.
Soluções:
- Corre
az loginpara atualizar as tuas credenciais. - Defina a subscrição 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 a sua conta tem as permissões necessárias para o espaço de trabalho Fabric.
Erros de biblioteca partilhada
Problema: O condutor reporta 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
/usr/lib/libmicrosoftfabricodbc.soexiste. - Executa
sudo ldconfigpara atualizar a cache da biblioteca partilhada.
Tempos limite de consulta
Problema: As consultas expiram em tabelas grandes.
Soluções:
- Adicionar
LargeTableSupport=trueà cadeia de conexão. - Ajuste
PageSizeBytespara o tamanho do resultado. - Adicionar
EnableAsyncPrefetch=1à cadeia de conexão. - Use uma
LIMITcláusula para restringir o tamanho do resultado.
Ativar registo de atividades
Ativar o registo detalhado num DSN:
[FabricDSN]
LogLevel = DEBUG
LogFile = /tmp/fabric_odbc_debug.log
Alternativamente, adicione parâmetros de registo à cadeia de ligação:
LogLevel=DEBUG;LogFile=/tmp/fabric_odbc_debug.log;
O driver suporta os seguintes níveis logarítmicos:
-
DEBUG: Inclui informação detalhada de depuração e é o nível de registo do controlador mais verboso. -
INFO: Inclui informação geral e é o padrão. -
WARN: Inclui apenas avisos. -
ERROR: Inclui apenas erros.
Ativar o rastreio 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
Desligue o rastreamento quando terminar a resolução de problemas para evitar sobrecarga desnecessária de desempenho.