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