選べない、、、GCP環境でのETL,ELTでお困りな方への処方箋
はじめに
こんにちは、スペースマーケットでバックエンドエンジニアをやっているyusukeです。
みなさんリモートワーク捗っていますでしょうか??
僕はリモート反動でアウトドア欲が高まり、山登りにいそしんでおります。
何の話か?
さて本日は山登りの話、ではなくデータエンジニアリング領域のお話です。
入社してからデータ分析基盤を構築する機会がありまして、その中でも今回はDWHへのデータ抽出・変換・転送、つまりETLやELTと呼ばれる工程について、その選定方法についてお話できればと思います。
※ 前提として弊社は元々BigQuery使用していたこともあり、すべてGCP環境での内容となっています。
どんな人が対象か?
GCPではETLやELTの選択肢がたくさんあるし、どれも高機能なのでなかなか選べません、、、という方も多いのではないでしょうか??
そんな悩める方々、特に普段はBEエンジニアやっているけどデータ分析基盤もさわらないといけない!な方や、もしくは触ったことはないが興味はある方、へ向けたデータエンジニアリング初心者向けの記事となっています。
そもそもETL, ELTとは?
ETL, ELTの話の前に、データ分析基盤では、データレイクとDWH(データウェアハウス)という概念があり、ざっくり言うと「データレイク = 生データ格納場所」、「DWH = 分析用データ格納場所」という理解でよいかなと思います。(ちなみに弊社の場合はGCP環境を採用しており「データレイク = GCS」、「DWH = BigQuery」という構成です。)
そして大抵の場合、生データから分析用データにする際にデータ変換が挟まるのですが、変換してからDWHへ格納することを「ETL」、DWHに格納してから変換することを「ELT」と呼んでいます。つまり、どちらもDWHへデータを入れる一連の流れのことを言っています。
さて、お次に本題DWH(今回はBigQuery)へデータを送る選択肢について説明したいと思います。
主な選択肢
さてさて、自分が調査した中では主な選択肢は4つかなと思っています。
データ転送 + スケジュールクエリ
外部テーブル + スケジュールクエリ
Dataflow
Dataproc
上の2つはELT、つまりBigQueryへ転送したのちにデータ変換。下の2つはETL、データ変換したのちBigQueryへ格納。となっています。それではそれぞれの特徴や選定基準について見ていきましょう!
それぞれの特徴、どんな場合に選べばよいか?
まずはクエリで表現できるかどうかがポイントとなるかと思います。
クエリで書ける場合には下記のELTを候補とするのがよいでしょう。
外部テーブル・スケジュールクエリ
データ転送・スケジュールクエリ
データ転送でBigQueryにデータを格納、もしくはBigQueryから外部データを直接参照して(外部テーブル)、スケジュールクエリにてデータ変換を実行する。という方法となります。
利点としては、クエリを書けば良いだけで済むのでサーバーを建てる必要がなく早く実装できるという点です。
1と2どちらにするかに関しては、下記のメリット・デメリットを参考にしていただければと思います。
外部テーブル・スケジュールクエリ
メリット1: データソースに直接クエリ叩くので1度のアクションで済む。(データ転送の場合、転送・と加工で2回)
メリット2: 外部データソースに対し直接クエリを実行するので、変更のたびにBigQueryへの同期が必要がない
デメリット: 外部データの対象が狭い ※下記が対象
Bigtable
Cloud Storage
Google ドライブ
データ転送・スケジュールクエリ
メリット1: GCSからのデータ転送はもちろん、GCP環境以外からも転送できる。
メリット2: 外部データの対象が広い
Google Software as a Service(SaaS)アプリ
キャンペーン マネージャー
Cloud Storage
Google アド マネージャー
Google 広告
Google Merchant Center(ベータ版)
Google Play
検索広告 360 (ベータ版)
YouTube - チャンネル レポート
YouTube - コンテンツ所有者レポート
外部クラウド ストレージ プロバイダ
Amazon S3
データ ウェアハウス
Teradata
Amazon Redshift
デメリット: データ転送の場合、転送・と加工で2回アクションが必要
さて、クエリで書けない場合はETLの出番です。
期待の新星Dataflowさんが、おそらくGCP環境でのETLで第一候補になるのではないでしょうか??
特徴としてはサーバーレスでオートスケールしてくれることでしょうか。
また、TensorFlowを使ったチュートリアルもあるので、TensorFlow使う場合も第一候補となると思います。
お次にDataprocさん。こちらは元々SparkやHadoop使用していた、もしくはその知見がある場合はこちらを選択するとよいでしょう。
また、Dataproc SparkにはMLlibという機械学習ライブラリがあるので、機械学習が必要な場合はDataprocも候補となるでしょう。(分類や回帰、クラスタリングなどサポートされているのでscikit-learn近いイメージかと思います)
また、Dataprocにはサーバーレスが登場したので、Sparkに慣れているがサーバーの管理をしたくないという方にはDataproc Serverlessが最適でしょう!
まとめ
ざっくりですがそれぞれの特徴をまとめさせて頂きました!
これからデータ分析基盤を作りたいという方にはある程度参考になるのではないでしょうか??
弊社ではDataflowとDataprocを採用していまして、おいおいそちらの内容も書かせて頂くかもしれません。
最後に
という訳でスペースマーケットでは新メンバーどしどし募集中です!
少しでもご興味ある方、応募お待ちしております!
この記事が気に入ったらサポートをしてみませんか?