Lakeflow Spark 宣言パイプライン (SDP) では、バッチ パイプラインとストリーミング パイプラインを定義するための SQL インターフェイスとPython インターフェイスの両方がサポートされています。 どちらのインターフェイスも同じ基になるデータフロー グラフを生成するため、ほとんどのデータ処理に同等の機能が提供されます。 柔軟性、アクセシビリティ、機能の範囲が異なります。
このガイダンスを使用して、使用するインターフェイスを決定します。
- SQL でロジックを表現できる場合は、SQL を使用します。
- プログラムによる制御またはPythonのみの機能が必要な場合は、Pythonを使用します。
- Pythonに慣れている場合は、Pythonを使用します。 完全なパイプライン機能セットが含まれているため、十分な知識が必要です。 逆の場合も同じではありません。SQL はすべての機能をカバーしているわけではないので、慣れ親しんだだけでは選択しないでください。
同じパイプラインで両方のインターフェイスを組み合わせることもできます。 「SQL とPythonの混在」を参照してください。
どのような場合に SQL を使用するか
SQL は、次の場合に適しています。
- 可読性の高い宣言型の定義: データエンジニアやアナリストが保守できる明快なロジック。
- 標準テーブルの種類: ストリーミング テーブルと具体化されたビューから主に構築されたパイプライン。
- 線形変換チェーン: 手続き型ロジックを使用しない、ブロンズからシルバーからゴールドへのフローなどの簡単なインジェストと変換。
- スタンドアロン テーブル: SQL で作成したスタンドアロン ストリーミング テーブルまたは具体化されたビュー。
SQL でのパイプライン開発の概要については、「SQL を使用した Lakeflow Spark 宣言型パイプライン コードの開発」を参照してください。
Pythonを使用する場合
Pythonは、必要な場合に適しています。
- プログラムによる制御: パイプライン定義を動的に生成するためのループ、条件、メタプログラミング。
-
外部ライブラリ:
fakerやboto3などの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 TABLE、CREATE 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 |