Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Importante
Este recurso está em pré-visualização.
O conector Spark para bases de dados SQL é uma biblioteca de alto desempenho que permite ler e escrever para bases de dados SQL Server, Azure SQL e Fabric SQL. O conector oferece os seguintes recursos:
- Use o Spark para executar grandes operações de escrita e leitura em bases de dados Azure SQL, Azure SQL Managed Instance, SQL Server em Azure VM e bases de dados Fabric SQL.
- Quando usa uma tabela ou uma vista, o conector suporta modelos de segurança definidos ao nível do motor SQL. Esses modelos incluem segurança em nível de objeto (OLS), segurança em nível de linha (RLS) e segurança em nível de coluna (CLS).
O conector está pré-instalado no runtime do Fabric, por isso não precisas de o instalar separadamente.
Authentication
A autenticação Microsoft Entra está integrada com o Microsoft Fabric.
- Quando inicia sessão no espaço de trabalho do Fabric, as suas credenciais são automaticamente passadas para o motor SQL para autenticação e autorização.
- Requer que o Microsoft Entra ID esteja ativado e configurado no seu motor de base de dados SQL.
- Não é necessária nenhuma configuração extra no seu código Spark se o Microsoft Entra ID estiver configurado. As credenciais são automaticamente mapeadas.
Também pode usar o método de autenticação SQL (especificando um nome de utilizador e palavra-passe SQL) ou um principal de serviço (fornecendo um token de acesso Azure para autenticação baseada em aplicações).
Permissions
Para usar o conector Spark, a sua identidade — seja um utilizador ou uma aplicação — deve ter as permissões necessárias para a base de dados do motor SQL alvo. Estas permissões são necessárias para ler ou escrever em tabelas e vistas.
Para Azure SQL Database, Azure SQL Managed Instance e SQL Server no Azure VM:
- A identidade que executa a operação normalmente necessita das permissões
db_datawriteredb_datareader, e opcionalmente dedb_ownerpara controlo total.
Para bases de dados SQL Fabric:
- A identidade normalmente requer permissões de
db_datawriteredb_datareader, e opcionalmentedb_owner. - A identidade também precisa de pelo menos permissão de leitura na base de dados SQL do Fabric ao nível do item.
Observação
Se usar um principal de serviço, este pode ser executado como uma aplicação (sem contexto de utilizador) ou como um utilizador se a personificação de utilizador estiver ativada. O principal do serviço deve ter as permissões necessárias para a base de dados necessária para as operações que pretende realizar.
Utilização e exemplos de código
Nesta secção, fornecemos exemplos de código para demonstrar como usar eficazmente o conector Spark para bases de dados SQL. Estes exemplos abrangem vários cenários, incluindo ler e escrever em tabelas SQL, e configurar as opções do conector.
Opções suportadas
A opção mínima necessária é url como "jdbc:sqlserver://<server>:<port>;database=<database>;" ou definir spark.mssql.connector.default.url.
Quando o
urlé fornecido:- Usa
urlsempre como primeira preferência. - Se
spark.mssql.connector.default.urlnão estiver definido, o conector irá configurá-lo e reutilizá-lo para usos futuros.
- Usa
Quando não é
urlfornecido:- Se
spark.mssql.connector.default.urlestiver definido, o conector usa o valor da configuração do spark. - Se
spark.mssql.connector.default.urlnão estiver definido, é lançado um erro porque os detalhes necessários não estão disponíveis.
- Se
Este conector suporta as opções definidas aqui: SQL DataSource JDBC Options
O conector também suporta as seguintes opções:
| Opção | Valor predefinido | Description |
|---|---|---|
reliabilityLevel |
BEST_EFFORT | Controla a fiabilidade das operações de inserção. Valores possíveis: BEST_EFFORT (padrão, mais rápido, pode resultar em linhas duplicadas se o executor reiniciar), NO_DUPLICATES (mais lento, garante que não são inseridas linhas duplicadas mesmo que o executor reinicie). Escolha com base na sua tolerância a duplicados e nas necessidades de desempenho. |
isolationLevel |
"READ_COMMITTED" | Define o nível de isolamento das transações para operações SQL. Valores possíveis: READ_COMMITTED (por defeito, impede a leitura de dados não comprometidos), READ_UNCOMMITTED, REPEATABLE_READ, SNAPSHOT, SERIALIZABLE. Níveis mais elevados de isolamento podem reduzir a concorrência, mas melhorar a consistência dos dados. |
tableLock |
falso | Controla se a dica de bloqueio ao nível de tabela do SQL Server TABLOCK é usada durante as operações de inserção. Valores possíveis: true (ativa o TABLOCK, que pode melhorar o desempenho da escrita em massa), false (por defeito, não usa TABLOCK). Ao definir para true, pode aumentar o débito para grandes inserções, mas pode reduzir a concorrência para outras operações na tabela. |
schemaCheckEnabled |
verdadeiro | Controla se a validação rigorosa do esquema é imposta entre o seu Spark DataFrame e a tabela SQL. Valores possíveis: true (por defeito, impõe correspondência estrita de esquemas), false (permite mais flexibilidade e pode saltar algumas verificações de esquema). Definir para false pode ajudar com desajustes de esquema, mas pode levar a resultados inesperados se as estruturas diferirem significativamente. |
Outras opções de API em massa podem ser configuradas como opções em DataFrame e são passadas para APIs de cópia em massa durante a escrita.
Exemplo de escrita e leitura
O código seguinte mostra como escrever e ler dados utilizando o mssql("<schema>.<table>") método com autenticação automática do ID Microsoft Entra.
Sugestão
Os dados são criados em linha para fins de demonstração. Em um cenário de produção, normalmente leria dados de uma fonte existente ou criaria um DataFrame.
import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
df.write.mode("overwrite").option("url", url).mssql("dbo.publicExample")
spark.read.option("url", url).mssql("dbo.publicExample").show()
url = "jdbc:sqlserver://<server>:<port>;database=<database2>;" # different database
df.write.mode("overwrite").option("url", url).mssql("dbo.tableInDatabase2") # default url is updated
spark.read.mssql("dbo.tableInDatabase2").show() # no url option specified and will use database2
Também pode selecionar colunas, aplicar filtros e usar outras opções quando lê dados do motor de base de dados SQL.
Exemplos de autenticação
Os exemplos seguintes mostram como usar métodos de autenticação diferentes do Microsoft Entra ID, como o principal de serviço (token de acesso) e a autenticação SQL.
Observação
Como mencionado anteriormente, a autenticação do ID Microsoft Entra é gerida automaticamente quando inicia sessão no espaço de trabalho do Fabric, por isso só precisa de usar estes métodos se o seu cenário assim o exigir.
import com.microsoft.sqlserver.jdbc.spark
url = "jdbc:sqlserver://<server>:<port>;database=<database>;"
row_data = [("Alice", 1),("Bob", 2),("Charlie", 3)]
column_header = ["Name", "Age"]
df = spark.createDataFrame(row_data, column_header)
from azure.identity import ClientSecretCredential
credential = ClientSecretCredential(tenant_id="", client_id="", client_secret="") # service principal app
scope = "https://database.windows.net/.default"
token = credential.get_token(scope).token
df.write.mode("overwrite").option("url", url).option("accesstoken", token).mssql("dbo.publicExample")
spark.read.option("accesstoken", token).mssql("dbo.publicExample").show()
Modos de salvamento DataFrame suportados
Quando escreves dados do Spark para bases de dados SQL, podes escolher entre vários modos de gravação. Os modos de gravação controlam como os dados são escritos quando a tabela de destino já existe, e podem afetar o esquema, os dados e a indexação. Compreender estes modos ajuda-o a evitar perdas ou alterações inesperadas de dados.
Este conector suporta as opções aqui definidas: Funções de Spark Save
ErrorIfExists (modo de gravação predefinido): Se a tabela de destino existir, a escrita é abortada e uma exceção é retornada. Caso contrário, é criada uma nova tabela com dados.
Ignorar: Se a tabela de destino existir, a escrita ignora o pedido e não devolve o erro. Caso contrário, é criada uma nova tabela com dados.
Sobrescrever: Se a tabela de destino existir, a tabela é eliminada, recriada e novos dados são adicionados.
Observação
Quando usa
overwrite, o esquema original da tabela (especialmente os tipos de dados exclusivos do MSSQL) e os índices da tabela são perdidos e substituídos pelo esquema inferido do seu DataFrame Spark. Para evitar perder esquemas e índices, use.option("truncate", true)em vez deoverwrite.Anexar: Se a tabela de destino existir, novos dados são adicionados a ela. Caso contrário, é criada uma nova tabela com dados.
Troubleshoot
Quando o processo é concluído, a saída da sua operação de leitura do Spark aparece na área de saída da célula. Os erros de com.microsoft.sqlserver.jdbc.SQLServerException vêm diretamente do SQL Server. Pode encontrar informações detalhadas sobre erros nos registos de aplicação do Spark.