五十嵐氏の自己紹介

五十嵐勇人氏:それでは第3部「現役データエンジニアが教える! BigQueryを中心としたデータ分析とその活用方法」というテーマで発表を進めたいと思います。

(スライドを示して)今回の発表のアジェンダは以下のとおりです。自己紹介、LTの概要、Google CloudのBigQueryについて。BigQueryに関するGoogle Cloudサービス、BigQueryの活用事例、データエンジニアになるにあたっての必要なスキル。この6つについて話を進められればと思います。

(スライドを示して)それでは自己紹介です。五十嵐勇人と申します。トップゲートの開発部エンジニアリング室でリーダーをしています。これまでの簡単な経歴は、自社のサービスを提供するベンチャーで、フロントエンジニアとしてメインでやっていました。(当時は)今時ではないフロントのスタイルで開発を進めていました。中でも、バックエンドとして一部CakePHPを使っていました。LPなども作っているところでした。トップゲートでは、Google Cloudを活用したデータ分析基盤の開発や設計、保守、運用をやっています。

(私は)『進撃の巨人』が大好きです。これはちょっと余計なことですが、今アニメが盛り上がっていますね。好きな人はいますでしょうか?

LTの概要・想定ターゲット層

では進めて、LTの簡単な概要を話せればと思います。本LTについての説明です。Google CloudのメインサービスのBigQueryについてのテーマとなります。データ分析基盤を構築するにあたって、関連Google Cloudサービスとの連携方法と、データを可視化して分析する一連の流れとデータ活用について話します。

本LTのターゲット層です。(スライドを示して)ターゲット層は以下を想定しています。学生、ジュニアエンジニア、BigQueryを触りたいエンジニア、Google Cloudを触りたいエンジニア、データ分析をしたいマーケター、ECサイトを運用・運営している方、BigQueryが気になる方、Google Cloudに興味が1ミリでもある方、Google Cloudに興味がないよ、BigQueryに興味がないよという方でも少しでも興味を持ってもらえると幸いです。

レベル感は超初級として発表のスライドを作っています。専門知識を必要としないLTです。なんなら「ITのことをぜんぜんわからない」という方でもすんなり入っていけるように作成しました。

BigQueryとは

では本題を進めます。Google CloudのBigQueryの簡単な説明から掘り下げていきます。まず「BigQueryとはそもそもなんぞや?」という話です。

大量のリレーショナル構造化データ用のエンタープライズデータウェアハウス。フルマネージドのクラウドデータウェアハウス、大規模なデータセットに対して分析クエリを実行。テーブルデータとメタデータを保存できるストレージ機能。BigQueryによる機械学習と予測モデリング。BigQuery Omniによるマルチクラウドのデータ分析。高速なデータ処理。数TB(テラバイト)、数PB(ペタバイト)規模のデータを数十秒から数分でフルスキャンして、処理結果を高速にユーザーへ返却します。

すごくざっくり説明すると、大量のデータを格納できます。分析用のクエリを実行することができます。もっとざっくりいうと、データを保存してクエリを実行できるリソースの側面があります。

もしBigQueryがなかったらという話をすると、ストレージとコンピュート機能を自身で用意する必要があります。(スライドを示して)例えば、これらのアプリケーションをVMや Google Cloud などのクラウド端末またはオンプレ端末に格納して、メンテ(メンテナンス)やチューニングを行う必要があります。自分でメンテをする必要があるということですね。

BigQueryで機械学習のスケジュール機能を利用する場合、別途機械学習基盤を構築したり、バッチアプリケーションを作る必要があります。これらの面倒な構築やメンテ、設定などをする必要があります。

メンテや運用は時間やお金がすごく必要になりますが、Google CloudのフルマネージドのBigQueryを使用すれば、それらをメインで行い、さらにやりたいこと以外の作業からも解放されることになります。

BigQueryに関連するGoogle Cloudサービス「Cloud Functions」

続いて、BigQueryに関連するGoogle Cloudサービスです。実際の開発の現場ではBigQueryだけで開発を進めていくことは基本的にあまりなくて、各Google Cloudのサービスといろいろ組み合わせて開発します。そこに関連するGoogle Cloudの主なサービスを紹介します。

(スライドを示して)分析する規模が増えると、処理の依存関係の定義(をしたり)とか、データ収集を考慮した場合、BigQueryだけで完結させることは難しいです。

BigQueryに関するGoogle Cloudサービスをデータ分析に焦点を当てて説明します。

1つ目が「Cloud Functions」です。クラウドサービスの構築と接続に使用するサーバーレスのランタイム環境です。サーバーレスでアプリケーションを実行できます。サーバーレスなので、スケールアップやスケールダウンなどの管理・メンテが不要です。実装した関数をCloud Functionsに乗せて実行のトリガーを決められます。

続いては連携事例ですね。例えば外部APIを取得してBigQueryで分析するために蓄積したい場合、Cloud Functionsで外部APIのレスポンスを取得して、GCSを経てCloud Storageに保存。その後、BigQueryに連携して保存します。

(スライドを示して)この図にもあるとおり、外部サービスがあり、インターネットを経由してCloud FunctionsからCloud Storageに溜めたレスポンス結果を格納して、そこからBigQueryに連携してテーブルとして出力することが、連携としてあり得るパターンかなと思っています。

BigQueryに関連するGoogle Cloudサービス「Cloud Composer」

(スライドを示して)では「Cloud Composer」ですね。フルマネージドのワークフローオーケストレーションサービスです。ワークフローやパイプラインの作成やスケジュールのモニタリング、管理が可能です。Apache Airflowで構築されていて、Pythonで記述します。

(スライドを示して)こちらがBigQueryとの連携例です。複数のテーブルの依存関係を定義して加工する場合、Cloud Composerで管理します。BigQueryのテーブルを外部サービスに連携することも可能です。スケジュール管理やリトライ処理もCloud Composerで一括対応できます。

Composerの中でCloud Functionsを発火させたり、ストレージにオブジェクトが格納されるのを検知したり、BigQuery内のクエリを使ってテーブルを加工したりが可能です。

BigQueryに関連するGoogle Cloudサービス「Cloud Pub/Sub」

「Cloud Pub/Sub」です。非同期のメッセージングサービスです。メッセージキューイングを行うマネージドサービスです。簡単にいうと「Pub/Sub is キュー」ですね。メッセージの受け皿の役割と、メッセージを別のサービスに連携する役割を持っています。似たようなサービスに「Apache Kafka」があります。

(スライドを示して)BigQueryとの連携例です。Cloud Pub/Subに対してAPIを定期的に実行して、受け取ったCloud Pub/SubがBigQueryに連携します。それと「Dataflow」と合わせてストリーミングでテーブルにインサートが可能です。先ほどのCloud Composerの例であれば、どちらかというとバッチ処理に近いイメージを持ってもらえればわかりやすいかなと思っています。

それに対して、こちらもストリーミングでどんどんデータが送られてもストリーミング処理ができるということですね。Pub/Subで収集、Dataflowで処理をして、BigQueryで保存します。そしてBigQueryの中で分析できます。

BigQueryに関連するGoogle Cloudサービス「Dataflow」

(スライドを示して)先ほどのPub/Subのところで一部名前が出たDataflowですね。データを処理するサービスで、データを加工したり変換したりします。受けたデータに対して、加工して別のサービスに出力する。その別のサービスがBigQueryやクラウドストレージなどです。

データの加工と変換に特化したサービスです。Apache Beamのフルマネージドサービスです。リソースの自動スケーリングをしてくれます。ストリーミングとバッチ処理の両方に対応します。

BigQueryとの連携例ですが、Cloud Pub/Subで受け取ったデータをDataflow内でデータのストリーミング処理をして、BigQueryに保存します。

Dataflow内でデータの加工が可能です。BigQuery内のクエリで加工が難しい場合や、SQLではほしいデータが加工できない場合に、Dataflowを使って加工することもできます。その時に、JavaやPythonで加工して、最後に出力します。

BigQueryに関連するGoogle Cloudサービス「Cloud Storage」

続いて「Cloud Storage」です。Google Cloudでファイルを保存するためのサービスです。外部から連携されたデータを一時的な保存場所として、Cloud Storageに格納してBigQueryに連携します。格納したらテーブルとして出力できます。ファイルの形式は規定はありますが、基本的にはJSONやCSVのイメージになります。

BigQuery活用事例 IoTデバイスから連携されるデータをリアルタイムで分析

次に進めて、活用事例です。BigQueryを使った活用事例を話せればと思います。

工場のIoTデバイスから連携されるデータをリアルタイムで分析したいといった要件です。BigQueryのストリーミングインサートを使って、リアルタイムで連携を受けたデータを反映します。先ほどのPub/SubのDataflowに関連する話です。

(スライドを示して)連携フローはこんな感じです。IoTデバイスから工場データ、それをストリーミングで連携してPub/Subに受け取って、Dataflow、BigQueryに連携をします。

Pub/Subでデータを受け取って、Dataflow内でデータのストリーミング処理をして、BigQueryに格納できる状態に加工、テーブルにインサート処理を行います。

この時、IoTデバイスからCloud Pub/Sub、1秒に1回の頻度でデータが連携されるためバッチ処理では対応できないので、ストリーミング処理をします。ここで「BigQueryに格納できる状態に加工し」ということは、Dataflow内で扱うJavaやPythonの中で受け取ったデータを加工したり、個人情報を抜いたりするイメージです。

BigQuery活用事例 ECサイトの売上データを分析

続いての活用事例ですが、ECサイトの売上データを分析したいという例です。アパレルのECサイトを運営するA社があるとします。A社はもともと店舗販売を行っていましたが、ECサイトでの売上が年々上昇していて、会社として売上を確保する重要なポジションになっていました。そこで、ECサイトの担当者は、顧客のニーズにあった商品を提供したい、効果的な広告を打ちたい、顧客属性が似ているユーザーに商品を宣伝したいと思いました。

そこで販売データや顧客データ、サイトの閲覧データを参照してデータの分析を行い、これらの課題を解決します。

(スライドを示して)連携フローはこんな感じになっています。オンプレの購買情報はMySQLみたいなものに格納されているデータをBigQueryに連携して、最終的にはデータポータルで分析、テーブルのデータを可視化して表やグラフに出力します。

販売情報や顧客情報などのサイト閲覧データをBigQueryに蓄積します。先ほど図に書きましたが、データウェアハウスはその役割を持っています。

分析したデータを加工して、クエリを実行して分析します。Looker studioでデータを可視化して顧客の購入情報を分析します。分析した内容をもとにおすすめメールを送信したり、ECサイトのユーザーページでおすすめ商品が見ることができるようになります。

スケジュールクエリを利用すれば、設定した日時に登録したクエリを実行して、自動でデータを加工できます。クエリの実行結果はBigQuery内のテーブルに保存して、保存したテーブルをLooker studioで参照します。そうすることによってBigQueryだけでクエリの加工ができたり、スケジュールの処理もできます。

リトライなどの細かいことがちょっと苦手な側面もあるので、そういった時はCloud Composerを活用してテーブルを作るパターンもあります。

データエンジニアになるために必要なスキル

(データエンジニアになるために)必要なスキルです。ちょっと(これまでの話とは)軸が変わるのですが、データエンジニアになって活躍するために必要なスキルを私なりに考えたので紹介できればと思います。

必要なスキルをザッと話すと、まずSQLと、プログラミングはPythonですね。Webの知識はHTTPメソッドとWebページについて。基本的なIT技術の知識、開発現場の一般的な流れはウォーターフォール開発の開発手法ですね。

基本的に私は入門というか超初級のレベルでこのスライドを作っているので、初心者の方がデータエンジニアになるために必要なスキルは基本的にないと考えています。

まずは本当に基礎基本から技術を習得すべきだろうと思っていて、Webの技術でHTTPやWebページがどういう挙動をするのかは、HTMLのことはどこでも活用する場面が大いにあるので、ここは押さえておいて損はないかなと思います。プログラミング言語もPythonと書いているのですが、正直これは何でもいいと私は思っています。

データを加工したり、データ分析をしたりする分野ではよくPythonが使われているのでPythonと書いたのですが、自分がやりたい言語は何でも私は問題ないかなと思います。

開発の一般的な流れは、設計書を書いたり要件定義とか、どうやってリリースするのかみたいなのはググればいくらでも出てきます。それを見ると「だいたいこういう感じね」というものがわかると思います。

以上でご清聴ありがとうございました。私の発表は(これで)終了します。それでは、ありがとうございました。