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

SQLとPythonの選択

LakeFlow Pipelines は、バッチおよびストリーミング パイプラインを定義するための SQL および Python の両方のインターフェイスをサポートしています。両方のインターフェイスは同じ基盤となるデータフロー グラフを生成するため、ほとんどのデータ処理に対して同等の機能を提供します。それらは、柔軟性、アクセシビリティ、機能カバレッジが異なります。

使用するインターフェースを決定するには、このガイダンスを使用してください:

  • ロジックをSQLで表現できる場合は、SQLを使用してください。
  • プログラムによる制御、またはPythonのみの機能が必要な場合は、Python を使用してください。
  • Pythonの方が使い慣れている場合は、Pythonを使用してください。これはパイプラインの全機能セットを網羅しているため、慣れているというだけで十分な理由となります。逆もまた真ではありません:SQLはすべての機能を網羅しているわけではないため、慣れているという理由だけで選択しないでください。

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

SQLを使用するタイミング

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

  • 読み取り可能で宣言的な定義 : データエンジニアとアナリストが保守できる明確なロジック。
  • 標準テーブルタイプ :主にストリーミングテーブルとマテリアライズドビューから構築されるパイプライン。
  • 線形変換チェーン :ブロンズからシルバー、ゴールドへのフローなど、手続き型ロジックなしの直接的な取り込みと変換。
  • スタンドアロンテーブル:SQLで作成するスタンドアロンのストリーミングテーブルまたはマテリアライズドビューです。

SQLでのパイプライン開発の概要については、「SQLでLakeFlow Pipelinesコードを開発する」を参照してください。

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()

Iceberg 互換マテリアライズドビュー(パブリックプレビュー)

CREATE MATERIALIZED VIEW ... USING ICEBERG外部 Iceberg リーダーと互換性のあるマテリアライズドビューを作成するを参照してください。

サポートされていない

一時的ビュー

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

Python

ストリーミングテーブル

CREATE STREAMING TABLE

create_streaming_table(), table()

マテリアライズドビュー

CREATE MATERIALIZED VIEW

materialized_view()

Iceberg 互換マテリアライズドビュー(パブリックプレビュー)

CREATE MATERIALIZED VIEW ... USING ICEBERG外部 Iceberg リーダーと互換性のあるマテリアライズドビューを作成するを参照してください。

サポートされていない

一時的ビュー

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

目標

推奨インターフェイス

シンプルさと可読性

SQL

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

SQL

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

SQL

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

Python

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

Python

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

Python

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

Python