【さわってみよう!】Google Cloud Dataflowって何に使うの?

目的

  • Dataflowの概念を理解する
  • Dataflowにさわってみる

今回は今までDataflowにさわったことがない方向けに、Dataflowってそもそもなに?ってところからご説明します。

対象読者

  • 1~2年目データエンジニア
  • 1~2年目データアナリスト
  • 1~2年目データ領域人材
  • GCPがどういうものか知っている方
  • BigQueryがどういうツールか知っている方

GCP、BigQueryについて復習したい方は以下を参照ください。

【初級編】BigQueryの実務活用方法について

事前説明編

Google Cloud Dataflowとは

Dataflowとは、Googleが提供するETLサービスの一つとされていて、データの処理によく使われるツールになります。

ETLってそもそもご存知でしょうか、、、。

ETLはExtract(抽出)、Transform(変換)、Load(書き出し)の頭文字をとってETLと呼びます。データ領域で長くお仕事されてきている方はご存知かと思いますが、データって最初からきれいなわけではなく、裏側で「データをきれいな状態にしてから保存している」んですね。その「きれいにする」という処理をETLっていうかっこいい感じの言葉にしてるんですね。

イメージとしては、こちらの記事で紹介している料理の例がわかりやすいかなと思います。

データレイク、データウェアハウス、データマートって結局なんなん?

ETLについてはこのくらいにしますが、詳細に知りたい方は以下の記事も見てみるとわかりやすいかと思います。今度このブログでも取り上げます。

https://it-trend.jp/etl/article/function

ということで、DataflowというのはこのETLツールの一つに該当されるものになります。

ではどうやって操作しているのかについてですが、方法は2つあります。

  1. ノーコードでETL処理を行う(テンプレートを使用する)
  2. Java,Python,SQLを使用してETL処理を行う

今回は「まずは触ってみる」ということで1で実践したいと思います。1のテンプレートは実際によく使うだろう項目をGoogleがテンプレ化してくれていて、業務でも使う場面が多々あります。

Dataflowの使い時

ETLツールということはわかりましたが、Googleにはたくさんのデータ処理サービスがあります。その他には、Cloud ComposerやCloud Functionsなど同じような機能を持つサービスがたくさんあるんですね。

どういったときにDataflowを使うのがいいのでしょうか。

おそらく人によってこういうときに使うのがいいというのがあると思いますが、私としては「ストリーミング処理」が必要なときにデータ基盤として使用するのがいいかなと思ってます。

データ処理には「バッチ処理」「ストリーミング処理」の2種類存在します。

この2つについて詳しく説明していきます。

バッチ処理とストリーミング処理の違いについて

バッチ処理というのは、月に1回、日に1回といった感じでスクリプトを実行するルールを定めて自動で実行させることを指します。

対して、ストリーミング処理というのは1分に1回、1秒に1回といった形でデータを流動的に流し続ける処理のことを指します。

Dataflowはデータを流動的に流し続けたい時に活用するのが最適かなと私は思います。理由は一つ。コストです。

Dataflowを実行すると裏でGCE(仮想サーバー)が常に起動された状態になります。Dataflowはこのサーバーが起動している時間に対してコストが発生しているので、使っていないときでもコストが発生してしまうのです。

なので月に1回、日に1回のようなイベント的にしかデータ処理が必要ないのであれば、Cloud Functionsのようなサービスを使用することをおすすめします。

Cloud Functiosについてはこちらの記事を参照ください。

Cloud SchedulerとCloud Functionsを使って自動スクレイピングさせて、スプレッドシートに書き出してみた(Python)

ということで、バッチ処理とストリーミング処理の違いについては、「データを更新するタイミングや回数の違い」であり、ストリーミングのほうがより多く処理を実行するということでした。

実際にストリーミング処理で有名なのは、発電機やソーラーパネルといったiot機器データやタクシー会社などの位置情報データをリアルタイムで収集したいといったニーズで使われています。

実践編

構築(データ)の流れ

今回はGCPチュートリアルの「Pub/Sub Topic to BigQuery」を参照して実施してみようと思います。

その前にPub/Subについて簡単に説明します。

Pub/Subは、「Publisher」「Subscriber」の頭文字をとってPub/Subと言います。またPub/Subでどういうデータのやり取りをするか設定することを「topic」と言います。ここでは詳しくお話しませんが、要するに処理の伝達役に位置するツールなんだなとご理解いただけると幸いです。

それでは、データの流れを記載します。

構築の流れは以下です。

  1. Pub/Subでtopicを作る
  2. Cloud Storageに一時保存しておくバケットを作成する
  3. BigQueryでアウトプットデータを保存するデータセットとテーブルを作成する
  4. Dataflowでデータ処理の流れを作成し、起動する
  5. Pub/Subに戻り、データを手動でPublishしてみる
  6. BigQueryにデータが入っているか確認する
  7. Dataflowを停止する

※GCPのプロジェクトは作られている前提で進めます。まだの方は作成されてから進んでください。また、以下の各種APIはすべてONに設定をお願いいたします。まだONになっていない方は以下をクリックしてONに設定してください。

各種必要なAPI

  • Cloud Dataflow
  • Compute Engine
  • Stackdriver Logging
  • Cloud Storage
  • Cloud Storage JSON
  • BigQuery
  • Cloud Pub/Sub
  • Cloud Resource Manager API

https://console.cloud.google.com/flows/enableapi?apiid=dataflow%2Ccompute_component%2Clogging%2Cstorage_component%2Cstorage_api%2Cbigquery%2Cpubsub%2Ccloudresourcemanager.googleapis.com&hl=ja&_ga=2.51301869.538098195.1625499458-552830899.1614515971&_gac=1.251407860.1624853889.CjwKCAjww-CGBhALEiwAQzWxOqJSb5ol_1fqEyyv8SoH0Kp_jDc_hwgh24X34nu6m6MUNeasQ2uIlhoC0-IQAvD_BwE

また、こちらの構築でかかるコストはすぐにDataflowを停止させれば数円かかるか、かからないかぐらいです。テスト構築が終わったら工程7番の停止は忘れずにお願いいたします。

コストについて

詳細:https://cloud.google.com/dataflow/pricing?hl=ja

早速やっていきましょう!

1.Pub/Subでtopicを作る

2.Cloud Storageに一時保存しておくバケットを作成する

3.BigQueryでアウトプットデータを保存するデータセットとテーブルを作成する

スキーマテキスト
day:DATE,channel:STRING,cost:INTEGER,session:INTEGER,cv:INTEGER

4.Dataflowでデータ処理の流れを作成し、起動する

問題なく実行中になれば設定完了です。

5.Pub/Subに戻り、データを手動でPublishしてみる

6.BigQueryにデータが入っているか確認する

7.Dataflowを停止する

まとめ

以上でノーコードでストリーミング処理のデータパイプラインを構築することができました。

手動でPub/Subからpublishしていたところを、通常はiot機器やタクシーの位置情報を取り込むことで、自動的にBigQueryにデータが流れていく仕組みを作ることができます!

私がGCPに出会った時、技術もここまできたかと感動しました。

次回は一歩先をいってPythonとSQLを使ってカスタマイズしたストリーミング処理のデータパイプラインを実施してみたいと思います。

お楽しみに!