Pular para o conteúdo principal

Trabalhe com o join em Databricks

Databricks suporta a sintaxe join padrão ANSI. Esta página descreve as diferenças entre a junção com lotes e o processamento de 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 lotes join

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.

nota

Databricks recomenda o uso de um view materializado para otimizar a computação incremental dos resultados de um join interno. Consulte Visualização materializada.

transmissão-transmissão join

A junção de duas transmissões fonte de dados pode apresentar desafios significativos no gerenciamento de informações de estado e no raciocínio sobre o cálculo e a saída de resultados. Antes de implementar uma join transmissão-transmissão, Databricks recomenda desenvolver uma sólida compreensão da semântica operacional para transmissão com estado, incluindo como as marcas d'água impactam o gerenciamento de estado. Consulte as páginas seguintes:

Databricks recomenda especificar marcas d'água para ambos os lados de todas as junções transmissão-transmissão. Os seguintes tipos 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 de transmissão estruturada Apache Spark em transmissão-transmissão join.

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 Databricks processa um microlote de dados em uma join estática de transmissão, a versão válida mais recente dos dados da tabela Delta estática é unida aos registros presentes no microlote atual. Como a join não mantém 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 join devem mudar 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-se às dicas no Databricks

Apache Spark oferece suporte à especificação de dicas join para junções por intervalo e junções assimétricas. Não são necessárias dicas para junções assimétricas, pois 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.