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は次の場合に適しています:
- プログラムによる制御 :ループ、条件、およびメタプログラミングにより、パイプライン定義を動的に生成します。
- 外部ライブラリ :
fakerやboto3などの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 |
|---|---|---|
ストリーミングテーブル |
|
|
マテリアライズドビュー |
|
|
一時的ビュー |
|
|
プライベートテーブル |
|
|
自動CDC |
|
|
スナップショットからの自動CDC | サポートされていない |
|
フロー |
|
|
シンク | サポートされていない |
|
エクスペクテーション |
|
|
決定のサマリー
必要な場合は...
目標 | 推奨インターフェイス |
|---|---|
シンプルさと可読性 | SQL |
クイック宣言型セットアップ | SQL |
スタンドアロン ストリーミングテーブルまたはマテリアライズドビュー | SQL |
条件付きロジックまたはループロジック | Python |
UDFまたは外部Pythonライブラリ | Python |
スナップショットまたはシンクからの自動CDC | Python |
プログラムによる完全な制御とモジュール性 | Python |