Scegliere tra SQL e Python

Lakeflow Spark Declarative Pipelines (SDP) supporta sia le interfacce SQL che Python per la definizione di pipeline batch e di streaming. Entrambe le interfacce producono lo stesso grafico del flusso di dati sottostante, quindi forniscono funzionalità equivalenti per la maggior parte dell'elaborazione dei dati. Si differenziano per flessibilità, accessibilità e copertura delle funzionalità.

Usare queste linee guida per decidere quale interfaccia usare:

  • Se è possibile esprimere la logica in SQL, usare SQL.
  • Se è necessario un controllo a livello di codice o una funzionalità solo Python, usare Python.
  • Se si ha maggiore familiarità con Python, usare Python. Comprende l’intera gamma di funzionalità della pipeline, quindi la familiarità con essa è di per sé un motivo sufficiente. Lo stesso non è vero in senso inverso: SQL non copre tutte le funzionalità, quindi non sceglierla solo sulla familiarità.

È anche possibile combinare entrambe le interfacce nella stessa pipeline. Vedere Combinazione di SQL e Python.

Quando usare SQL

SQL è una soluzione adatta quando si vuole:

  • Definizioni leggibili e dichiarative: logica chiara che i data engineer e gli analisti possono gestire.
  • Tipi di tabella standard: pipeline costituite principalmente da tabelle di streaming e viste materializzate.
  • Catene di trasformazione lineare: inserimento e trasformazione semplici, ad esempio un flusso da bronzo a argento a oro, senza logica procedurale.
  • Tabelle autonome: tabelle di streaming autonome o viste materializzate create in SQL.

Per una panoramica dello sviluppo di pipeline in SQL, vedere Sviluppare codice di pipeline dichiarative spark di Lakeflow con SQL.

Quando usare Python

Python è una soluzione ottimale quando è necessario:

  • Controllo a livello di codice: cicli, condizionali e metaprogrammazione per generare definizioni di pipeline in modo dinamico.
  • Librerie esterne: Python pacchetti come faker o boto3. Consulta Gestione delle dipendenze Python per le pipeline.
  • Funzioni definite dall'utente: è possibile definire funzioni definite dall'utente in Python e chiamarle sia da file di origine Python che da file di origine SQL. Vedere Funzioni scalari definite dall'utente - Python.
  • funzionalità solo Python:
    • create_auto_cdc_from_snapshot_flow() per applicare l'acquisizione dei dati delle modifiche da un'istantanea del database.
    • create_sink() e foreach_batch_sink() per scrivere in streaming di eventi esterni o in destinazioni Delta.

Per una panoramica dello sviluppo di pipeline in Python, vedere Sviluppare codice della pipeline con Python.

Combinare SQL e Python

Una singola pipeline può combinare definizioni SQL e Python, ma ogni linguaggio deve trovarsi in un file di origine separato. Ad esempio, è possibile definire le tabelle bronze e silver in Python e le tabelle gold in SQL.

Disponibilità della funzionalità

La tabella seguente confronta il modo in cui ogni interfaccia supporta le funzionalità della pipeline comuni:

Caratteristica / Funzionalità SQL Python
tabella di streaming CREATE STREAMING TABLE create_streaming_table(), table()
vista materializzata CREATE MATERIALIZED VIEW materialized_view()
Visualizzazione temporanea CREATE TEMPORARY VIEW temporary_view()
Tabella privata CREATE PRIVATE STREAMING TABLE, CREATE PRIVATE MATERIALIZED VIEW table(private=True)
CDC automatico AUTO CDC ... INTO create_auto_cdc_flow()
Cdc automatico dallo snapshot Non supportato create_auto_cdc_from_snapshot_flow()
Flusso CREATE FLOW append_flow()
Sink Non supportato create_sink(), foreach_batch_sink()
Expectations CONSTRAINT ... EXPECT expect(), expect_or_drop(), expect_or_fail(), e le varianti expect_all

Riepilogo delle decisioni

Se hai bisogno di...

Obiettivo Interfaccia consigliata
Semplicità e leggibilità SQL
Configurazione dichiarativa rapida SQL
Tabella di streaming autonoma o vista materializzata SQL
Logica condizionale o iterativa Python
UDFs o librerie Python esterne Python
CDC automatico da snapshot o sinks Python
Controllo completo a livello di codice e modularità Python