Conector Spark para o Microsoft Fabric Synapse Data Warehouse

O conector Spark para o Synapse Data Warehouse permite que os desenvolvedores e cientistas de dados do Spark acessem e trabalhem com dados de um depósito 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 data warehouse ou lakehouse entre workspaces, especifique a ID do workspace em que seu data warehouse ou lakehouse existe e, em seguida, a ID do item do lakehouse ou do data warehouse. Esta linha fornece um exemplo de leitura de dados de uma tabela ou exibição em um DataFrame do Spark a partir do data warehouse ou do lakehouse, com a ID do workspace e a ID do lakehouse/data 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 data 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, "<data 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 data warehouse ou lakehouse especificado no workspace do lakehouse anexado ao notebook. Para fazer referência a um data warehouse ou lakehouse a partir de outro workspace, especifique a ID do workspace e a ID de item do data warehouse ou lakehouse como descrito acima.

Crie uma tabela do lakehouse com base nos dados de um depósito

Essas linhas de código fornecem um exemplo para ler dados de uma tabela ou exibição em um DataFrame do Spark e usá-los para criar uma tabela 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.