Pular para o conteúdo principal

Trabalhe com o join em Databricks

Databricks suporta a sintaxe padrão ANSI join. Este artigo descreve as diferenças entre o processamento de junção com lotes e transmissão.

nota

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

Diferenças entre transmissão e loteamento

A adesão ao site Databricks é feita com ou sem estado.

Todas as uniões de lotes são uniões sem estado. Os resultados são processados imediatamente e refletem os dados no momento da execução da consulta. Sempre que a consulta é executada, novos resultados são calculados com base nos dados de origem especificados. Veja a junção de lotes.

A junção entre duas fontes de transmissão de dados é de estado. No stateful join, o site Databricks rastreia informações sobre a fonte de dados e os resultados e atualiza os resultados de forma iterativa. A junção de estados pode fornecer soluções poderosas para o processamento de dados on-line, mas pode ser difícil de implementar de forma eficaz. Eles têm uma semântica operacional complexa, dependendo do modo de saída, do intervalo de acionamento e da marca d'água. Ver transmissão-transmissão join.

A junção transmissão-estática não tem estado, mas é uma boa opção para unir uma fonte de dados incremental (como uma tabela de fatos) a uma fonte de dados estática (como uma tabela dimensional que muda lentamente). Em vez de unir todos os registros de ambos os lados sempre que uma consulta é executada, apenas os registros recém-recebidos da fonte de transmissão são unidos à versão atual da tabela estática. Ver união transestática.

lotes se juntam

Databricks é compatível com a sintaxe padrão do SQL join , incluindo junção interna, externa, semi, anti e cruzada. Veja como participar.

transmissão-transmissão join

A união de duas fontes de transmissão de dados pode apresentar desafios significativos no gerenciamento de informações de estado e no raciocínio sobre a computação e a saída de resultados. Antes de implementar uma transmissão-transmissão join, o site Databricks recomenda o desenvolvimento de um sólido entendimento da semântica operacional da transmissão com estado, inclusive como as marcas d'água afetam o gerenciamento do estado. Consulte os artigos a seguir:

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

  • União interna
  • União externa esquerda
  • Junção externa direita
  • Junção externa completa
  • Semi junção esquerda

Consulte a documentação da Apache Spark transmissão estructurada sobre a união da transmissão-vapor.

união transmissível-estática

nota

O comportamento descrito para a união transmissão-estática pressupõe que os dados estáticos sejam armazenados usando Delta Lake.

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

Quando o Databricks processa um micro-batch de dados em uma união estática de fluxo, a última versão válida dos dados da tabela Delta estática se une aos registros presentes no micro-batch atual. Como a união é sem estado, você não precisa configurar a marca d'água e pode processar os resultados com baixa latência. Os dados na tabela Delta estática usada na união devem estar mudando lentamente.

O exemplo a seguir demonstra esse padrão:

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

junte dicas sobre Databricks

Apache Spark suporta a especificação de join dicas para união de intervalos e união oblíqua. Não são necessárias dicas para junções oblíquas, pois o site Databricks otimiza automaticamente essas junções. Veja as dicas

As dicas para a união de intervalos podem ser úteis se o join desempenho for ruim e o senhor estiver realizando uma união de desigualdade. Os exemplos incluem a união em intervalos de carimbo de data/hora ou um intervalo de IDs de clustering. Consulte Otimização do intervalo join e Otimizar join desempenho em Databricks.