Beam YAMLのご紹介:Apache Beam初のノーコードSDK

Beamパイプラインの作成は、困難な作業となる場合があります。Beamモデルの学習、選択したSDK言語の依存関係のダウンロード、パイプラインのデバッグ、パイプラインコードの保守は、単純から中程度のデータ処理パイプラインを作成したいユーザーにとって大きなオーバーヘッドとなります。SDKのエントリポイントを容易にするための進歩はありましたが、多くの人にとって、まだ苦労のないプロセスには程遠いのが現状です。

これらの問題の一部に対処し、Beamのエントリポイントを簡素化するために、コードではなく設定ファイルを使用してBeamパイプラインを指定する新しい方法を導入しました。この新しいSDKは、Beam YAMLとして知られており、広く使用されているデータシリアル化言語であるYAMLを使用して、データ処理パイプラインを作成するための宣言型アプローチを採用しています。

Beam YAMLを使用する利点

Beam YAMLの主な目標は、Beamのエントリポイントをできるだけ使いやすいものにすることです。ただし、これはBeamが提供する豊富な機能を犠牲にすることを意味するべきではありません。

Beam YAMLを使用する利点の一部を以下に示します。

  • ノーコード開発: ユーザーはコードを記述することなくパイプラインを開発できます。これにより、Beamを使い始め、パイプラインを迅速かつ簡単に開発することが容易になります。
  • 保守性: 設定ベースのパイプラインは、コードベースのパイプラインよりも保守が容易です。YAML形式により、関心の分離が明確になり、他のコードセクションに影響を与えることなく変更や更新を簡素化できます。
  • 宣言型言語: 宣言型言語を提供します。つまり、コードを通じて意図を表現するのではなく、目的の結果の説明に基づいています。これにより、パイプラインの構造と流れを理解しやすくなります。YAML構文は、YAML構文の学習と活用のための豊富なリソースを持つコミュニティで広く使用されています。
  • 強力な機能: さまざまなデータソースとシンク、ターンキートランスフォーム、実行パラメータなど、幅広い機能をサポートしています。これにより、Beam YAMLを使用して複雑なデータ処理パイプラインを開発できます。
  • 再利用性: Beam YAMLは、共通のパイプラインパターンを定義および共有する方法を提供することにより、コードの再利用を促進します。さまざまなパイプラインで簡単に共有および再利用できる、再利用可能なYAMLスニペットまたはブロックを作成できます。これにより、反復的なタスクを記述する必要性が軽減され、パイプライン全体の一貫性を維持するのに役立ちます。
  • 拡張性: Beam YAMLは、カスタム変換をパイプラインに統合するための構造を提供し、組織がBeam YAML構文を使用して複数のパイプラインでシームレスにアクセスできる、既存の変換カタログに貢献または活用できるようにします。Beamに直接依存する必要のない、カスタムパーサーやその他のツールなどのサードパーティ拡張機能を構築することも可能です。
  • 下位互換性: Beam YAMLは現在も活発に開発されており、エキサイティングな新機能が追加されていますが、これらの機能が追加されても、下位互換性は維持されます。このように、パイプラインが記述されると、SDKの将来のリリースバージョンに関係なく、引き続き機能します。

全体的に、Beam YAMLを使用すると、多くの利点があります。パイプラインの開発と管理がより効率的かつ効果的になり、ユーザーは低レベルのコーディングの詳細に時間を費やすのではなく、ビジネスロジックとデータ処理タスクに集中できます。

ケーススタディ:単純なビジネス分析ユースケース

デパートのサンプル取引データを以下に示します。

取引ID製品名カテゴリ価格
T0012ヘッドホン家電59.99
T5034レザージャケットアパレル109.99
T0024アルミマグカップキッチン29.99
T0104ヘッドホン家電59.99
T0302モニター家電249.99

さて、ビジネスでは、監査の目的で、家電部門で行われたすべての購入の取引記録を取得したいと考えています。レコードがCSVファイルとして保存されていると仮定すると、Beam YAMLパイプラインは次のようになります。

この例のソースコードはこちらにあります。

pipeline:
  transforms:
    - type: ReadFromCsv
      name: ReadInputFile
      config:
        path: /path/to/input.csv
    - type: Filter
      name: FilterWithCategory
      input: ReadInputFile
      config:
        language: python
        keep: category == "Electronics"
    - type: WriteToCsv
      name: WriteOutputFile
      input: FilterWithCategory
      config:
        path: /path/to/output

これにより、次のデータが残ります。

取引ID製品名カテゴリ価格
T0012ヘッドホン家電59.99
T0104ヘッドホン家電59.99
T0302モニター家電249.99

さて、ビジネスでは、サプライヤーから正しい数が注文されていることを確認するために、各家電製品の販売量を把握したいと考えています。また、各アイテムの総収益を決定したいと考えているとしましょう。この単純な集計は、前の例のフィルターに次のように従うことができます。

この例のソースコードはこちらにあります。

pipeline:
  transforms:
    - type: ReadFromCsv
      name: ReadInputFile
      config:
        path: /path/to/input.csv
    - type: Filter
      name: FilterWithCategory
      input: ReadInputFile
      config:
        language: python
        keep: category == "Electronics"
    - type: Combine
      name: CountNumberSold
      input: FilterWithCategory
      config:
        group_by: product_name
        combine:
          num_sold:
            value: product_name
            fn: count
          total_revenue:
            value: price
            fn: sum
    - type: WriteToCsv
      name: WriteOutputFile
      input: CountNumberSold
      config:
        path: /path/to/output

これにより、次のデータが残ります。

製品名販売数総収益
ヘッドホン2119.98
モニター1249.99

これは比較的単純なユースケースでしたが、Beam YAMLの威力を示しており、ビジネスユースケースからプロトタイプデータパイプラインにわずか数行のYAMLで移行できることがわかります。

Beam YAMLを使い始める

ユーザーがBeam YAMLに慣れるために、いくつかのリソースがまとめられています。

Day Zeroノートブック

Open In Colab

Apache Beamを使い始めるために、無料の接続可能なランタイムを備えたオンラインPythonノートブック環境であるGoogle Colabで、いくつかの基本的なYAMLパイプラインの例を含むDay Zeroノートブックを利用できます。

ドキュメント

Apache BeamのWebサイトでは、Beam YAML SDKの現在の機能を示すドキュメントのセットを提供しています。また、現在サポートされているターンキートランスフォームのカタログはこちらにあります。

例のカタログはこちらにあります。これらの例は、Beam YAMLで使用できるすべてのターンキートランスフォームを示しています。また、こちらにあるDataflow Cookbookの例も多数あります。

貢献する

機能の構築と追加に協力したい開発者は、こちらにあるBeam YAMLモジュールへの貢献を始めることができます。

GitHubリポジトリには、現在「yaml」タグでマークされている未解決のバグのリストもあります。

Beam YAMLはBeam 2.52の時点で安定版としてマークされていますが、現在も活発に開発されており、リリースごとに新しい機能が追加されています。設計の意思決定に参加し、フレームワークの使用方法について洞察を提供したい方は、開発メーリングリストに参加することを強くお勧めします。これらの議論はそこで行われます。開発リストへのリンクはこちらにあります。