Che cos'è Photon?

Photon è il motore di query vettorializzato nativo di Azure Databricks che accelera i carichi di lavoro SQL, le chiamate API dataframe, le pipeline ETL e i carichi di lavoro di streaming senza stato. Photon elabora i dati in batch a colonne, offrendo miglioramenti significativi delle prestazioni rispetto all'esecuzione tradizionale basata su righe. Photon è compatibile anche con le API Apache Spark, quindi funziona con il codice esistente senza modifiche necessarie.

Funzionamento di Photon

Per le operazioni supportate, Photon sostituisce il motore di esecuzione Spark SQL basato su JVM con un runtime C++ nativo. Apache Spark Query Optimizer (Catalyst) pianifica ancora la query, ma Photon assume il controllo a livello di esecuzione, elaborando i dati in batch a colonne anziché riga per riga. Quando Photon si imbatte in un'operazione non supportata durante l'esecuzione della query, passa in modo trasparente al runtime di Spark per il resto di tale operazione.

Photon elabora i dati in batch di migliaia di righe alla volta, consentendo alle CPU moderne di usare istruzioni SIMD che valutano più valori per ogni ciclo della CPU. Poiché viene eseguito in C++ nativo anziché nella JVM, Photon elimina le pause della garbage collection, i ritardi di avvio del JIT e il sovraccarico di memoria. L'elaborazione batch colonnare consente letture sequenziali ottimizzate per la cache, massimizzando lo sfruttamento della larghezza di banda della memoria e l'efficienza della pipeline della CPU.

L'architettura di Photon migliora le prestazioni in diversi modi:

  • Accelerazione delle query: Photon offre fino a 5 volte migliori prezzi/prestazioni per i carichi di lavoro di dati e analisi rispetto ad altri data warehouse cloud, misurati dai benchmark TPC-DS standard del settore.
  • Join e shuffle ottimizzati: sostituisce join di tipo sort-merge con hash join ad alte prestazioni e usa un shuffle a colonne riprogettata per aumentare la velocità effettiva per i join su larga scala.
  • Prestazioni di scrittura: il writer Parquet nativo Photon accelera le operazioni di scrittura in Delta Lake, Apache Iceberg e Parquet, incluse le operazioni UPDATE, DELETE, MERGE INTO, INSERT e CREATE TABLE AS SELECT. Le tabelle ampie con migliaia di colonne vedono miglioramenti particolarmente significativi.
  • Efficienza della scansione: implementa il pushdown dei filtri, lo sfoltimento del dizionario e l'esclusione dei gruppi di righe per ridurre la quantità di dati letti dall'archiviazione, anche quando si gestiscono molti file di piccole dimensioni.
  • Cache su disco e concorrenza: offre un accesso ripetuto più rapido tramite la cache su disco e migliora le prestazioni per le query concorrenti nei carichi di lavoro BI interattivi.
  • Integration with SQL and Dataframes API: supporta API SQL e DataFrame in Python, R, Scala e Java senza alcuna modifica del codice.

Photon offre il massimo vantaggio per le query con esecuzione più lunga che elaborano set di dati di grandi dimensioni. Le query che normalmente vengono completate in meno di due secondi non vedono miglioramenti significativi perché il tempo di esecuzione è dominato dalla pianificazione e dalla pianificazione del sovraccarico anziché dall'elaborazione dei dati.

Integrazione con la piattaforma Azure Databricks

Photon accelera i carichi di lavoro nella piattaforma Azure Databricks. Non è necessario modificare il codice o le query per sfruttare i vantaggi di Photon.

  • Analisi SQL e BI: Photon è il motore predefinito per tutti i warehouse SQL, i dashboard di alimentazione, le query ad hoc e i report pianificati.
  • ETL e ingegneria dei dati: i processi Batch creati con SQL o l'API DataFrame traggono vantaggio da analisi, join, aggregazioni e scritture più veloci. Il motore di scrittura Parquet nativo è particolarmente efficace per l'acquisizione in tabelle Delta Lake, tabelle Apache Iceberg o tabelle Parquet.
  • Lakeflow Spark Declarative Pipelines: abilitare Photon nella configurazione della pipeline contribuisce ad accelerare l'esecuzione di Lakeflow Spark Declarative Pipelines.
  • Streaming: Photon supporta lo streaming senza stato durante la scrittura in un sink Delta o Parquet. Le origini dati supportate includono Delta, Parquet, CSV, JSON, Kafka e Kinesis. Lo streaming stateful non è supportato.
  • Intelligenza artificiale e Machine Learning: Photon migliora le prestazioni per le operazioni Spark SQL, DataFrame, progettazione delle funzionalità e GraphFrames.

Abilitazione di Photon

Photon è sempre abilitato nel calcolo serverless, nei warehouse SQL e nelle pipeline dichiarative di Lakeflow Spark serverless.

Per il calcolo classico, il calcolo dei processi e le pipeline dichiarative di Lakeflow Spark classiche, Photon è abilitato per impostazione predefinita e può essere attivato con la casella di controllo Usa accelerazione foton in Prestazioni durante la creazione o la modifica del calcolo. Vedi Usare l'accelerazione Photon. Se crei queste risorse usando l'API Clusters o l'Jobs API, devi abilitare esplicitamente Photon impostando runtime_engine su PHOTON. Se si usa l'API Pipelines, impostare photon su true.

Funzionalità che richiedono l'abilitazione di Photon

Le funzionalità seguenti richiedono l'abilitazione photon:

Tipi di istanza supportati

Photon supporta diversi tipi di istanza nei nodi driver e di lavoro. I tipi di istanza di Photon consumano DBU a un tasso diverso rispetto allo stesso tipo di istanza che esegue il runtime non Photon. Per altre informazioni sulle istanze photon e sul consumo di DBU, vedere la pagina dei prezzi di Azure Databricks.

Operatori, espressioni e tipi di dati supportati

Photon copre gli operatori, le espressioni e i tipi di dati seguenti. Quando una query usa un'operazione non supportata, Photon ripiega automaticamente sul runtime di Spark per quella parte dell'esecuzione.

Operatori

  • Scansione (Parquet, Delta, CSV, JSON), Filtro, Proiezione
  • Aggregazione Hash/Join/Shuffle
  • Nested-Loop unisci
  • Anti Join Consapevole di Null
  • Spatial Join (nelle varianti broadcast e shuffled che supportano ST_Intersects, ST_Contains, ST_Covers, ST_Equals, ST_Touches, ST_Within e ST_DWithin)
  • Unione, Espansione, ScalarSubquery
  • Destinazione di scrittura Delta/Parquet
  • Ordina, TopK, Limit
  • Funzione Window

Espressioni

Queste categorie sono rappresentative, non esaustive. Le singole funzioni all'interno di ogni categoria possono avere limitazioni.

  • Confronto / Logica
  • Aritmetica/Matematica
  • Condizionale (IF, CASE e così via)
  • String
  • Cast
  • Aggregazioni, inclusi Min/Max/MinBy/MaxBy nei tipi annidati
  • Date/Timestamp/DateFormat

Tipo di dati

  • Byte/Short/Int/Long
  • Booleano
  • String / Binary
  • Decimale
  • Float / Double
  • Data/ora
  • TimestampNTZ
  • Struttura
  • Array
  • Mappa
  • Variant
  • Null
  • geometria
  • Geografia
  • Stringa collata

Monitorare l'utilizzo di Photon

È possibile monitorare la quantità di query eseguite su Photon usando gli strumenti seguenti:

  • Interfaccia utente Spark (calcolo classico di tutti gli scopi e processi): nella scheda SQL/DataFramedell'interfaccia utente Spark gli operatori Photon vengono visualizzati in arancione nella visualizzazione DAG della query. Gli operatori Spark standard vengono visualizzati in blu. Ciò consente di identificare quali parti della query traggono vantaggio da Photon e quali ricorrono al runtime Spark.
  • Profilo di query (SQL warehouse ed elaborazione serverless): la vista Dettagli di esecuzione mostra la percentuale del tempo del task trascorsa in Photon. Il piano di query distingue gli operatori Photon (viola) dagli operatori standard (grigio).

Se si nota che una query non usa Photon come previsto, verificare se la query usa operazioni, funzioni definite dall'utente o formati di dati non supportati che causano un fallback al runtime di Spark.

Limiti

  • Se il carico di lavoro raggiunge un'operazione non supportata, la risorsa di calcolo passa in modo trasparente al runtime di Spark per il resto dell'operazione. La tua query continua comunque a produrre risultati corretti.
  • Photon non supporta le UDF (funzioni definite dall'utente), le API RDD o le API Dataset.
  • Lo streaming stateful non è supportato. Photon supporta solo lo streaming senza stato.
  • Photon non migliora le query che normalmente vengono eseguite in meno di due secondi.