見出し画像

Google Cloud Professional Data Engineer 合格体験記

概要

こんにちは。電通デジタルでデータサイエンティストをしている中嶋です。去年の年末にGoogle CloudのProfessiona Data Engineerの試験に合格しました。この記事では、私の経験を基に試験勉強の準備や合格に向けた勉強方法について振り返ってみたいと思います。

きっかけ

今回受験をしたのは、筆者の所属する部署で同僚とデータ分析に関するスキルについて会話していた時に資格の話になり色々調べていたところ目に留まり興味を持ったのがきっかけです。自身のデータ利活用スキルを高めることにもつながると思い、折角の機会だしやってみようと思い立ち学習を始めました。

予備知識

この試験を受ける前に、Associate Cloud Engineerの試験に受かっていたため一通りの基礎知識は身に着けていました。とはいえ普段の業務では主にデータ前処理・集計用にBigQueryを、データの管理用にGoogle Cloud Storageを使うくらいで他のデータ系のサービスは使っておらず、一回だけ触ったことがあるかないかくらいでした。

合格までの道のり

ここからは試験に向けた取り組みを時系列に沿ってまとめていきたいと思います。

初回の学習

最初は提示された学習コースに沿って動画視聴で学習していきました。実際に学習した内容は下記のコースになります。

  1. Google Cloud Big Data and Machine Learning Fundamentals 日本語版
    主にデータ分析・データエンジニアリング関連するサービス概要の解説です。内容は『スケーラブルデータサイエンス』の内容に近いですが、本の内容よりも全体的に軽めな印象でした。

  2. Google Cloud Essentials
    上記1. に関連するラボ集です。特に受講しなくても大丈夫だと思います。

  3. Modernizing Data Lakes and Data Warehouses with GCP 日本語版
    初めて学ぶ人向けにデータエンジニアリングの職務領域、データを使える状態に整備し品質保持する方法、データパイプライン等の構築の概要について学べます。
    また、データパイプラインにおけるデータレイク、データウェアハウスを構築するために具体的に使われるサービス(具体的にはBigQueryなど)について解説されています。具体のサービスとしてはDataproc、Dataflow、Cloud Composer、Data Fusionが取り上げられています。

  4. Building Batch Data Pipelines on GCP 日本語版
    上記から引き続いて、データパイプラインの話しがメインです。特にバッチで処理するようなデータを対象に、EL/ELT/ETLそれぞれの用途でデータ収集~データ管理・活用までのパイプラインをどのように構築すればよいかの解説があります。

  5. Building Resilient Streaming Analytics Systems on GCP 日本語版
    このコースではストリーミングデータ処理のためのパイプラインを構築する方法が紹介されています。バッチ処理とストリーミング処理の違いやストリーミング処理の難しいところ(データの遅延や重複)について取り上げています。そのうえで、それに対処するためのCloud Pub/SubやDataflowによるパイプラインの構築、格納先としてBigQueryやCloud Bigtableの活用方法に触れられています。

  6. Smart Analytics, Machine Learning, and AI on GCP 日本語版
    このコースではこれまでのデータ整備と異なりそれが終わった後のデータ利活用にフォーカスしています。いわゆる機械学習モデルとは何かから始まり、それを構築し、本稼働に乗せるためにどのようなことをしたらよいかが説明されています。サービスとしては、モデル構築のための各種AutoMLサービスやBigQuery ML、構築したモデルの運用管理用のKubeflowを取り上げていました。

  7. Preparing for the Google Cloud Professional Data Engineer Exam 日本語版
    このコースでは上記で学んだ内容を基に実際のデータパイプライン・機械学習パイプラインの設計方法や気を付けるべきポイント、また、機密性の高いデータを扱う際のセキュリティ周りの注意事項について触れられています。
    加えて試験を受けるにあたりどのような準備・対策をすればよいかや心構えについて説明されています。新たな情報はあまりないですが本記事と合わせて見ていただくと理解が深まると思います。

各動画は情報の密度が濃いうえに訳が若干こなれていないところもあったため、巻き戻ししながら視聴しました。また、動画では後から索引が引けないので動画タイトルごとに下記のように簡単な要約を作るようにしていました。

学習メモ

ちなみに、試験対策としては特に3. 4. 5. の内容を十分理解していることが求められます。6. は実務的な目線で言うと重要ですが、自分自身が元々統計・機械学習の知見があったのと、試験の際もそこまでこの領域の問題が多くなかったので省いています。
また、各動画で取り上げている内容は概念・概要レベルのものはあまり試験には直接関係がない印象です。これらは動画を見ているその場で理解すれば良いものだと思います。一方で各サービスの特徴や細かい設定ほど気を付けておく必要があります。必要に応じて適宜リファレンス等(各サービスのマニュアルページや使用事例の記事など)を参照するのも良いと思います。後でも触れますがここら辺が試験の時にはよく聞かれる印象です。

初回の試験

結果を先に言うと不合格でした。公式の模擬試験を受け不明な箇所は各動画講義のメモを見返したり動画を見たりして復習して臨みましたが、結構難しかったです。
試験問題は全て4択の試験ですが、前提状況の説明がそれなりに長く複雑で、選択肢を選ぶために情報を取捨選択しながら考える必要があります。選択肢も似たようなものが多く細かい違いを聞いてきます。また、上記の講義動画では触れられていないような外部サービス(KafkaやMariaDB等)との連携を聞くような問題も出るため、GCPのサービスのみ理解していればよいということもなく幅広いデータエンジニアリングの知識を求められる印象です。

再学習

2回目の試験は不合格となるとさすがにまずいので試験に向けて本腰を入れて対策しました。やったこととしては

  • 上記の動画の3. 4. 5. を見直す

  • 過去問を調べて問題演習をひたすらやる

になります。特に合格を最優先に考える場合は過去問を何度もやることが有効だと思います。私が参照したサイトは問題が載っているもののサイト上の答えがでたらめのものでした。幸いユーザー用のチャット欄があり正解がコメントされていることもありますが、意見が割れている問題もそこそこあり、GCPの公式ブログの記事や各サービスのマニュアルなどを自分で調べながら進めました。

再試験

今回は過去問対策の甲斐あり何とか合格をもぎ取ることができました。過去問対策をやっていたこともあり初回に受けたときよりも難易度は下がったように感じます。

学習時のコツ

上記の勉強開始から試験合格までを振り返って、これから本試験を受けようという方向けにどのような点を抑えているとよいのかを整理してみました。本試験に向けて学習する際は下記の点を意識すると効率的に進められると思います。

  • データ処理のパイプラインの全体像をイメージする
    オンプレミス上に業務用のデータベースがありそこからクラウド上のデータレイク(主にはCloud Data Storage)に集約し、必要な前処理を経てデータウェアハウス(主にはBigQuery)に格納する、更に個別の分析に合わせて適宜データマートを作成する、という一連のデータパイプライン処理をイメージ出来ていると、問題文を読んだときに状況がイメージがしやすいと思います。

  • 実際のパイプラインとして処理の種類ごとにどのようなパターンがあるかを理解する
    後工程での要件に応じてデータをバッチで処理するか/ストリームで処理するか、また処理工程としてEL/ELT/ETLのパターンを知っておくとよいと思います。特に各パターンごとにどのGCPサービスを使うかまでセットで理解しておくとよいと思います。例えばストリーミングデータのパイプラインではCloud Pub/Sub→Cloud Dataflow→Google Cloud Storageの組合せを基本に考えるとよいと思います。

  • バッチ処理とストリーム処理の違いを理解する
    上記にも関連しますが、処理の違いを理解するとともに特にストリーム処理で気を付けるべきポイントなどがあるのでそれを抑えておくことが重要です。

  • 各サービスの特徴を抑え、状況毎に使い分けられるようにする
    本試験では主に下記のサービスが対象となります。それぞれの特徴を箇条書きで整理してみました。(これは筆者が自身の経験を基にピックアップした内容になるためこれが絶対のものではありません。ここに書いていないもので重要なものもあると思います。あくまで参考として見ていただければと思います。)

    • BigQuery

      • 格納されたデータをクエリで集計・分析する際に使うサーバレスサービス

      • ペタバイト級のデータにも対応可能

      • 列指向データベースなので、頻繁な書き込み・読み込み処理には向いていない

      • データを効率的に処理するためにはデータ格納時にパーティション分割やクラスタ化を設定する必要がある

      • 通常のデータベースと異なり、データはなるべく一つのテーブルに集約する方がクエリ効率は上がる。そのためにネストと構造化を用いる

      • ビュー機能を使って簡易にデータを共有できる

      • BigQuery MLを用いることで簡易なMLモデルも作成可能

    • Google Cloud Storage

      • 色々なデータを長期間保存できるストレージサービス

      • 可用性が高く、コスト効率に優れる

      • 想定されるアクセス頻度や必要な可用性に応じて料金体系の異なるグレードを使い分けられる

      • データレイクとしてバッチ処理データの保存先として使える

    • Cloud SQL

      • MySQLやPostgreSQL等のSQLをすぐ使えるマネージドサービス

      • 行指向データベースなのでBigQueryに比べて頻繁な書き込みや読み込みに適している

      • 他のサービスと比べて価格が安い

      • 複雑なクエリ操作にはあまり向いていない

    • Cloud Dataflow

      • Apache Beamを使えるサーバレスサービス

      • バッチ処理、ストリーム処理どちらでも同じ形で書くことができる

      • ストリーム処理ではCloud Pub/Subとセットで使うことが多い

      • ストリーム処理では処理の期間を決めるウィンドウの設定が必要

    • Cloud BigTable

      • ストリーム処理されたデータを格納するときに使える

      • NoSQLなので上記のCloud SQLやBigQueryと比べて柔軟にデータを格納できる

      • 主には時系列データの格納などに使われる

      • データを格納するときは行キーを指定する必要がある

      • 行キーは複数設定することができるが順番に意味がある。上記のように日付を最初の行キーにしてしまうとホットスポットが発生し特定のワーカーに処理が集中して全体のパフォーマンスが落ちてしまうので避けるようにする

    • Cloud Pub/Sub

      • ストリーミングパイプラインを構築する際に発生元からデータを受け取り次のデータ処理サービスに渡すときに使うハブ的なサービス

      • ストリーミング処理特有の突発的なデータ量の変化やデータの時間遅れ、重複等の問題に対応できる

    • Cloud Dataproc

      • Apache HadoopやApache Sparkで書かれたデータパイプラインをクラウド上に移行するときに使うサービス

      • 使用するにはApache HadoopやApache Sparkの使い方に習熟している必要がある

      • マネージドサービスなので今までオンプレミスでやっていたような管理工数を削減できる

      • 処理するデータの保存先としてGCSと連携するとよい。Dataprocの各ワーカーのディスクに保存するのはコストが高くなってしまうため推奨されていない

      • コストを削減するためにプリエンプティブルワーカーが使える

    • Cloud Spanner

      • グローバルにサービスを展開しており各アプリからデータを収集するときに有効

      • NoSQLベースで水平スケーラビリティを持つ

      • 本来の用途以外で使用すると比較的値段は高い印象

    • Cloud Dataprep

      • コーディングに慣れていないユーザー向けにGUIでデータ処理ができるサービス

  • 各サービスごとにパフォーマンスを向上させるためのベストプラクティスを知っている
    各サービスごとに実際に使う際にレイテンシの低減やスループットの向上、また可用性を向上のためにどのような点に気を付けるか、設定項目のどれを変更すればよいかを意識するとよいと思います。これは動画でも触れられていることがありますし、Googleから公表されているようなユースケースを調べてみたりするのが良いと思います。

最後に

合格してからがスタート

今回本記事の執筆を通じて個人的な振り返りを書いてみましたが、自分の知識が過去問に過剰適合してしまっておりまだまだ理解の浅いところも多いことが分かりました。特に知識としては知っているものの実際にサービスを触って手を動かす部分は今回のような選択式試験ではあまり問われないところです。こういった部分はやはり実際に使ってみるしかないと思いますので、今後はこの試験で身につけた知識を実務でも積極的に活用して、知識だけでない経験を積んでいければと思います。

クラウドの知識・経験は今後ますます重要になる

今回の試験を受ける前から思っていたことですが、データサイエンティストも純粋な分析だけをやる人は少なくなってきており業務範囲はビジネス領域・エンジニア領域へと拡大していると日々感じます。今回取り上げたようなクラウドの知識は今後データサイエンティストとしてキャリアの幅を広げるためにもとても有効だと思いますので、興味ある方は是非チャレンジすることをお勧めします。この記事を読んで本試験を受けてみようと思う方が増えれば幸いです。