Condividi tramite


Utilizzo dei join su Azure Databricks

Databricks supporta la sintassi di join standard ANSI. Questo articolo descrive le differenze tra join nell'elaborazione batch e nell'elaborazione del flusso.

Nota

Databricks supporta anche la sintassi standard per gli operatori set UNION, INTERSECTe EXCEPT. Vedere Impostare gli operatori.

Differenze tra join di streaming e batch

I join in Azure Databricks sono con stato o senza stato.

Tutti i join batch sono join senza stato. I risultati vengono elaborati immediatamente e riflettono i dati al momento dell'esecuzione della query. Ogni volta che viene eseguita la query, i nuovi risultati vengono calcolati in base ai dati di origine specificati. Vedere Join di batch.

Le unioni tra due fonti di dati in streaming sono con stato. Nei join con stato, Azure Databricks tiene traccia delle informazioni sulle origini dati e dei risultati e aggiorna in modo iterativo i risultati. I join con stato possono offrire potenti soluzioni per l'elaborazione dei dati online, ma possono essere difficili da implementare in maniera efficace. Hanno una semantica operativa complessa a seconda della modalità di output, dell'intervallo di trigger e della filigrana. Consulta join di flussi di dati.

I join di flusso statici sono privi di stato, ma offrono una buona opzione per unire un'origine dati incrementale (come una tabella dei fatti) con un'origine dati statica, come una tabella dimensionale a modifica lenta. Anziché unire tutti i record da entrambi i lati ogni volta che viene eseguita una query, solo i record appena ricevuti dall'origine di streaming vengono uniti alla versione corrente della tabella statica. Vedere Join statici di flusso.

Unioni di batch

Azure Databricks supporta la sintassi di join SQL standard, tra cui inner, outer, semi, anti e cross join. Vedi JOIN.

Nota

Databricks consiglia di usare una vista materializzata per ottimizzare il calcolo incrementale dei risultati di un inner join. Vedere Viste materializzate.

Join tra stream e stream

L'unione di due origini dati di streaming può presentare problematiche significative nella gestione delle informazioni sullo stato e nel ragionamento sui risultati di calcolo e output. Prima di implementare un join tra flussi, Databricks consiglia di sviluppare una conoscenza approfondita della semantica operativa per lo streaming con stato persistente, compreso come le filigrane influiscono sulla gestione dello stato. Fai riferimento ai seguenti articoli:

Databricks consiglia di specificare i marcatori temporali per entrambi i lati di tutti i join di flusso-flusso. Sono supportati i tipi di join seguenti:

  • Inner join
  • Left outer join
  • Right outer join
  • Full outer join
  • Semi join di sinistra

Vedere la documentazione di Apache Spark Structured Streaming sui join tra flussi.

Join statici di flusso

Nota

Il comportamento descritto per i join statici di flusso presuppone che i dati statici vengano archiviati usando Delta Lake.

Un join tra dati flusso e dati statici unisce la versione valida più recente di una tabella Delta (i dati statici) a un flusso di dati utilizzando un join privo di stato.

Quando Azure Databricks elabora un micro-batch di dati in un join tra flusso e statico, la versione valida più recente dei dati dalla tabella statica Delta si unisce ai record presenti nel micro-batch corrente. Poiché il join è senza stato, non è necessario configurare la filigrana e i risultati possono essere elaborati con bassa latenza. I dati nella tabella Delta statica utilizzata nel join devono essere lentamente variabili.

Nel seguente esempio viene illustrato questo modello:

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

Hint di aggiunta in Azure Databricks

Apache Spark supporta l'utilizzo di suggerimenti di join per join di intervallo e join sbilanciati. I suggerimenti per i join di asimmetria non sono necessari perché Azure Databricks ottimizza automaticamente questi join. Vedere Suggerimenti

I suggerimenti per i join di intervallo possono essere utili se le prestazioni dei join sono scarse e si eseguono join di diseguaglianza. Gli esempi includono il join su intervalli di contrassegni temporali o un intervallo di ID di clustering. Vedere Ottimizzare l'intervallo di join e Ottimizzare le prestazioni di join in Azure Databricks.