📊 Associate Data Practitioner

1. データの準備と取り込み

ETL と ELT、取り込みの全体像

データ活用は 取り込み (Ingest) → 保存 (Store) → 変換 (Transform) → 分析 (Analyze) の流れで考えます。Google Cloud では、変換を BigQuery の外で行う ETL よりも、まず BigQuery にロードして SQL で変換する ELT が推奨される場面が多いです。

方式特徴代表サービス
ETL変換してからロード。複雑な加工・ストリーム処理向きDataflow, Dataproc, Cloud Data Fusion
ELT先にロードし DWH 内の SQL で変換。シンプル・SQL 人材で運用可能BigQuery + Dataform / スケジュールクエリ
CDC / レプリケーションDB の変更差分を継続的に反映Datastream
SaaS・他クラウド連携ノーコードで定期転送BigQuery Data Transfer Service
「SQL だけでできるか?」→ BigQuery。「ストリーミング/複雑な変換」→ Dataflow。「既存の Spark/Hadoop 資産」→ Dataproc。「GUI でノーコード」→ Data Fusion。

バッチ取り込み:Cloud Storage と BigQuery ロード

バッチ取り込みの基本は Cloud Storage にファイルを置き、BigQuery へロードジョブを実行することです。ロードジョブは無料(スロット共有プール利用)で、ストリーミング挿入は課金対象です。

形式特徴
Avroスキーマ内包・行指向・圧縮可。BigQuery ロードで最も推奨(並列読込が効率的)
Parquet / ORC列指向・スキーマ内包。分析・Hadoop/Spark 系と相性が良い
CSVスキーマなし(自動検出可)。ヘッダ・区切り・クォート処理に注意
JSON (NDJSON)改行区切り JSON。ネスト構造(STRUCT/ARRAY)を表現可能
bq load --source_format=PARQUET mydataset.sales gs://my-bucket/sales/*.parquet
bq load --autodetect --source_format=CSV --skip_leading_rows=1 mydataset.t gs://b/data.csv
  • 書き込み設定:WRITE_APPEND(追記)/WRITE_TRUNCATE(置換)/WRITE_EMPTY(空のときのみ)
  • ロードしたくない場合は 外部テーブル / BigLake テーブルで Cloud Storage を直接クエリ(性能は劣るが即時利用可)
  • 大量ファイル転送:Storage Transfer Service(他クラウド・オンプレ→GCS)、Transfer Appliance(超大容量オフライン)

ストリーミング取り込み:Pub/Sub と Dataflow

Pub/Sub はフルマネージドのメッセージングサービス(非同期・疎結合・at-least-once 配信)。パブリッシャーがトピックへ送信し、サブスクライバーがサブスクリプション経由で受信します。

  • BigQuery サブスクリプション:Pub/Sub から BigQuery へ直接書き込み(Dataflow 不要)
  • Cloud Storage サブスクリプション:メッセージをファイルとして GCS へ保存
  • Pull / Push:Pull はサブスクライバーが取得、Push は HTTPS エンドポイントへ配信
  • Dead-letter トピック:処理に失敗し続けるメッセージの退避先

Dataflow は Apache Beam ベースのフルマネージド処理基盤で、バッチとストリーミングを同じコードで扱えます。オートスケール、ウィンドウ処理(Fixed / Sliding / Session)、遅延データ(ウォーターマーク・トリガー)を扱えます。Google 提供のテンプレート(例:Pub/Sub → BigQuery、GCS Text → BigQuery)でコードなしでも実行可能です。

要件選択
イベントを受けて即座に BigQuery へ格納(変換なし)Pub/Sub BigQuery サブスクリプション
ストリームの集計・結合・変換Dataflow
BigQuery へ直接ストリーミング挿入するアプリBigQuery Storage Write API(推奨)

データベース・SaaS からの取り込み

サービス用途
DatastreamMySQL / PostgreSQL / Oracle / SQL Server 等から BigQuery・GCS へサーバーレス CDC(低遅延レプリケーション)
BigQuery Data Transfer Service (DTS)Google 広告・YouTube・GA・Amazon S3・Teradata 等からのスケジュール転送。マネージドでノーコード
Database Migration Serviceデータベース移行(Cloud SQL / AlloyDB へ)。分析用途の CDC ではない
Cloud Data FusionGUI でパイプラインを構築(CDAP ベース)。多数のコネクタ
Federated query / 外部接続Cloud SQL / Spanner などを BigQuery から直接クエリ(EXTERNAL_QUERY)

データの変換・クレンジング

取り込み後は 品質確認 → クレンジング → 整形 を行います。主なデータ品質の観点:完全性(欠損)・一意性(重複)・正確性・一貫性(形式)・適時性。

課題対処(BigQuery SQL 例)
欠損値COALESCE(col, 0)、IFNULL、行の除外、平均値/中央値補完
重複SELECT DISTINCT、ROW_NUMBER() OVER (PARTITION BY id ORDER BY ts DESC) = 1 や QUALIFY
型・形式の不一致CAST / SAFE_CAST、PARSE_DATE、REGEXP_REPLACE、TRIM / LOWER
外れ値四分位範囲(IQR)・標準偏差で検出し、除外/丸め
JSON / ネストJSON_VALUE、UNNEST で展開
CREATE OR REPLACE TABLE clean.orders AS
SELECT * EXCEPT(rn) FROM (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY order_id ORDER BY updated_at DESC) rn
  FROM raw.orders)
WHERE rn = 1;
  • Dataform:BigQuery 上の SQL 変換(ELT)をバージョン管理・依存関係管理・テスト(assertions)付きで運用
  • Cloud Data Fusion の Wrangler/Dataproc の Spark:コード/GUI による変換
  • Gemini in BigQuery:自然言語から SQL 生成・データ準備の支援

BigQuery のテーブル設計(パーティション・クラスタ)

  • パーティション:日付/タイムスタンプ列・取り込み時間・整数範囲で分割。パーティションプルーニングでスキャン量とコストを削減。require_partition_filter で全件スキャンを防止
  • クラスタリング:最大4列で並べ替え。フィルタ/集計の高速化。パーティションと併用可
  • パーティション向き:日付範囲での絞り込みが多い/クラスタ向き:カーディナリティが高い列でのフィルタ
  • 非正規化・ネスト(STRUCT/ARRAY):BigQuery では JOIN を減らす非正規化が有利
  • ワイルドカードテーブルよりパーティションテーブルを推奨(シャーディングは避ける)
CREATE TABLE ds.events (ts TIMESTAMP, user_id STRING, type STRING)
PARTITION BY DATE(ts) CLUSTER BY user_id, type
OPTIONS (partition_expiration_days = 90, require_partition_filter = TRUE);

Dataproc と取り込みサービスの使い分け

Dataproc は Spark / Hadoop / Hive / Flink 等のマネージドクラスタ。既存のオンプレ Hadoop/Spark ジョブを最小変更で移行したい場合に選びます。Dataproc Serverless ならクラスタ管理なしで Spark バッチを実行できます。ephemeral(使い捨て)クラスタ+ Cloud Storage 保存(コンピュートとストレージの分離)がベストプラクティス。

状況最適
既存 Spark ジョブの移行Dataproc
新規のバッチ/ストリーム処理でインフラ管理を避けたいDataflow
ノーコードで ETL を組みたいCloud Data Fusion
SQL だけで変換できるBigQuery(Dataform)
Oracle→BigQuery の継続的レプリケーションDatastream
Google 広告データの日次取り込みBigQuery Data Transfer Service