Conector do Spark para o Data Warehouse do Microsoft Fabric
O conector do Spark para o Data Warehouse do Fabric permite que desenvolvedores Spark e cientistas de dados acessem e trabalhem com dados de um warehouse e do ponto de extremidade de análise SQL de um lakehouse. O conector oferece os seguintes recursos:
- Você pode trabalhar com dados de um depósito ou ponto de extremidade de análise SQL no mesmo espaço de trabalho ou em vários espaços de trabalho.
- O ponto de extremidade de análise SQL de um Lakehouse é descoberto automaticamente com base no contexto do espaço de trabalho.
- O conector tem uma API simplificada do Spark, abstrai a complexidade subjacente e opera com apenas uma linha de código.
- Enquanto você acessa uma tabela ou um modo de exibição, o conector mantém os modelos de segurança definidos no nível do mecanismo 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 vem pré-instalado no runtime do Fabric, o que elimina a necessidade de instalação separada.
Observação
Atualmente, o conector está em versão prévia. Para obter mais informações, confira limitações atuais posteriormente neste artigo.
Autenticação
A autenticação do Microsoft Entra é uma abordagem de autenticação integrada. Os usuários entram no espaço de trabalho do Microsoft Fabric e suas credenciais são automaticamente passadas para o mecanismo SQL para autenticação e autorização. As credenciais são mapeadas automaticamente, e os usuários não precisarão fornecer as opções de configuração específicas.
Permissões
Para se conectar ao mecanismo SQL, os usuários precisam de pelo menos permissão Leitura (semelhante à permissão CONNECT no SQL Server) no depósito ou no ponto de extremidade da análise SQL (nível de item). Os usuários também precisam de permissões granulares no nível do objeto para ler dados de tabelas ou exibições específicas. Para saber mais, consulte Segurança para Data Warehousing no Microsoft Fabric.
Modelos e exemplos de código
Usar uma assinatura de método
O comando a seguir mostra a assinatura do método synapsesql
para a solicitação de leitura. O argumento de três partes tableName
é necessário para acessar tabelas ou exibições de um depósito e o ponto de extremidade de análise SQL de um lakehouse. Atualize o argumento com os seguintes nomes, com base no seu cenário:
- Parte 1: Nome do armazém ou casa do lago.
- Parte 2: Nome do esquema.
- Parte 3: Nome da tabela ou visualização.
synapsesql(tableName:String="<Part 1.Part 2.Part 3>") => org.apache.spark.sql.DataFrame
Além de ler diretamente de uma tabela ou exibição, esse conector também permite especificar uma consulta personalizada ou de passagem, que é passada para o mecanismo SQL e o resultado retornado ao Spark.
spark.read.option(Constants.DatabaseName, "<warehouse/lakeshouse name>").synapsesql("<T-SQL Query>") => org.apache.spark.sql.DataFrame
Embora esse conector descubra automaticamente o ponto de extremidade para o warehouse/lakehouse especificado, é possível especificá-lo explicitamente.
//For warehouse
spark.conf.set("spark.datawarehouse.<warehouse name>.sqlendpoint", "<sql endpoint,port>")
//For lakehouse
spark.conf.set("spark.lakehouse.<lakeshouse name>.sqlendpoint", "<sql endpoint,port>")
//Read from table
spark.read.synapsesql("<warehouse/lakeshouse name>.<schema name>.<table or view name>")
Ler dados no mesmo espaço de trabalho
Importante
Execute estas instruções de importação no início do notebook ou antes de começar a usar o conector:
Para Scala
import com.microsoft.spark.fabric.tds.implicits.read.FabricSparkTDSImplicits._
import com.microsoft.spark.fabric.Constants
Para PySpark (Python)
import com.microsoft.spark.fabric
from com.microsoft.spark.fabric.Constants import Constants
O código a seguir é um exemplo para ler dados de uma tabela ou exibição em um DataFrame do Spark:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
O código a seguir é um exemplo para ler dados de uma tabela ou exibição em um DataFrame do Spark com um limite de contagem de linhas de 10:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").limit(10)
O código a seguir é um exemplo para ler dados de uma tabela ou exibição em um DataFrame do Spark depois de aplicar um filtro:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").filter("column name == 'value'")
O código a seguir é um exemplo para ler dados de uma tabela ou exibição em um DataFrame do Spark somente para colunas selecionadas:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")
Ler dados em espaços de trabalho
Para acessar e ler dados de um warehouse ou lakehouse em diferentes workspaces, você pode especificar a ID do workspace onde seu warehouse ou lakehouse está localizado e, em seguida, a ID do item do lakehouse ou warehouse. A linha a seguir fornece um exemplo de como ler dados de uma tabela ou visualização em um DataFrame do Spark do warehouse ou lakehouse com a ID do workspace e a ID do lakehouse/warehouse especificadas:
# For lakehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.LakehouseId, "<lakehouse item id>").synapsesql("<lakehouse name>.<schema name>.<table or view name>")
# For warehouse
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
df = spark.read.option(Constants.WorkspaceId, "<workspace id>").option(Constants.DatawarehouseId, "<warehouse item id>").synapsesql("<warehouse name>.<schema name>.<table or view name>")
Observação
Ao executar o notebook, por padrão, o conector procura o depósito ou lakehouse especificado no espaço de trabalho do lakehouse anexado ao notebook. Para fazer referência a um warehouse ou lakehouse de outro workspace, especifique a ID do workspace e a ID do item do lakehouse ou warehouse como mostrado acima.
Crie uma tabela do lakehouse com base nos dados de um depósito
Essas linhas de código fornecem um exemplo de como ler dados de uma tabela ou visualização em um DataFrame do Spark e usá-los para criar uma tabela em um lakehouse:
df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>")
df.write.format("delta").saveAsTable("<Lakehouse table name>")
Solucionar problemas
Após a conclusão, o snippet de resposta de leitura aparecerá na saída da célula. A falha na célula atual também cancela as execuções de células subsequentes do notebook. As informações detalhadas de erros estarão disponíveis nos logs do aplicativo Spark.
Limitações atuais
Atualmente, o conector:
- Oferece suporte à recuperação de dados de depósitos do Fabric e pontos de extremidade de análise SQL de itens do lakehouse.
- O DW de estrutura agora dá suporte ao
Time Travel
, mas esse conector não funciona para uma consulta com sintaxe de viagem no tempo. - Mantém a assinatura de uso como a fornecida com o Apache Spark para Azure Synapse Analytics para consistência. No entanto, não é compatível com versões anteriores para se conectar e trabalhar com o pool SQL dedicado no Azure Synapse Analytics.
- Os nomes de coluna com caracteres especiais serão tratados com a adição de caracteres de escape antes que a consulta, com base no nome da tabela/exibição de 3 partes, seja enviada. No caso de uma leitura personalizada ou baseada em consulta de passagem, os usuários devem escapar nomes de coluna que poderiam conter caracteres especiais.