Partilhar via


Trabalhar com associações no Azure Databricks

O Databricks suporta a sintaxe de junção padrão ANSI. Este artigo descreve as diferenças entre junções com processamento em lote e fluxo.

Nota

O Databricks também oferece suporte à sintaxe padrão para os operadores de conjunto UNION, INTERSECTe EXCEPT. Consulte Definir operadores.

Diferenças entre streaming e junções em lote

As associações no Azure Databricks são com ou sem monitoração de estado.

Todas as junções em lote são uniões sem estado. Os resultados são processados imediatamente e refletem os dados no momento em que a consulta é executada. Cada vez que a consulta é executada, novos resultados são calculados com base nos dados de origem especificados. Consulte Joins em lote.

As uniões entre duas fontes de dados de streaming são com estado. Em junções com estado, o Azure Databricks rastreia informações sobre as fontes de dados e os resultados e atualiza iterativamente os resultados. As junções com estado podem fornecer soluções poderosas para o processamento de dados on-line, mas podem ser difíceis de implementar de forma eficaz. Eles têm semântica operacional complexa, dependendo do modo de saída, intervalo de gatilho e marca d'água. Consulte Junções de fluxo-fluxo.

As junções fluxo-estáticas são sem estado, mas fornecem uma boa opção para unir uma fonte de dados incremental (como uma tabela de fatos) com uma fonte de dados estática (como uma tabela dimensional de mudança lenta). Em vez de unir todos os registros de ambos os lados cada vez que uma consulta é executada, apenas os registros recém-recebidos da fonte de streaming são unidos à versão atual da tabela estática. Consulte Junções estáticas de corrente.

Juntas de lote

O Azure Databricks dá suporte à sintaxe de junção SQL padrão, incluindo junções internas, externas, semi, anti e cruzadas. Veja JOIN.

Nota

A Databricks recomenda o uso de uma visão materializada para otimizar a computação incremental dos resultados de uma junção interna. Ver Vistas materializadas.

Stream-stream junta-se

A junção de duas fontes de dados de streaming pode apresentar desafios significativos no gerenciamento de informações de estado e raciocínio sobre resultados, computação e saída. Antes de implementar uma junção de fluxo a fluxo, a Databricks recomenda desenvolver uma forte compreensão da semântica operacional para streaming com estado, incluindo como os watermarks afetam a gestão de estado. Consulte os seguintes artigos:

Databricks recomenda a especificação de marcas d'água para ambos os lados de todas as junções entre fluxos. Os seguintes tipos de junção são suportados:

  • Junções internas
  • Junções exteriores à esquerda
  • Junções exteriores direitas
  • Junções exteriores completas
  • Junção semiesquerda

Consulte a documentação do Apache Spark Structured Streaming sobre stream-stream joins.

Junções estáticas de fluxo

Nota

O comportamento descrito para junções estáticas de fluxo pressupõe que os dados estáticos são armazenados usando o Delta Lake.

Uma junção estática de fluxo une a tabela Delta na sua versão mais recente e válida (os dados estáticos) a um fluxo de dados utilizando uma junção sem estado.

Quando o Azure Databricks processa um microlote de dados em uma junção estática de fluxo, a versão válida mais recente dos dados da tabela Delta estática se une aos registros presentes no microlote atual. Como a junção é sem estado, não é necessário configurar a marcação de água e pode processar resultados com baixa latência. Os dados na tabela Delta estática utilizada na união devem alterar-se lentamente.

O exemplo a seguir demonstra esse padrão:

streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")

query = (streamingDF
  .join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .table("orders_with_customer_info")
)

Unir sugestões no Azure Databricks

O Apache Spark suporta a especificação de sugestões de junção para junções de intervalo e junções com distorção. Dicas para associações de distorção não são necessárias, pois o Azure Databricks otimiza automaticamente essas junções. Ver Dicas

Sugestões para junções de intervalo podem ser úteis se o desempenho das junções for insatisfatório e você estiver a realizar junções de desigualdade. Os exemplos incluem junção com intervalos de carimbos de data e hora ou intervalos de IDs de agrupamento. Consulte Otimização de junção de intervalo e Otimizar desempenho de associação no Azure Databricks.