GoogleCloud Professional Data Engineer取得に向けた勉強まとめ

GoogleCloud認定資格の一つであるProfessional Data Engineer(PDA)を取得するに向けて、勉強したことをまとめていきます。

データベース系

BigQuery

BigQueryはフルマネージドなエンタープライズ向けのデータウェアハウス。

ポイント
  • テーブルへのアクセス制御は、データセットレベルに加えてテーブルレベルでも可能
  • ビューは毎回SQLが実行されるため費用が高くなるが、マテリアライズドビューはクエリ結果をキャッシュに保存可能で費用対効果が大きい
  • レガシーSQLで作成されたビューへは、標準SQLでアクセスできない
  • 外部ソースとしてクエリできる対象は、Cloud Storage, Google Drive, Cloud SQL, Cloud Spanner, Bigtable (外部データソース概要)
  • BigQuery BI Engineを使うとインメモリで高速な分析が可能になる
  • クラスタテーブルではLIMIT句を利用してスキャンされるデータ量を削減可能

BigQueryへのデータの取り込み方法は下表。

挿入タイプ概要
バッチ処理BigQuery Data Transfer ServiceやGCS内ファイルの読み込み、BigQueryAPIなどでデータを挿入する処理
ストリーミング処理リアルタイムに継続的に連携されるデータを挿入する処理。Dataflowなどを利用
DMLの利用DMLステートメントでデータを挿入する処理
その他サードパーティ製のツールでデータを入れる処理等

参考:https://cloud.google.com/bigquery/docs/loading-data?hl=JA#overview

Cloud Spanner

Cloud Spannerは、グローバルに分散された強整合性リレーショナルデータベース。

無制限のスケーリング99.999%の可用性が主な特徴として挙げられる。

ポイント
  • 主キーは自動でインデックスされるが、セカンダリインデックスを利用することで主キー以外の列にインデックスを作成することが可能
  • ホットスポットを避けるために、適切な主キーを設計する必要があり、ポイントは下記
    • 単調に増加/減少する値が主キーの先頭にこないようにする
    • 一意のキーをハッシュ化して、ハッシュ値を主キーとする
    • バージョン4かつ16バイト以上のUUIDを主キーにする
    • 連続した数値(シーケンシャル値)のビット反転値を利用する
  • 二つのテーブルに親子関係がある場合、インターリーブテーブル利用することで大幅なパフォーマンス改善が可能

Cloud Bigtable

BigTableは、非常に高いスループットとスケーラビリティ、低レイテンシを必要とするアプリケーションに最適なKey-Value形式のデータを格納するのに適したNoSQLのワイドカラム型データベース

ポイント
  • 起動済みインスタンスのストレージ変更(HDD⇔SSD)は不可。インスタンスのバックアップを取得したうえでインスタンスの再生成が必要
  • 行キーにタイムスタンプのみやタイムスタンプから始まることを推奨しない。<id>#<timestamp>といった適切に行の範囲を特定できるキーを利用する
  • HBase互換のAPIを提供する
  • パーソナライズ、アドテック、フィンテック、デジタル メディア、IoT などのユースケースに理想的
  • 同時に参照されることの多い列は、同一テーブル内の同一列ファミリーにすることで、パフォーマンスを向上できる。列ファミリの上限は100
  • Key Visualizerを利用することで、行キーの使用頻度等を分析可能。設計の最適化が可能になる
  • レイテンシーが重要なサービスに利用される場合ストレージの使用率は60%未満を目指すべき

※ BigtableとBigQueryの比較記事(BigtableとBigQuery:その違いは何か

Cloud Datastore / Firestore

アプリケーション向けのスケーラビリティが高い ドキュメント指向型のNoSQL データベース。JSON型のデータを保持するのに適している。

ポイント
  • FirestoreはDatastoreの次世代のDB
  • 公式ドキュメントで述べられているユースケースは下記
    • リアルタイムな在庫と商品の説明を提供する商品カタログ
    • ユーザーの過去の行動に応じたエクスペリエンスを提供するユーザープロフィール
    • ある銀行口座から別の口座への送金など、ACID属性に基づくトランザクション

データ処理サービス

Cloud Pub/Sub

Cloud Pub/Subは、ストリーミング分析やデータ統合パイプラインに利用される、メッセージキューイングサービス。

ポイント
  • 最低1回の配信保証
  • スキーマの定義は、AvroかProtocol Buffer形式で行う
  • 推奨されるメッセージに含めるべきフィールド(PubSubMessage

Apache KafkaとCloud Pub/Subの違いが分かりやすくまとめられているページ

Dataproc

Dataprocは、Hadoop, Spark, Flinnkなど、分散コンピューティング基盤をホストするためのマネージドサービス。

ポイント
  • Google Cloudが推奨する使い方は、必要なときにエフェメラルクラスタを作成し、ジョブの終了時にそれらを削除すること
  • クラスタを一度起動すると、マスターノード数は変更不可
  • 同時ジョブの最大数は、クラスタの起動時に設定する必要がある
  • ストレージにHDFSを利用しているが、並行してCloud Storageに入っているデータも参照可能(データストレージ
  • クラスタ内のノードが初期化時に実行するアクションをスクリプトで管理可能であり、スクリプトはGitHubかCloud Storageに格納される
  • コスト最適化を目的に下記を推奨
    • セカンダリノードとして最大30%のプリエンプティブルVMを利用する
    • 永続ストレージにCloud Storageを利用する

Cloud Composer

Cloud Composerは、Apache Airflowで構築されたフルマネージドなワークフローオーケストレーションサービスであり、バッチ処理に適している。

Cloud Dataflowとの違いが良く意識されるが、二つの差はこのサイトがわかりやすい(Apache Airflow vs. Apache Beam

Cloud Dataflow

Cloud Dataflowは、Apache Beam SDKをサポートするフルマネージドなストリーム/バッチ処理用のサービス。

Cloud Composerと同様でワークフローマネージメント用のシステムではあるが、SparkやFlinkのwrapperと捉えると、ビッグデータ解析などに強みがある。

ポイント
  • パイプラインの構築に必要なコンポーネント
    • ParDo:並列にTransformするための汎用的な処理関数でPCollectionを作成する
    • DoFn:処理クラス
  • スケジューリングに柔軟性がある場合、FlexRS(Resource Scheduling)を利用することでコスト削減が可能
  • ストリーミング処理中のパイプラインは、ドレインすることでデータの消失を防ぎながらパイプラインを停止可能。ソフトウェアのアップデート時などに利用できる
  • 代表的なウィンドウ関数(参考
    • 固定時間(タンブリング)ウィンドウ:データストリームをデータの重なりなく一定の時間間隔に分割
    • スライディング(ホッピング)ウィンドウ:データストリームをデータの重なりを許可して一定の時間間隔に分割
    • セッションウィンドウ:データストリームをイベントに基づいて非連続に分割可能。最終イベントから、最大ギャップ時間分のウィンドウを設定可能
    • 単一のグローバルウィンドウ:すべてのデータが一つのウィンドウに含まれる

カタログ、ログ関係のサービス

Cloud Logging

Cloud Loggingは、GCP上のシステムが作成したログを収集・保管・管理するサービス。旧称はStackdriver Logging。

下記のサイトが非常にわかりやすい。

Cloud Catalog

Cloud Catalogは、フルマネージドなメタ管理用サービス。

BigQueryやCloudStorageに保存されているデータのメタを収集し、GoogleCloud上のデータを効率的に探すためのカタログを作成可能となる。

DLP(Data Loss Prevention)との連携をすることで、PIIデータの効率的な検索も可能

Cloud Data Loss Prevention(Cloud DLP)

Data Loss Preventionは、個人情報(PII: Personally Identifiable Information)データに関するマネージドサービス。

  • PIIデータを匿名化(削除、マスキング、トークン化…)することや
  • 匿名化されたデータをre-identificationされうるリスクを計測することも可能

PIIの匿名化では、Cloud Storage → Dataflow → BigQueryというパイプライン処理に追いて、Dataflow内でPIIの匿名化が可能である。

公式ドキュメントのレファレンスアーキテクチャが非常にわかりやすい。

Cloud Dataprep by Trifacta

Dataprepは、GUIからデータの整形や加工が可能な、分析や機械学習を目的としたインテリジェントデータサービス。

デモ動画を見るのが最もわかりやすい。

その他

Cloud SQL Auth Proxy

Cloud SQLに安全に接続するための仕組み(ドキュメント

プロキシサーバーを通してCloud SQLに安全に接続可能

Cloud External Key Manager (EKM)

EKMは、サポートされている外部鍵管理サービス内で管理されている鍵を利用してGoogle Cloud内のデータを保護するサービス。

鍵はGoogle Cloudの外部で保管されていることが特徴

Cloud Interconnect

オンプレミス環境とGoogleCloud VPCを接続するための仕組み。

種類概要
Dedicated Interconnectオンプレ環境とGCP環境を物理的な接続線で結ぶ方法
Partner Interconnectサポート対象のプロバイダを通して、オンプレとGCPを結ぶ方法

データの転送サービス

Google Cloudにおけるデータ転送用のサービスはいくつかある

サービス名概要
Transfer Appliance専用の機器を利用し大規模なデータ(PB級など)をGCPに転送するサービス。オンライン経由だとデータ転送に時間がかかりすぎるときに有効。
Storage Transfer Serviceオンプレミスまたは他のクラウドストレージからデータをCloudStorageに移送するサービス。テラバイトのデータも可能
Transfer Service for On Premise Dataオンプレミスのデータセンターから Cloud Storageバケットに大量のデータを転送できるサービス
StorageTransferServiceのオンプレミス特化型だが、追加料金が発生する
BigQuery Data Transfer ServiceSaaSアプリやS3などの外部ストレージから、BigQueryにスケジュールに基づいてデータを転送するサービス

おまけ

GCPのサービスをわかりやすく描画してくれているページ:
https://github.com/priyankavergadia/GCPSketchnote

権限周りの階層構造が分かりやすいページ:
https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy