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 Service | SaaSアプリやS3などの外部ストレージから、BigQueryにスケジュールに基づいてデータを転送するサービス |
おまけ
GCPのサービスをわかりやすく描画してくれているページ:
https://github.com/priyankavergadia/GCPSketchnote
権限周りの階層構造が分かりやすいページ:
https://cloud.google.com/resource-manager/docs/cloud-platform-resource-hierarchy