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.
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.
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:
- O que é transmissão stateful?
- Aplicar marcas d'água para controlar o limite de processamento de dados
- transmissão-transmissão join
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
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:
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.