メインコンテンツまでスキップ

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) : UDFをPythonで定義し、PythonおよびSQLソースファイルの両方から呼び出すことができます。「ユーザー定義のスカラー関数 - Python」を参照してください。
  • Python専用機能 :
    • create_auto_cdc_from_snapshot_flow() データベーススナップショットからチェンジデータキャプチャを適用する。
    • create_sink() およびforeach_batch_sink()を外部イベントストリーミングまたはDeltaの宛先に書き込むために使用します。

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

SQLとPythonの混在

単一のパイプラインで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()

フロー

CREATE FLOW

append_flow()

シンク

サポートされていない

create_sink(), foreach_batch_sink()

エクスペクテーション

CONSTRAINT ... EXPECT

expect()expect_or_drop()expect_or_fail()、およびexpect_allバリアント

決定のサマリー

必要な場合は...

目標

推奨インターフェイス

シンプルさと可読性

SQL

クイック宣言型セットアップ

SQL

スタンドアロン ストリーミングテーブルまたはマテリアライズドビュー

SQL

条件付きロジックまたはループロジック

Python

UDFまたは外部Pythonライブラリ

Python

スナップショットまたはシンクからの自動CDC

Python

プログラムによる完全な制御とモジュール性

Python