Volba mezi SQL a Python

Deklarativní kanály Sparku Lakeflow (SDP) podporují rozhraní SQL i Python pro definování kanálů batch a streamování. Obě rozhraní vytvářejí stejný podkladový graf toku dat, takže poskytují ekvivalentní funkce pro většinu zpracování dat. Liší se v oblasti flexibility, přístupnosti a pokrytí funkcí.

V těchto doprovodných materiálech se můžete rozhodnout, které rozhraní se má použít:

  • Pokud můžete vyjádřit logiku v SQL, použijte SQL.
  • Pokud potřebujete programový ovládací prvek nebo funkci jen pro Python, použijte Python.
  • Pokud vám Python víc vyhovuje, použijte Python. Pokrývá kompletní sadu funkcí pipeline, takže samotná obeznámenost je dostatečným důvodem. Totéž není pravda naopak: SQL nepokrývá každou funkci, takže si ji nevybírejte sama o sobě.

Obě rozhraní můžete také kombinovat ve stejném kanálu. Viz Mix SQL a Python.

Kdy použít SQL

SQL je vhodný, když chcete:

  • Čitelné a deklarativní definice: Jasná logika, kterou mohou datoví inženýři a analytici udržovat.
  • Standardní typy tabulek: Pipeline vytvořené převážně ze streamovacích tabulek a materializovaných zobrazení.
  • Lineární transformační řetězce: Jednoduché načítání a transformace, například tok z bronzové do stříbrné a zlaté vrstvy, bez procedurální logiky.
  • Samostatné tabulky: Samostatné streamovací tabulky nebo materializovaná zobrazení, která vytvoříte v SQL.

Přehled vývoje kanálů v SQL najdete v tématu Vývoj kódu deklarativních kanálů Sparku pro Lakeflow pomocí SQL.

Kdy použít Python

Python je vhodné, když potřebujete:

  • Programové ovládání: Smyčky, podmínky a metaprogramování pro dynamické generování definic pipeline.
  • Externí knihovny: Python balíčky, například faker nebo boto3. Viz Správa závislostí Pythonu pro kanály.
  • Uživatelem definované funkce (UDF):: Uživatelem definované funkce definujete uživatelem v Python a můžete je volat z Python i zdrojových souborů SQL. Viz uživatelem definované skalární funkce – Python.
  • Funkce pouze pro Python:
    • create_auto_cdc_from_snapshot_flow() pro použití zachytávání dat změn ze snímku databáze.
    • create_sink() a foreach_batch_sink() k zapisování do externích streamů událostí nebo cílů Delta.

Přehled vývoje kanálů v Python najdete v tématu Vývoj kódu kanálu pomocí Python.

Kombinace SQL a Python

Jeden kanál může kombinovat definice SQL a Python, ale každý jazyk musí být v samostatném zdrojovém souboru. Můžete například definovat bronzové a stříbrné tabulky v Python a zlatých tabulkách v SQL.

Dostupnost funkcí

Následující tabulka porovnává, jak každé rozhraní podporuje běžné funkce kanálu:

Feature SQL Python
tabulka streamu CREATE STREAMING TABLE create_streaming_table(), table()
materializované zobrazení CREATE MATERIALIZED VIEW materialized_view()
Materializované zobrazení kompatibilní s Iceberg (veřejná předběžná verze) CREATE MATERIALIZED VIEW ... USING ICEBERG. Viz Vytvoření materializovaného zobrazení kompatibilního s externími čtečkami Icebergu. Nepodporováno
Dočasné zobrazení CREATE TEMPORARY VIEW temporary_view()
Soukromá tabulka CREATE PRIVATE STREAMING TABLE, CREATE PRIVATE MATERIALIZED VIEW table(private=True)
Auto CDC AUTO CDC ... INTO create_auto_cdc_flow()
Automatické CDC ze snímku Nepodporováno create_auto_cdc_from_snapshot_flow()
Flow CREATE FLOW append_flow()
Sink Nepodporováno create_sink(), foreach_batch_sink()
Expectations CONSTRAINT ... EXPECT expect(), expect_or_drop(), expect_or_fail() a varianty expect_all

Souhrn rozhodnutí

Pokud potřebujete...

Goal Doporučené rozhraní
Jednoduchost a čitelnost SQL
Rychlé deklarativní nastavení SQL
Samostatná streamovací tabulka nebo materializované zobrazení SQL
Podmíněná nebo cyklická logika Python
UDF nebo externí knihovny Python Python
Automatické CDC ze snapshotů nebo sinků Python
Úplné programové řízení a modularita Python