transmissão estructurada escreve para Azure Synapse
Essa documentação foi descontinuada e pode não estar atualizada.
O conector Azure Synapse oferece suporte eficiente e dimensionável à gravação de transmissão estruturada para Azure Synapse, que proporciona uma experiência consistente ao usuário com lotes de gravação e usa COPY
para grandes transferências de dados entre um clustering Databricks e uma instância Azure Synapse.
O suporte à transmissão estruturada entre Databricks e Synapse oferece uma semântica simples para configurar o trabalho incremental de ETL. O modelo usado para carregar dados do Databricks para o Synapse introduz uma latência que pode não atender aos requisitos de SLA para cargas de trabalho quase em tempo real. Consulte Consultar dados no Azure Synapse Analytics.
Modos de saída suportados para gravações de transmissão para Synapse
O conector do Azure Synapse oferece suporte aos modos de saída Append
e Complete
para acréscimos e agregações de registros. Para obter mais detalhes sobre os modos de saída e a matriz de compatibilidade, consulte o guia de transmissão estruturada.
Synapse semântica de tolerância a falhas
Por meio do site default, a transmissão Azure Synapse oferece garantia exatamente única de ponta a ponta para a gravação de dados em uma tabela Azure Synapse, acompanhando de forma confiável o andamento da consulta usando uma combinação de local de ponto de verificação em DBFS, tabela de ponto de verificação em Azure Synapse e mecanismo de bloqueio para garantir que a transmissão possa lidar com qualquer tipo de falha, nova tentativa e reinício de consulta.
Opcionalmente, o senhor pode selecionar uma semântica at-least-once menos restritiva para a transmissão Azure Synapse, definindo a opção spark.databricks.sqldw.streaming.exactlyOnce.enabled
como false
, caso em que poderá ocorrer duplicação de dados em caso de falhas intermitentes de conexão com Azure Synapse ou de encerramento inesperado da consulta.
transmissão estructurada sintaxe para escrever para Azure Synapse
Os exemplos de código a seguir demonstram gravações de transmissão em Synapse usando a transmissão estruturada em Scala e Python:
- Scala
- Python
// Set up the Blob storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
// Prepare streaming source; this could be Kafka or a simple rate stream.
val df: DataFrame = spark.readStream
.format("rate")
.option("rowsPerSecond", "100000")
.option("numPartitions", "16")
.load()
// Apply some transformations to the data then use
// Structured Streaming API to continuously write the data to a table in Azure Synapse.
df.writeStream
.format("com.databricks.spark.sqldw")
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>")
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>")
.option("forwardSparkAzureStorageCredentials", "true")
.option("dbTable", "<your-table-name>")
.option("checkpointLocation", "/tmp_checkpoint_location")
.start()
# Set up the Blob storage account access key in the notebook session conf.
spark.conf.set(
"fs.azure.account.key.<your-storage-account-name>.dfs.core.windows.net",
"<your-storage-account-access-key>")
# Prepare streaming source; this could be Kafka or a simple rate stream.
df = spark.readStream \
.format("rate") \
.option("rowsPerSecond", "100000") \
.option("numPartitions", "16") \
.load()
# Apply some transformations to the data then use
# Structured Streaming API to continuously write the data to a table in Azure Synapse.
df.writeStream \
.format("com.databricks.spark.sqldw") \
.option("url", "jdbc:sqlserver://<the-rest-of-the-connection-string>") \
.option("tempDir", "abfss://<your-container-name>@<your-storage-account-name>.dfs.core.windows.net/<your-directory-name>") \
.option("forwardSparkAzureStorageCredentials", "true") \
.option("dbTable", "<your-table-name>") \
.option("checkpointLocation", "/tmp_checkpoint_location") \
.start()
Para obter uma lista completa de configurações, consulte Consultar dados no Azure Synapse Analytics.
Synapse gerenciamento da tabela de pontos de controle de transmissão
O conector Azure Synapse não exclui a tabela de pontos de controle de transmissão que é criada quando uma nova consulta de transmissão é iniciada. Esse comportamento é consistente com o checkpointLocation
normalmente especificado para armazenamento de objetos. Databricks recomenda que o senhor exclua periodicamente as tabelas de pontos de verificação de consultas que não serão executadas no futuro.
Em default, todas as tabelas de pontos de controle têm o nome <prefix>_<query-id>
, em que <prefix>
é um prefixo configurável com default valor databricks_streaming_checkpoint
e query_id
é um ID de consulta de transmissão com _
caracteres removidos.
Para encontrar todas as tabelas de pontos de verificação para consultas de transmissão obsoletas ou excluídas, execute a consulta:
SELECT * FROM sys.tables WHERE name LIKE 'databricks_streaming_checkpoint%'
O senhor pode configurar o prefixo com a opção de configuração do Spark SQL spark.databricks.sqldw.streaming.exactlyOnce.checkpointTableNamePrefix
.
Databricks Synapse referência das opções de transmissão do conector
O OPTIONS
fornecido em Spark SQL suporta as seguintes opções de transmissão, além das opções de lotes:
Parâmetro | Obrigatório | Padrão | Notas |
---|---|---|---|
| Sim | Não default | Local em DBFS que será usado pela transmissão estruturada para gravar metadados e informações de ponto de verificação. Consulte Recuperação de falhas com checkpointing no guia de programação do Transmissão Estruturada. |
| Não | 0 | Indica quantos diretórios temporários (mais recentes) devem ser mantidos para limpeza periódica de micro lotes na transmissão. Quando definido como |
checkpointLocation
e numStreamingTempDirsToKeep
são relevantes apenas para gravações de transmissão de Databricks para uma nova tabela em Azure Synapse.