Firestore と Apache Beam を使ったデータ処理
Google Cloud Japan Team
※この投稿は米国時間 2021 年 11 月 11 日に、Google Cloud blog に投稿されたものの抄訳です。
大規模なデータ処理ワークロードは、運用化とオーケストレーションが難しい場合があります。このたび、Google Cloud は、Apache Beam 用のネイティブ モードの Firestore コネクタをリリースしました。Firestore ユーザーにとって、データ処理がこれまで以上に容易になりました。Apache Beam は、バッチ処理ストリーミング処理統合モデルで大規模なデータ処理を支援する、人気の高いオープンソース プロジェクトです。 Beam はポータビリティを備え、多種多様なバックエンド ランナーと連携し、柔軟なデプロイが可能です。Firestore Beam I/O コネクタは、BigQuery、Bigtable、Datastore を Google データベースとして、Apache Beam コネクタと結合します。これは、Apache Beam Java SDK の Google Cloud Platform IO モジュールに自動的に含まれます。
Firestore コネクタは、Google Cloud Dataflow などのさまざまな Apache Beam バックエンドと併用できます。Dataflow は、Apache Beam のバックエンド ランナーであり、デベロッパーが「驚異的並列ワークロード」の問題を解決する仕組みを提供します。データベースの各レコードを変更することは、このような問題の一例といえます。Beam パイプラインを使用することで、並列化のオーケストレーションの負担を減らし、デベロッパーはデータの変換に集中できます。
Beam の Firestore コネクタの実用例
Beam と Firestore パイプラインのユースケースをより深く理解するために、Google Cloud Dataflow を使用して Firestore データベースに一括処理を行うメリットの例を見てみましょう。例えば、コレクション グループ内のすべてのドキュメントを削除するなど、膨大な数の操作を行いたい Firestore データベースのコレクション グループがあるとします。これを 1 つのワーカーで行うと非常に時間がかかります。Beam を使って同時並行でできるとしたらどうでしょう?
このパイプラインは、指定された collectionGroupId に対するパーティション クエリのリクエストを作成することから始まります。ネットワークの帯域幅の節減のため、withNameOnlyQuery を指定します。名前があればドキュメントを削除できます。いくつかカスタム関数を使用します。クエリのレスポンスを Document オブジェクトに読み込み、ドキュメント名を取得します。この名前でドキュメントを削除します。
Beam は透かしを使って、正確に 1 回の処理を保証します。 結果的に、Shuffle オペレーションでは、完了した作業の後戻りを防ぐことで、スピードと正確性を両立させています。
パーティション クエリを作成するコードは少し長いですが、生成された protobuf ビルダーを使用して、Firestore に送信する protobuf リクエストをビルドすることで構成されています。
パーティション クエリの作成
このコネクタは、Google Cloud のユーザーにとってさまざまな用途が考えられます。ネイティブ モードの Firestore データベースでの異種データの結合、複数のデータベースのデータ関連付け、大量のエンティティの削除、Firestore データの BigQuery への書き込みなどです。このコネクタを Apache Beam エコシステムに提供できたことをうれしく思います。また、皆さまが Firestore コネクタをどのように使用して次の素晴らしいサービスを構築するか楽しみです。
- Google Cloud スタッフ エンジニア、Chris Wilcox
- Google Cloud Developer Relations エンジニア、Ben Whitehead