Conector Spark para Microsoft Fabric Synapse Data Warehouse

O conector Spark para Synapse Data Warehouse permite que desenvolvedores e cientistas de dados do Spark acessem e trabalhem com dados de um armazém 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 Spark simplificada, 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 dentro do tempo de execução da malha, o que elimina a necessidade de instalação separada.

Nota

O conector está atualmente em visualização. Para obter mais informações, consulte as limitações atuais mais adiante 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 passadas automaticamente para o mecanismo SQL para autenticação e autorização. As credenciais são mapeadas automaticamente e os usuários não precisam fornecer opções de configuração específicas.

Permissões

Para se conectar ao mecanismo SQL, os usuários precisam de pelo menos permissão de Ler (semelhante à permissão CONNECT no SQL Server) no depósito ou no ponto de extremidade de 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 armazenamento de dados no Microsoft Fabric.

Modelos de código e exemplos

Usar uma assinatura de método

O comando a seguir mostra a assinatura do synapsesql método 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 vista.
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 armazém / lakehouse especificado, se você quiser especificá-lo explicitamente, poderá fazê-lo.

//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 seu bloco de notas ou antes de começar a utilizar 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 Spark DataFrame:

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 Spark DataFrame 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 apenas para colunas selecionadas:

df = spark.read.synapsesql("<warehouse/lakehouse name>.<schema name>.<table or view name>").select("column A", "Column B")

Ler dados entre espaços de trabalho

Para acessar e ler dados de um data warehouse ou lakehouse em espaços de trabalho, você pode especificar o ID do espaço de trabalho onde seu data warehouse ou lakehouse existe e, em seguida, lakehouse ou data warehouse item id. Esta linha fornece um exemplo de leitura de dados de uma tabela ou exibição em um DataFrame do Spark DataFrame do data warehouse ou lakehouse com o ID do espaço de trabalho especificado e o ID do lakehouse/data warehouse:

# 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>")

Nota

Quando você estiver executando o bloco de anotações, por padrão, o conector procura o data warehouse ou lakehouse especificado no espaço de trabalho do lakehouse conectado ao notebook. Para fazer referência a um data warehouse ou lakehouse a partir de outro espaço de trabalho, especifique o ID do espaço de trabalho e o ID do item lakehouse ou data warehouse como acima.

Criar uma tabela lakehouse com base em dados de um armazém

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

Resolver problemas

Após a conclusão, o trecho de resposta de leitura aparece na saída da célula. Uma falha na célula atual também cancela as execuções subsequentes da célula do bloco de anotações. Informações detalhadas sobre erros estão disponíveis nos logs do aplicativo Spark.

Limitações atuais

Atualmente, o conector:

  • Suporta a recuperação de dados de armazéns de malha e pontos de extremidade de análise SQL de itens lakehouse.
  • O Fabric DW agora suporta Time Travel , no entanto, esse conector não funciona para uma consulta com sintaxe de viagem no tempo.
  • Reté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 conectar-se e trabalhar com um pool SQL dedicado no Azure Synapse Analytics.
  • Os nomes de colunas com caracteres especiais serão manipulados adicionando 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 precisam escapar de nomes de colunas que contenham caracteres especiais.