Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
9
Help us understand the problem. What is going on with this article?
@tomoyanamekawa

GCPのデータ処理・ETL系サービスの使い分け

本記事は Classi Advent Calendar 2020 15日目の記事です。

こんにちは。データAI部でデータエンジニアをしている@tomoyanamekawaです。

GCPにはデータ処理関連のサービスが複数あり、「Aにあるデータを加工してBに置きたい」といった処理(ETL処理)の実現方法がGCP内のサービスに限っても様々な選択肢があります。
また、data*といった似た名前のサービスが多く、初見だとわかりづらい部分があります。
そこでそれらサービスの使い分けの参考になればと思ってまとめます。

GCPにあるETL処理関連のサービス紹介

ETL処理に関連するサービスだけでも下記のように複数あります。

  • Cloud Composer
    Apache Airflowをベースにしたワークフロー管理サービス。
    裏でGKEが立っていてユーザーからクラスターやインスタンスも見えて、少し管理が必要なのでフルマネージドサービスではない。

  • Dataflow
    Apache Beamをベースにしたデータ処理のフルマネージドサービス。
    ストリーム処理とバッチ処理両方に対応しており、オートスケールにも対応しているので重い処理や複雑な処理に向いている。

  • Dataprep
    GUIで操作できるデータ処理のフルマネージドサービス。
    内部的にはDataflowになっていて、作成したjobはDataflowの画面でも管理できる。
    データを可視化しながら加工処理ができるので、探索的に行う処理を決められる。

  • Dataproc
    SparkやHadoopなどのクラスタを構築してくれるサービス。

  • Cloud Data Fusion
    GUIで操作できるDataproc。

また、BigQueryやGCSの中の機能でも、queryを定期実行してくれるscheduled queryや、S3→GCS, GCS→BQなどデータ転送してくれるData Transfer Serviceもあります。

さらに最近Dataformというサービスを買収したというニュースもあったので、サービスがさらに増えるかもしれません。

いつどのサービス・機能を使えばいいのか

上記のように複数のサービスがあり、出番が被るものもありますがある程度の住み分けはあります。
そこで用途ごとにどのサービスが選択肢に入るか上げてみます。
(個人の意見です)

データパイプライン全体の管理

  • 候補になるGCPサービス・機能
    • Cloud Composer

複数のETL処理を依存関係含めてまとめて管理したい場合はワークフローエンジンの範囲なので、GCPのサービスではCloud Composer一択です。
ただCloud Composer(Airflow)はWebUI含め機能がリッチであったり、GKEを使っているためGCEなどに比べ少しお高いといった面があります。
そのためケースによってはDigdagなどの他のワークフローエンジンをGCE等のVM上で簡易に利用したほうがコスパがいいこともあります。
また、troccoなどのSaaSを利用するといった選択肢もあります。

ストリーム処理や複雑・重いETL処理をする

  • 候補になるGCPサービス・機能
    • Dataflow
    • Dataproc

この二つはできることが似ているので、よく「Dataflow vs Dataproc」といった記事を見かけます。
個人的にはすでにSparkやHadoopの資産・知見があるという場合以外はDataflowでいいんじゃないかと思っています。
GCPの公式では下の画像で使い分けが説明されていました。
flow-vs-proc-flowchart
(https://cloud.google.com/dataflow/images/flow-vs-proc-flowchart.svg)

DataprepやCloud Data Fusionも選択肢に入りますが、GUIベースのサービスなので複雑な処理ではコードベースで管理できるサービスのほうが好まれるかと思います。

サクッとETL処理を試しに組みたい

  • 候補になるGCPサービス・機能
    • Dataprep
    • Cloud Data Fusion

普段コードをあまり書かないデータアナリストなどがPoCやお試しでETL処理をしたい場合にGUIベースで操作できるこのあたりのサービスが良さそうです。
データソースがBQかGCSならDataprepのがBIツールライクなのでおすすめです。

BQ内でテーブルの加工を定期的にしたい

  • 候補になるGCPサービス・機能
    • Cloud Composer
    • scheduled query

BQ内で完結するのであればqueryのみで加工処理が記述してあるほうがBQの処理能力を使えてかつ、シンプルなので好ましいです。
そのためqueryをどう管理・実行するかの問題になり、このあたりのサービス・機能が候補になります。

どう組み合わせるか

実際にデータ基盤を構築する場合には複数のサービスを組み合わせることになります。
全体を管理するためにワークフローエンジンを使うことになると思いますが、Cloud Compsoerなどのワークフローエンジンはデータ処理がメインのツールではないため、重い処理には向きません。
(Cloud composerもGKEですが、オートスケールせずにworker数を固定で運用されます。)
そのため、Cloud composerでタスクを管理して、実際の処理はDataflowやBQなどに任せるといった構成になったりします。

まとめ

GCPにはデータ周りのサービスがいろいろあって、ややこしいけどある程度住み分けはある。
それぞれの役割や類似サービスを理解して必要十分なデータパイプラインを構築しましょう!

明日は@willsmileさんです!

9
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
tomoyanamekawa
データエンジニアをしています。
classi
学校の先生・生徒・保護者向けのB2B2Cの学習支援Webサービス「Classi(クラッシー)」 を開発・運営している会社です。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
9
Help us understand the problem. What is going on with this article?