Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Databricks dá suporte à sintaxe de junção padrão ANSI. Esta página descreve as diferenças entre junções de dados com processamento em lote e processamento em fluxo.
Observação
O Databricks também dá suporte à sintaxe padrão para os operadores definidos UNION, INTERSECT e EXCEPT. Consulte Operadores de conjunto.
Diferenças entre o streaming e as junções em lote
As junções no Azure Databricks são com estado ou sem estado.
Todas as junções em lote são junções sem estado. Os resultados são processados imediatamente e refletem os dados no momento em que a consulta é feita. Cada vez que a consulta é executada, novos resultados são calculados com base nos dados de origem especificados. Consulte Junções de lote.
As junções de dados de streaming entre duas fontes mantêm 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 avançadas para o processamento de dados online, mas podem ser difíceis de implementar efetivamente. Eles têm semântica operacional complexa dependendo do modo de operação, intervalo de acionamento e marca de tempo. Veja Junções de fluxo a fluxo.
As junções de fluxo-estático 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 alteração lenta). Em vez de unir todos os registros de ambos os lados sempre que uma consulta é executada, somente os registros recém-recebidos da fonte de streaming são unidos à versão atual da tabela estática. Consulte Junções de fluxo-estático.
Junções de lote
O Azure Databricks dá suporte à sintaxe de junção SQL padrão, incluindo junções internas, externas, semi, anti e cruzadas. Consulte JOIN.
Observação
O Databricks recomenda usar uma exibição materializada para otimizar a computação incremental dos resultados de uma junção interna. Confira Exibições materializadas.
Junções entre fluxos
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 a computação e a saída de resultados. Antes de implementar uma junção entre fluxos, o Databricks recomenda desenvolver uma forte compreensão da semântica operacional para streaming com estado, incluindo como os watermarks afetam o gerenciamento de estado. Confira as seguintes páginas:
- O que é streaming com estado?
- Aplique marcação para controlar limites de processamento de dados
- Junções de fluxo a fluxo
Databricks recomenda especificar marcas d'água para ambos os lados de todas as junções entre fluxos. Há suporte para os seguintes tipos de junção:
- Junções internas
- Junções externas à esquerda
- Junções externas direitas
- Junções externas completas
- Junções semi-esquerdas
Consulte a documentação de Streaming Estruturado do Apache Spark em junções entre fluxos.
Junções estáticas de fluxo
Observação
O comportamento descrito para junções estáticas de fluxo pressupõe que os dados estáticos sejam armazenados usando o Delta Lake.
Uma junção stream-static une a versão válida mais recente de uma tabela Delta (os dados estáticos) a um stream de dados usando uma junção sem estado.
Quando o Azure Databricks processa um microlote de dados em uma junção entre dados de fluxo e estático, a versão mais recente e válida dos dados da tabela Delta estática se une aos registros presentes no microlote atual. Como a junção é sem estado, você não precisa configurar a marcação temporal e pode processar os resultados com baixa latência. Os dados na tabela Delta estática usada na junção devem ser de alteração lenta.
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")
)
Sugestões de junção no Azure Databricks
O Apache Spark dá suporte à especificação de indicações para junções de intervalo e junções com desvio. Dicas para junções de distorção não são necessárias porque o Azure Databricks otimiza automaticamente essas junções. Veja dicas.
Indicações para junções de intervalo podem ser úteis se o desempenho de junção for insatisfatório e você estiver realizando junções baseadas em desigualdade. Exemplos incluem a junção em intervalos de marcação de data/hora ou intervalos de IDs de agrupamento. Consulte Otimização de junção por intervalo e Otimização do desempenho de junções no Azure Databricks.