Google Cloud Data Engineer Professional 学習メモ
- 全般
- BigQuery
- Cloud SQL
- Cloud Bigtable
- Cloud Spanner
- Cloud Dataflow
- Cloud Dataproc
- Dataprep by Trifacta
- Cloud Data Fusion
- Data Catalog
- Cloud Pub/Sub
- Cloud Monitoring
- Cloud Logging
- Cloud DLP (Cloud Data Loss Preventation)
- Cloud KMS (Cloud key Management Service)
- Looker Studio
- Cloud Storage
- Transfer Appliance
- Vertex AI
- AI Infrastructure
- Cloud Vision API, Cloud Video Intelligence API
- Cloud Natural Language API
- Cloud Speech-to-Text, Cloud Text-to-Speech
- Cloud Translation API
- Dialogflow
- Document AI
- Recommendations AI
- 機械学習・AI の基本
全般
- 試験範囲
- Cloud アーキテクチャ・センター ストレージ戦略を選択して実装する
- Cloud アーキテクチャ・センター データベースを最適化する
- Cloud アーキテクチャ・センター データを分析する
- Cloud アーキテクチャ・センター 機械学習を導入する
- Cloud アーキテクチャ・センター データの障害復旧シナリオ
- Google Cloud データベースサービスの一覧
- AI と機械学習向けサービスの一覧
BigQuery
データ取り込み
- DML
- INSERT, CREATE TABLE AS SELECT, LOAD DATA
- バルクロード
- BigQuery API の読み込みジョブ機能を利用
- BigQuery Storage Write API
- クライアント・ライブラリを利用し、該当 API を呼んで INSERT 処理する
- バッチにもストリーミングにも対応
- Streaming Insert API (tabledata.insertAll)
- BigQuery Data Transfer Service
- 後述
クエリ
- クエリ・キャッシュ
- 最大 24 時間
- クエリのキャッシュの例外
- Destination Table の利用
- ワイルドカードの利用
- CURRENT_TIMESTAMP() 関数など、実行タイミングにより結果の異なる非決定性関数の利用
- Cloud Storage 以外の外部データソースの利用
Routine
- ユーザー定義関数(UDF)
- SQL 内で利用する関数を定義できる
- 利用可能言語
- テーブル関数
- テーブルを返すユーザー定義関数(FROM 句で利用)
- リモート関数
- ユーザー定義関数の処理を、Cloud Functions や Cloud Run で実行させる
- 設定方法
- Cloud Functions や Cloud Run を用意し、エンドポイント URL 向けに Connection (bq mk -connection) を作成
- エンドポイントは body で受け取った値で処理をして、JSON レスポンスを返す
- CREATE FUNCTION 文にて、上記 Connection を指定して関数を作成
- Cloud Functions や Cloud Run を用意し、エンドポイント URL 向けに Connection (bq mk -connection) を作成
- SQL ストアド・プロシージャ
セッション
外部データソースへのクエリ
- 各機能の比較一覧
- BigLake テーブル
- 外部データストア上の構造化データにアクセス
- BigLake テーブルとは、外部データストアへの接続情報と実際のアクセスを託すことのできる機能
- BigLake を介して、BigQuery 上にテーブル定義を作成できる
- BigQuery Omni はこの機能を利用している
- オブジェクトテーブル
- Cloud Storage 上の非構造化データにアクセス
- 該当の非構造化データを BigQuery ML や BigQuery リモート関数(Cloud Functions, Cloud Run)で利用できるようになる
- BigLake 上に作成したテーブル定義をもとにアクセスする
- Cloud Storage 上の非構造化データにアクセス
- 外部テーブル
- BigLake で管理することのできない外部データストア(Cloud Bigtable, Google ドライブ)上の半構造化データにアクセス
- 外部テーブル向けのテーブル定義を、BigLake を用いずに作成できる
- Federated Query
- Cloud SQL(MySQL, PostgreSQL), Cloud Spanner にアクセス
- 該当データベースサービスの接続情報を BigQuery 内に作成できる
テーブルスキーマ
ネスト(STRUCT)され、且つ繰り返しフィールド(ARRAY)のあるスキーマ
- スキーマ定義
- ネストデータ(STRUCT)列は、データ型を RECORD とする
- RECORD とは Legacy SQL 時代の呼称が残っているだけ
- 参考:BQ STRUCT versus RECORD types?
- 繰り返しデータ(ARRAY)列は、データモードを REPEATED とする
- ネストデータ(STRUCT)列は、データ型を RECORD とする
[ { "name": "name", "type": "STRING", "mode": "NULLABLE" }, { "name": "scores", "type": "RECORD", "mode": "REPEATED", "fields": [ { "name": "subject", "type": "STRING", "mode": "NULLABLE" }, { "name": "score", "type": "INTEGER", "mode": "NULLABLE" } ] } ]
- SQL 上での表記
- ネストデータ
STRUCT()
or()
- 繰り返しデータ
ARRAY[]
or[]
- ネストデータ
-- レコードの挿入例 INSERT zunda.sample(name, scores) VALUES ("zunko", ARRAY[STRUCT("English", 80), STRUCT("Math", 70)]), ("kiritan", ARRAY[STRUCT("English", 60), STRUCT("Math", 30)]);
(row) | name | scores.subject | scores.score |
---|---|---|---|
1 | zunko | English | 80 |
1 | Math | 70 | |
2 | kiritan | English | 60 |
2 | Math | 30 |
SELECT name, scores[OFFSET(0)].subject, scores[OFFSET(0)].score FROM zunda.sample;
(row) | name | scores.subject | scores.score |
---|---|---|---|
1 | zunko | English | 80 |
2 | kiritan | English | 60 |
- 繰り返しデータ(ARRAY)列 のすべての値を、1行毎に抽出する方法
- ARRAY 列を UNNEST して、直積集合する
SELECT name, a.subject, a.score FROM zunda.sample CROSS JOIN UNNEST(scores) AS a;
(row) | name | subject | score |
---|---|---|---|
1 | zunko | English | 80 |
2 | zunko | Math | 70 |
3 | kiritan | English | 60 |
4 | kiritan | Math | 30 |
検索インデックス
- 検索インデックス
- 作り方
- CREATE SEARCH INDEX ステートメント
- インデックスを作成する列
- テーブル内の全ての列
- 指定した列
- 指定可能なデータ型
- STRING
- ARRAY
- STRING か ARRAY
で STRUCT された列 - JSON
- テキスト分析ルール
- データをインデックス化する方法を指定。データに応じて、適当なルールが存在する
- 種類
- LOG_ANALYZER
- デフォルト
- マシン・ログに最適
- データを検索しやすい
トークン
という単位に分割して管理される
- NO_OP_ANALYZER
- 列内の値に完全一致する検索に最適
- LOG_ANALYZER
- 使い方
- 検索関数(SEARCH)を利用する
- 検索インデックスがなくとも利用できるが、インデックスがあるとより効果的
- 指定する要素
- 検索対象のデータ(テーブル全体 or 列)
- 検索する文字列
- 利用アナライザ
- 例
SELECT * FROM dateset.table WHERE SEARCH(table, "Tokyo", analyzer=>NO_OP_ANALYZER);
- 検索関数(SEARCH)を利用する
- 管理方法
- 方法
- 共有スロットプール
- デフォルト
- 無料
- 一定の上限までインデックス付テーブルを利用できる
- 上限はインデックス付テーブルのデータサイズによる
- 100TB(マルチリージョン)
- 20TB(リージョン)
- 上限を超えた場合、全インデックスの管理が停止する
- 上限はインデックス付テーブルのデータサイズによる
- 独自の Reservation
- 本番環境での推奨
- 既存の Reservation に、検索インデックス用のスロットを割り当てる
- データサイズによる上限なし
- 共有スロットプール
- 方法
BigQuery BI Engine
- BI Engine とは
- BigQuery が提供するオンメモリ機能
- 主に BI ツールからのクエリをキャッシュする目的で利用
- 利用方法
- 利用するメモリサイズを予約する
- メモリサイズに応じて課金
- 優先テーブルを指定
- 優先テーブルにアクセスしたクエリ結果がキャッシュされる
- 利用するメモリサイズを予約する
BigQuery Migration Service
- BigQuery Migration Service
BigQuery Migration Service は、データ ウェアハウスを BigQuery に移行するための包括的なソリューションです。評価と計画、10 を超える言語の SQL 変換、データ転送、データ検証など、移行の各フェーズに役立つ無料ツールが用意されています。これらのツールを組み合わせて移行を加速し、リスクを軽減して、価値創出までの時間を短縮できます。
- 機能
BigQuery Data Transfer Service
- BigQuery Data Transfer Service
- サポートされるデータソース
- 設定方法
- コンソール, bq コマンド, API
- 設定内容イメージ
- 転送ジョブを作成、みたいな
- Source、Destination、ジョブのスケジュールオプションを指定する
- その他ツール
データの暗号化・マスキング
- 参考:機密データを保護する BigQuery の新機能を発表
- マスキング
- 動的データのマスキング
- 設定方法
- 新しい taxonomy を作成して、ポリシータグを追加
- 上で作ったポリシータグに data masking rule を追加
- ルールの要素
- 管理名, マスキングルール(NULL, Hash, Default)、読み取り可能とする Principals(IAM ユーザー)
- 該当の Principals に roles/bigquerydatapolicy.maskedReader が自動付与される
- ルールの要素
- マスキングしたいテーブルの列に、作成したポリシータグを付与する
- 暗号化
- Cloud KMS を使用した列レベルの暗号化
- Cloud KMS にある鍵を用いて、AEAD 暗号化関数を利用する
- Cloud DLP の利用
- Cloud KMS を使用した列レベルの暗号化
BigQuery ML
- BigQuery ML
- SQL クエリを利用して機械学習モデルを作成できる
- サポートされるモデル
- 利用方法
- BigQuery ML Reference
- モデルの作成
CREATE MODEL ... OPTIONS (model_type='利用種類', ...) SELECT ... FROM ...;
- モデルの評価
SELECT * FROM ML.EVALUATE(MODEL モデル名, (SELECT ... FROM ...));
- モデルを使って予測
SELECT * FROM ML.PREDICT(MODEL モデル名, (SELECT ... FROM ...));
- モデルのエクスポート
- Cloud Storage にエクスポートできる
- 用途
- ローカル環境へデプロイ
- Python での編集
- 用途
- Cloud Storage にエクスポートできる
- Vertex AI Model Registry に登録
- Vertex AI Prediction にデプロイ
- オンライン予測用のエンドポイントを発行
アクセス制御
- 各リソースへのアクセス権は、各 IAM ユーザー・グループ(principal)への IAM Role の付与により管理される
- 管理できるリソース単位
- IAM Role の種類
- 付加的なアクセス制御
- 承認によるアクセス制御
- いわゆる「承認済みビュー」とか言われるもの
- 承認できる種類
- Authorized Dataset
- Authorized Routine
- Authorized View
- 設定方法(利用法)
- テーブル列(分類)による制御
- 列レベルのアクセス制御の概要
- ポリシータグを利用
- 設定方法
- 新しい taxonomy を作成して、ポリシータグを追加
- 上で作った taxonomy に「アクセス制御の適用」を有効化し、ポリシータグ毎に適用する Principals を設定
- アクセス許可したい principas に
Data Catalog のきめ細かい読み取りのロール(the Data Catalog Fine-Grained Reader role)
を設定
- アクセス許可したい principas に
- アクセス制御させたいテーブルの列に、作成したポリシータグを付与する
- 列レベルのアクセス制御の概要
- テーブル行による制御
- BigQuery の行レベルのセキュリティの概要
- 設定方法
- 行レベルのアクセス ポリシーのルールは、以下 SQL 文にて作成/管理される
- 承認によるアクセス制御
--- ユーザー「abc@example.com」には、name 列が taro の行のみが表示される CREATE ROW ACCESS POLICY sample_filter ON project.dataset.my_table GRANT TO ('user:abc@example.com') FILTER USING (name = 'taro');
- Analytics Hub の概要
- BigQuery 内のデータを、他 BigQuery ユーザーと共有する仕組み
- BigQuery データを Publish/Subscirbe するようなサービス
- データセット・テーブル単位での共有権限(IAM を利用したもの)でも実現できるが、それを発展/柔軟にしたサービス
- BigQuery 内のデータを、他 BigQuery ユーザーと共有する仕組み
管理
- custom quotas
- 1日に処理されるクエリデータ量の上限を設定
- 種類
- プロジェクト全体
- ユーザー個別
- スナップショット
- テーブル スナップショットの概要
- 制限
- テーブル単位
- 取得スナップショットの有効期間を設定可能
- タイムトラベル機能を利用し、取得時点だけでなく、過去7日間までの指定した時点でのスナップショットを取得できる
- スケジューリング機能はなし
- 何らかのスケジューラーサービスにて、取得処理を叩く必要がある
- 取得方法
CREATE SNAPSHOT TABLE
文bq cp --snapshot
- API
- タイムトラベル
- タイムトラベルを使用した履歴データへのアクセス
- 過去7日間の、任意の時点のデータにアクセスできる ※デフォルト
- 利用方法
- FOR SYSTEM_TIME AS OF 句 を利用
SELECT * FROM t FOR SYSTEM_TIME AS OF '2017-01-01 10:00:00-07:00';
SELECT * FROM t FOR SYSTEM_TIME AS OF TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 3 HOUR);
bp cp
コマンドを利用して、テーブルとして復元- UNIX 時間を指定
- bq cp dataset.table@1624046611000 dataset.table_restored
- 相対時間(ミリ秒)で指定
- bq cp dataset.table@-3600000 dataset.table_restored
- UNIX 時間を指定
- FOR SYSTEM_TIME AS OF 句 を利用
- モニタリング
- INFORMATION SCHEMA
- Cloud Monitoring の指標
- query/scanned_bytes_billed
- slots/allocated_for_project_and_job_type, slots/allocated_for_reservation
- storage/stored_bytes
- Cloud Auditlog
- AuditLog
- BigQuery 全体に関わる操作(Reservation, Connection)を記録
- BigQueryAuditMetadata
- テーブルに対する読み書きのアクセスを記録
- AuditLog
Cloud SQL
インスタンス・構成
- インスタンス設定
- ストレージ
- 最大容量:64TB (MySQL, PostgreSQL)
- ストレージ
- 高可用性について
管理
- バックアップ
- 増分バックアップ
- インスタンス削除後も 4 日間保持
- 種類
- オンデマンド・バックアップ
- 自動バックアップ
- バックアップ・ロケーション
- 選択可能
- 最も近いマルチリージョン
- デフォルト
- カスタム
- 特定リージョンを指定可能
- 最も近いマルチリージョン
- 選択可能
- リカバリ
- モニター
- Cloud Monitoring
- 確定利用割引
アクセス制御
- アクセス制御の認可
- インスタンス・レベル
- IAM で管理
- データベース・レベル
- データベース側機能
- インスタンス・レベル
- 接続制限
- Cloud SQL Auth Proxy
- Public IP/Private IP 環境
- Forward Proxy として機能する
- 承認済みネットワーク
- Public IP 環境
- アクセス可能な IP アドレスをデータ指定
- Cloud SQL Auth Proxy
Database Migration Service
- Database Migration Service
- オンプレミスやその他 Cloud から、Cloud SQL へ移行
Cloud Bigtable
アーキテクチャー
- Bigtable のアーキテクチャ
- インスタンス
- クラスタ
- ノード
- コンピューティング・リソースにあたる
- マシンタイプの選択みたいなことはできない
- 最大スループットに関与
- コンピューティング・リソースにあたる
- タブレット
スキーマ設計
- テーブルを構成する要素
- 最適なスキーマ設計・ベストプラクティス
- 時系列データ用のスキーマ設計
- パフォーマンス
- パフォーマンス低下の原因
- パフォーマンステスト時の留意点
- 十分なデータサイズ
- 単一のテーブルでテスト
- 負荷の大きな事前テストを数分間実行する
- これによりノード間にデータを分散してくれる
- 最低 10 分間テストする
- これによりノード間にデータを分散してくれる
- Cloud Monitoring のメトリックス
- Key Visualizer
管理
- インスタンスの変更
- 大凡のことはダウンタイムなしで変更できる
- クラスタのロケーション変更も可能
- 大凡のことはダウンタイムなしで変更できる
- バックアップ
- Bigtable のバックアップについて
- テーブル単位
- バックアップ取得元、または新規インスタンスへ復元できる
- スケジューリング機能はない
アクセス制御
Cloud Spanner
Cloud Spanner のアーキテクチャー
- Cloud Spanner のハイレベルアーキテクチャ解説
- インスタンス
- リージョン or マルチリージョン
- コンピューティング層はゾーン間で分散されて配置
- マルチリージョンである優位性
- 距離的に離れた複数クライアントからのアクセスに早くなること
- リージョン or マルチリージョン
- ノード/スロット
- コンピューティング・リソースのサイズ
- 以下より選択
- ノード単位
- 1000 スロット/1 ノード
- スロット単位
- 1000 スロットから
- 以降は 100 単位で管理可能
- ノード単位
- ストレージ層
- ノード/スロットに紐づく
- 1 ノード(1000 スロット)あたり 4TB
- データは Split という単位で管理される
- ノードとストレージ層間の、データ I/O 単位みたいな
- 複数ゾーンに跨った、ストレージ層上でのデータ分散も Split 単位で行われる
- 4GB/1split
- 主キーの辞書順に並べられて格納されている
- ノードとストレージ層間の、データ I/O 単位みたいな
- データベース
- 1 インスタンスに複数データベースを配置可能
スキーマ
- 主キー
- ホットスポットを防ぐ
- 主キーとする列の順序を考慮
- 「利用日時 + ユーザー ID」みたいな組み合わせ/順序にする
- split シャーディング用の HASH 値を用意し、主キーに含める
- 「HASH 値 + 利用日時 + ユーザー ID」みたいな組み合わせ/順序にする
- UUID を利用
- ビット反転の値を利用
- 本来
11010001
という数値の場合10001011
という数値として利用する
- 本来
- 主キーとする列の順序を考慮
- タイムスタンプ・キーを降順に格納する
- 最新日付からデータを取得することが多い場合、主キーの設定時に降順の指定(DESC)を加える
- テーブル作成後は変更できない
- ホットスポットを防ぐ
- 親子テーブル関係
- 正規化して複数に分かれたテーブルを、データ層上で近い位置(同一 Split 内)に配置する工夫、みたいな
- テーブル・インターリーブを利用して作成
- 子テーブルを作成する時に、親テーブルを指定
- 子テーブルの主キーの先頭は、親テーブルの主キーでないといけない
- Google 標準 SQL
- CREATE TABLE 子テーブル名 ( ... ), PRIMARY KEY ( ... ), INTERLEAVE IN PARENT 親テーブル名 ON DELETE CASCADE;
- ビュー
- セカンダリ・インデックス
- インデックス・オプション
- インターリーブされていないインデックス
- インデックスのデータは、インデックス元テーブルの位置を考慮せず、split 上に格納される
Spanner は、テーブルと同じ方法でインデックス データを格納し、インデックス エントリごとに 1 行を使用します。テーブルの設計上の考慮事項の多くは、インデックスにも適用されます。 インターリーブされていないインデックスは、ルートテーブルにデータを格納します。 ルートテーブルは任意のルート行の間で分割できるため、インターリーブされていないインデックスは、ほとんどどのようなワークロードでも、ホットスポットを無視して、任意のサイズに拡大できます。残念ながらこれは、通常はインデックス エントリがプライマリ データと同じスプリットに含まれないことも意味します。これにより、書き込みプロセスでは余分な作業とレイテンシが発生し、読み取り時には参照するスプリットが増えます。
- インターリーブされたインデックス
- インデックスのデータは、インデックス元テーブルの位置を考慮して、split 上に格納される
一方、インターリーブされたインデックスでは、データはインターリーブされたテーブルに格納されます。これらは、単一エンティティのドメイン内を検索する場合に適しています。 インターリーブされたインデックスでは、データとインデックスのエントリは強制的に同じ行ツリーに格納され、それらの間の結合がはるかに効率的になります。
- インターリーブされていないインデックス
- 作成方法(Google 標準 SQL)
- インデックス
- CREATE INDEX インデックス名 ON テーブル名(インデックス列, インデックス列, ...);
- インターリーブされたインデックス
- CREATE INDEX インデックス名 ON テーブル名(インデックス列, インデックス列, ...) INTERLEAVE IN 別テーブル名;
- インデックス
- インデックス作成は、大規模なスキーマ更新処理にあたる
- クエリ・ヒント
- SELECT ... FROM ... @{FORCE_INDEX=MyTableIndex}
- NULL 値
- デフォルトでは NULL 値もインデックスされるので、利用有無の指定ができる
- 一意のインデックス
- インデックスされる値を UNIQUE と宣言できる
- インデックス・オプション
- 外部キー
- チェック制約
管理
- データの保管
- モニタリング
- Query Insights
- WEB コンソール上のダッシュボード
- 主な指標
- CPU 使用率
- 上位クエリの表示
- Spanner Monitoring ダッシュボード
- Cloud Monitoring
- Key Visualizer
- Query Insights
- パフォーマンス
- SQL のベスト プラクティス
- クエリ・オプティマイザー
- クエリプラン・ビジュアライザー
- クエリプランを視覚的に確認できる
- 確定利用割引
- 特定期間の利用を確約して、利用料を安くする仕組み
- 期間
- 1年 or 3 年
- 確約内容
- リージョン関係なし
- Cloud Spanner のコンピューティング容量
- 期間
- 特定期間の利用を確約して、利用料を安くする仕組み
アクセス制御
- アクセス方法
- アクセス制御
- Cloud IAM による
- 事前定義 IAM ロール
Cloud Dataflow
Apache Beam の基本
- Apache Beam のコンセプト
- Streaming Pipeline
パイプラインの構成
- パイプライン・オプションで指定
- 設定方法
- Pipeline options リファレンス
- Resource utilization
- num_workers, max_num_workers
- Security and networking
- service_account_email
- network, subnetwork, no_use_public_ips
- Worker-level options
- worker_region, machine_type, disk_size_gb
- Resource utilization
- Dataflow prime
- 水平スケーリングと垂直スケーリングを使用してワーカーを管理できる
- ※水平スケーリングは、普通の Dataflow でも可能
- Dataflow と Dataflow Prime の機能比較
- 自動垂直スケーリング
- ワーカーの使用可能メモリサイズを動的に調整
- Right Fitting
- Apache Beam の Resource hintsをもとに、ワーカー・リソースをカスタマイズする
- 水平スケーリングと垂直スケーリングを使用してワーカーを管理できる
管理
ジョブ(パイプライン)の管理
種類 | アクション | バッチ | ストリーミング | 説明 |
---|---|---|---|---|
停止 | キャンセル | ○ | ○ | 処理を直ちに停止 |
停止 | 強制キャンセル | ○ | ○ | 処理を直ちに停止 キャンセルの処理で停止しない場合に実行する |
停止 | ドレイン | ○ | 現在処理しているデータをもって停止 ただし window の完結を待つことはなく、window の間隔が 30 分とかであれば途中で停止となる |
|
更新 | アップデート | ○ | 新規ジョブが作成され、既存ジョブを置換する ジョブ名が一致している必要がある |
- 参考
- 実行中の Dataflow パイプラインを停止する
- 既存のパイプラインを更新する
- バッチのジョブを更新したい場合には、単純に作り直しを行う
モニタリング
- Dataflow Monitoring Interface
- WEB コンソールよりジョブ毎に確認できる
- 表示される指標
- Cloud Monitoring
- Apache Beam Metrics を拾う
- Counter, Distribution を取得してくれる
- ジョブのアラートポリシーを設定
- ジョブの失敗やリソース利用状況を検知できる
- Apache Beam Metrics を拾う
- Cloud Logging
- Apache Beam コード内のロギング内容を連携してくれる
アクセス制御
- パイプラインの作成/管理、ワーカー所持のアクセス権
- ネットワーク
Cloud Dataproc
関連サービス
サービス名 | 概要 | コンピューティング・リソース |
---|---|---|
Dataproc | Manged な Hadoop 向け PaaS | VM |
Dataproc on GKE | Manged な Hadoop 向け PaaS | GKE |
Dataproc Hub | Managed な Jupyter Hub | - |
Dataproc Serverless | サーバーレスな Spark 実行環境 | - |
Dataproc Metastore | サーバーレスな Hive ベースのメタストア | - |
Dataproc クラスタ
- 配置先
- global(特別なマルチリージョンを意)
- リージョン
- 複数リージョンを指定することも可能
- エンドポイント
- クラスタ・タイプ
- 種類
- 標準(マスター 1 個、ワーカー N 個)
- 単一ノード(マスター 1 個、ワーカー 0 個)
- 高可用性(マスター 3 個、ワーカー N 個)
- 利用するスケーリングポリシー
- 高度な柔軟性モード(Enhanced Flexibility Mode)
- シャッフルデータを管理し、ノードの削除に起因するジョブの遅延を最小限に抑える
- 種類
- スケーリングポリシー
- ワーカー構成(プライマリ/セカンダリの最小最大ノード数・重み)
- graceful decommission timeout の管理
Timeout in seconds for YARN node graceful decommission. This is the maximal time to wait for running containers and applications to complete before transition a DECOMMISSIONING node into DECOMMISSIONED.
- Graceful Decommission of YARN Nodes
- クールダウン期間の管理
- ノード種類
- ノードの構成
- ネットワーク
コネクタ
- 連携可能なサービス
- BigQuery コネクタ
- Cloud Storage
- 利用方法
- Hadoop, Spark 向けのいずれにおいても、該当 jar ファイルがクラスタにインストール済みである
- Cloud Storage と HDFS の比較
一般に、大容量のデータ パイプラインでは、Cloud Storage をデータの最初と最後のソースとして使用することをおすすめします。たとえば、ワークフローに 5 つの Spark ジョブが連続して含まれている場合、最初のジョブは Cloud Storage から初期データを取得し、シャッフル データと中間ジョブ出力を HDFS に書き込みます。最後の Spark ジョブは、その結果を Cloud Storage に書き込みます。
- 利用方法
- Cloud Bigtable
- java クライアントライブリが用意されている
- Spark, HBase Spark 向けの jar ファイルが公開されている
- 利用方法
- ジョブ送信時に、該当 jar ファイルを指定して実行する
- Cloud Pub/Sub Lite
データ移行
- オンプレ HDFS => Cloud Storage
- 検証
- Hadoop の新しいコンポジット CRC ファイル チェックサムの仕組み
- ファイルのチェックサムを取得できる
- Hadoop DistCp では自動的にこのチェックサムが動作する
アクセス制御
- Cloud IAM による
管理
- モニタリング
- Cloud Monitoring
- 収集されるもの
- Dataproc のメトリクス(ワーカーのリソース情報)
- Hadoop のメトリクス
- 収集されるもの
- Cloud Profiler
- Cloud Monitoring
Dataprep by Trifacta
- Dataprep
- Youtube - Cloud Dataprep Tutorial - Getting Started 101
- GUI で完結できるデータパイプライン・オーケストレーター
- ノーコード
- 内部的には Dataflow が動作しているらしく、Dataflow の料金が発生
Cloud Data Fusion
- Cloud Data Fusion の概要
- Youtube - Google Cloud Data Fusion で Salesforce データを連携利用
- GUI で完結できるデータパイプライン・オーケストレーター
- ノーコード
- CDAP を wrapper したもの
- Extract/Load 部分強み
Data Catalog
- Data Catalog とは
- dataplex 内にあるフルマネージドなメタデータ管理サービス
- 機能
Cloud Pub/Sub
サブスクリプション
- タイプ
- オプション
- デッドレター・トピック
- 再試行ポリシーをもっても subscribe されない場合、エラー向けのトピックへ publish される
- メッセージの順序指定
- サブスクリプション作成時に有効化
- Publish する時に、orderingKey にあたる値を指定して Publish する
- データのフィルタリング
- データ・スキーマの検証
- 1 回限りの配信
- 一意のメッセージ ID に基づき1回限りの配信を行える
- pull のみ
- Ack の応答をもって配信済みと判断される
- デッドレター・トピック
- 他 Google Cloud サービスとの連携
- BigQuery
- Subscription タイプの BigQuery を利用
- Cloud Functions
- Cloud Fucntions の着火条件に Pub/Sub トリガーを利用
- Cloud Run/App Engine
- Cloud Run/App Engine のエンドポイントへ push する
- Dataflow
- Apache Beam 内の Pub/Sub 向けライブリを利用
- BigQuery
管理
- モニタリング
- Cloud コンソール
- Pub/Sub のページ内で、Topic, Subscription 毎にグラフ表示されている
- Cloud Monitor の Alert 作成ページへ飛ぶリンクが用意されている
- Cloud Monitoring
- メトリックス
- subscription/push_request_count, subscription/pull_request_count
- topic/send_request_count, topic/num_retained_messages
- Cloud コンソール
アクセス制御
- Cloud IAM による
Cloud Monitoring
Cloud Logging
転送
- 要素
Cloud DLP (Cloud Data Loss Preventation)
- Cloud DLP
- 機能
- 機密データの検出/分類
- スケジューリング機能もあり
- データのマスキング/匿名化
- 他サービスとの連携
- 機密データの検出/分類
- サポートされるデータストア
- infoType 検出器
Cloud KMS (Cloud key Management Service)
- Cloud KMS
- 概念
- key ring
- 特定の Google Cloud ロケーション内で key をグルーピングするもの
- key
- まさに鍵のこと
- key ring に紐づく
- 種類
- 対象鍵/非対称鍵
- key version
- key はバージョン管理できる
- 自動ローテーションも可能
- key ring
Looker Studio
- データをキャッシュする仕組みをもつ
- データの更新頻度を管理する
データソースがカスタム SQL クエリ
SELECT \* FROM tableName
に接続するとします。このクエリの結果は、データソース全体ではなくグラフとコンポーネントに適用されるため、キャッシュに保存されません。ここで、レポートに指標
Sum(revenue)
を含むスコアカードを追加したとします。スコアカードの基になるクエリは、SELECT Sum(revenue) FROM (SELECT \* from tableName))
のようになります。このクエリの結果は、このスコアカード用にキャッシュに保存されます。
Cloud Storage
Storage class
ストレージ クラス | 最小保存期間 | 取得料金 | 利用ケース |
---|---|---|---|
STANDARD | なし | なし | |
NEARLINE | 30 日 | あり | 月に 1 回程度アクセスするデータ |
COLDLINE | 90 日 | あり | 四半期に 1 回程度アクセスするデータ |
ARCHIVE | 365 日 | あり | 1 年間に 1 回未満しかアクセスしないデータ |
- ARCHIVE クラスでも、データは即時で取得できる
Storage Transfer Service
- Storage Transfer Service
- 可能な Data Source
管理
- モニタリング
- Cloud Audit Logs
- Cloud Monitoring
- メトリックス
- storage/object_count, storage/total_bytes
- メトリックス
- 使用状況ログ/ストレージログ
- CSV 形式でログを出力してくれる
- 基本的に、前述 2 つのサービスのいずれかで代替可能で、そちらが推奨される
Transfer Appliance
- Transfer Appliance
- 利用に適しているケース
- データサイズが 10 TB 以上である
- ネットワーク経由でデータをアップロードすると、1 週間以上かかる場合がある
Vertex AI
- Vertex AI の概要
- ML ワークフローを統一的に管理できるサービス
- 主にできること
- データのラベリングの依頼(Vertex Data Labeling)
- モデルのトレーニング・リソース提供
- 作成モデルは Cloud Storage に出力される
- モデルのデプロイ
- 予測の処理用リソース
- 予測に使用するコンピューティング リソースの構成
- マシンタイプを柔軟に設定できる(vCPU, GPU, Memory)
- スケーリング
- オンライン予測(DeployedModel)
- バッチ予測(BatchPredictionJob)
- 予測の処理用リソース
- 主にできること
- 利用できるトレーニング方法
Vertex AI Workbench
- Vertex AI Workbench の概要
- Jupyter Notebook のサービス
- 種類
- Managed
- ユーザー管理
- ユーザーが細かく管理できる Deep Learning VM Instance 上で Notebook が立ち上がる
AI Infrastructure
- Cloud GPU
- 利用可能
- GCE
- GKE
- Dataproc
- 利用可能
- Cloud TPU
- Deep Learning Containers
- Deep Learning 環境向けに最適化された開発されたコンテナ・イメージ
- プリ・インストール済
- TensorFlow
- scikit-learn
- PyTorch
- R
- XGBoost
- GPU 対応の NVIDAI ドライバも入っている
- Google Cloud 上の様々なサービスにデプロイできる
- GKE
- Vertex AI
- Cloud Run
- Deep Learning VM Image
Deep Learning Containers
の VM 版
- TensorFlow Enterprise
Cloud Vision API, Cloud Video Intelligence API
- Cloud Vision API ドキュメント
- Cloud Video Intelligence API
- Managed AI サービス
- 画像を分析する
- 動画を分析する
- 利用方法
- 可能な分析
Cloud Natural Language API
- Cloud Natural Language ドキュメント
- Managed AI サービス
- 非構造化テキストを分析する
- 利用方法
- 可能な分析
Cloud Speech-to-Text, Cloud Text-to-Speech
- Cloud Speech-to-Text API
- Managed AI サービス
- 音声をテキスト変換する
- 利用方法
- Cloud Text-to-Speech の基本
- Managed AI サービス
- テキストから合成音声を出力する
Cloud Translation API
- Translation AI
- Managed AI サービス
- 機械翻訳機能を提供
- 機能の比較
Dialogflow
- Dialogflow
- サービス内容
- voicebot
- chatbot
Document AI
- Document AI
- Managed AI サービス
- ドキュメントから非構造化データを抽出(OCR)
- ドキュメント全般に対して対応
- 類似サービス
- Lending DocAI
- 住宅ローンのドキュメントに特化
- Procurement DocAI
- 請求書や領収書などのドキュメントに特化
- Vision API
- 向こうは写真に特化
- Lending DocAI
Recommendations AI
- マネージド・レコメンドシステム
機械学習・AI の基本
- 特徴量の正規化
- 特徴量の大きさ(尺度)を揃える前処理
- 分散正規化
- 特徴量の平均が 0、標準偏差が 1 となるように、特徴量を変換
- 最小最大正規化
- 特徴量の最小値が 0、最大値が 1 となるように、特徴量を変換
- モデルの種類
- 過学習(overfitting)
- 参考:オーバーフィットって何ですか?
- 定義
- 訓練データに対しては正確な予測を提供するが、テストデータ・実際のデータには不正確な予測となること
- モデルが一般化できず、汎化誤差が大きくなるケース
- 原因
- 検出する方法
- K 分割交差検証
- 10 分割交差検証(10-fold cross validation)
- 層化 k 分割交差検証(stratified k-fold cross validation)
- データセットを 10 分割して、9 つの集合を訓練データに、残り 1 つを検証データとして処理を 10 回繰り返す
- 参考:比較的少なめのデータで機械学習する時は交差検証 (Cross Validation) をするのです
- 防ぐ方法
- 過小学習(underfitting)
- 定義
- データに対して学習不足でモデルが単純過ぎて汎化誤差が大きくなるケース
- 定義
- 混合同列(Confusion Matrix)
- 2 値分類問題で出力されたクラス分類の結果をまとめた表のこと
- 予測と実績のクラスラベル組み合わせを集計した表
- 2 値分類機械学習モデルの性能を測る
- BigQuery ML で 2 値ロジスティック回帰モデルをつくる時の
ML.EVALUATE
クエリ結果は、混合同列を返す - 指標
- 適合率(precision)
- 正例の場合
- 正例と予測して、実際に正例だった割合
- tp/(tp+fp)
- 予測するクラスを間違えないようにしたい時に利用する指標
- 再現率(recall)
- 正例の場合
- 実際の正例のうち、正例と予測した割合
- tp/(tp+fn)
- 一般的に、適合率と再現率はトレードオフの関係となる
- F 値(F-Value)
- 適合率と再現率の調和平均
- 2/(1/適合率 + 1/再現率) = 2 _ 適合率 _ 再現率/(適合率 + 再現率)
- 適合率と再現率のバランスが良い値になることを目指す時に利用する指標
- 正解率(accuracy)
- 正例と負例とを問わず、予測と実績が一致したデータの割合
- (tp+tn)/(tp+fp+fn+tn)
- 適合率(precision)
- 2 値分類問題で出力されたクラス分類の結果をまとめた表のこと
- ROC 曲線(Receiver Operating Characteristic)/AUC(Area Under the Curve)
- 平均二乗誤差(MSE:Mean Squared Error)
- 損失関数
- 「正解値」と、モデルによる出力された「予測値」とのズレの大きさを計算する関数、のこと
- 主に、回帰問題における出力層の評価関数
- 各データに対して「予測値と正解値の差(=誤差)」の二乗値を計算し、その総和をデータ数で割った値(=平均値)を出力する関数
- 出力が 0 に近いほどより良い
- 損失関数
- 参考