SQL と Pythonの間で選択する

Lakeflow Spark 宣言パイプライン (SDP) では、バッチ パイプラインとストリーミング パイプラインを定義するための SQL インターフェイスとPython インターフェイスの両方がサポートされています。 どちらのインターフェイスも同じ基になるデータフロー グラフを生成するため、ほとんどのデータ処理に同等の機能が提供されます。 柔軟性、アクセシビリティ、機能の範囲が異なります。

このガイダンスを使用して、使用するインターフェイスを決定します。

  • SQL でロジックを表現できる場合は、SQL を使用します。
  • プログラムによる制御またはPythonのみの機能が必要な場合は、Pythonを使用します。
  • Pythonに慣れている場合は、Pythonを使用します。 完全なパイプライン機能セットが含まれているため、十分な知識が必要です。 逆の場合も同じではありません。SQL はすべての機能をカバーしているわけではないので、慣れ親しんだだけでは選択しないでください。

同じパイプラインで両方のインターフェイスを組み合わせることもできます。 「SQL とPythonの混在」を参照してください。

どのような場合に SQL を使用するか

SQL は、次の場合に適しています。

  • 可読性の高い宣言型の定義: データエンジニアやアナリストが保守できる明快なロジック。
  • 標準テーブルの種類: ストリーミング テーブルと具体化されたビューから主に構築されたパイプライン。
  • 線形変換チェーン: 手続き型ロジックを使用しない、ブロンズからシルバーからゴールドへのフローなどの簡単なインジェストと変換。
  • スタンドアロン テーブル: SQL で作成したスタンドアロン ストリーミング テーブルまたは具体化されたビュー。

SQL でのパイプライン開発の概要については、「SQL を使用した Lakeflow Spark 宣言型パイプライン コードの開発」を参照してください。

Pythonを使用する場合

Pythonは、必要な場合に適しています。

  • プログラムによる制御: パイプライン定義を動的に生成するためのループ、条件、メタプログラミング。
  • 外部ライブラリ: fakerboto3などのPythonパッケージ。 パイプラインの Python 依存関係の管理に関するページを参照してください。
  • ユーザー定義関数 (UDF): Pythonで UDF を定義し、Pythonと SQL の両方のソース ファイルから UDF を呼び出すことができます。 「ユーザー定義スカラー関数 - Python」を参照してください。
  • Python専用の機能:
    • create_auto_cdc_from_snapshot_flow() をクリックして、データベース スナップショットから変更データ キャプチャを適用します。
    • create_sink()foreach_batch_sink() を使用して、外部イベント ストリーミングまたは Delta の宛先に書き込むには。

Pythonでのパイプラインの開発の概要については、「Pythonを使用したパイプライン コードの開発」を参照してください。

SQL とPythonの混在

1 つのパイプラインで SQL 定義とPython定義を組み合わせることができますが、各言語は個別のソース ファイルに含める必要があります。 たとえば、Pythonでブロンズ テーブルとシルバー テーブルを定義し、SQL でゴールド テーブルを定義できます。

機能の可用性

次の表は、各インターフェイスが一般的なパイプライン機能をサポートする方法を比較したものです。

機能 SQL Python
ストリーミングテーブル CREATE STREAMING TABLE create_streaming_table()table()
具体化されたビュー CREATE MATERIALIZED VIEW materialized_view()
一時ビュー CREATE TEMPORARY VIEW temporary_view()
専用テーブル CREATE PRIVATE STREAMING TABLECREATE PRIVATE MATERIALIZED VIEW table(private=True)
自動 CDC AUTO CDC ... INTO create_auto_cdc_flow()
スナップショットからの自動CDC サポートしていません create_auto_cdc_from_snapshot_flow()
Flow CREATE FLOW append_flow()
シンク サポートしていません create_sink()foreach_batch_sink()
Expectations CONSTRAINT ... EXPECT expect()expect_or_drop()expect_or_fail()、および expect_all バリアント

決定の要約

必要な場合...

ゴール 推奨されるインターフェイス
シンプルさと読みやすさ SQL
宣言型の簡単なセットアップ SQL
スタンドアロン ストリーミング テーブルまたは具体化されたビュー SQL
条件付きロジックまたはループ ロジック Python
UDF または外部Python ライブラリ Python
スナップショットまたはシンクからの CDC の自動化 Python
プログラムによる完全な制御とモジュール性 Python