Contents
BigQuery Data Transfer Service(DTS)の概要と対応データソース
1️⃣ ポイント
BigQuery Data Transfer Service (DTS) は、Google Cloud が提供するフルマネージドのデータ転送基盤です。外部ストレージや SaaS アプリケーションから取得したデータを 自動的に BigQuery にロードできるため、バッチ処理だけでなく、ほぼリアルタイムに近い分析環境を手軽に構築できます。
2️⃣ 理由(Why)
- 多様なデータソースへ対応:Cloud Storage・Google アナリティクス 360・YouTube Reporting API・Salesforce・Google Ads など、主要な Google 製品や外部 SaaS が標準でサポートされています。
- 運用負荷が低減:転送ジョブの作成・スケジューリングはコンソールまたは
gcloudコマンドだけで完了し、データ取得からロードまでのプロセスを自動化できます。 - 統合的なモニタリング:実行履歴やエラーログが Cloud Console の「Data Transfer」ページに集約され、障害発生時のトラブルシューティングが容易です。
3️⃣ 主な対応データソースと利用シーン
| データソース | 主な利用シーン |
|---|---|
| Cloud Storage | ログファイル・CSV・JSON の定期的取り込み、バックアップデータの分析 |
| Google アナリティクス 360 | Web/アプリアクセスデータやコンバージョン指標の集計 |
| YouTube Reporting API | 動画視聴レポート、収益・エンゲージメント情報の自動取得 |
| Salesforce | CRM データ(リード・商談)の定期同期 |
| Google Ads, DoubleClick, Campaign Manager など | 広告費用やパフォーマンス指標を BigQuery に集約 |
| データセットコピー / スケジュールクエリ | 同一プロジェクト内でのテーブル再利用、ETL パイプラインの簡易化 |
📚 公式ドキュメントは「BigQuery Data Transfer Service とは」をご参照ください。
必要な IAM ロールと権限設定手順
4️⃣ ポイント
DTS の転送ジョブを安全に実行するには、最小権限の原則 に沿って以下のロールをサービスアカウントまたはユーザーに付与します。
| ロール | 主な権限(代表例) | 付与対象 |
|---|---|---|
roles/bigquery.transfers.agent (BigQuery Data Transfer Service Agent) |
bigquery.transfers.update, bigquery.transfers.get, bigquery.transfers.run |
サービスアカウント |
roles/bigquery.dataEditor(BigQuery データエディタ) |
bigquery.tables.create, bigquery.tables.updateData, bigquery.jobs.create |
サービスアカウントまたは実行ユーザー |
roles/storage.objectViewer(Cloud Storage Object Viewer) |
storage.objects.get, storage.objects.list |
同上 |
任意で roles/logging.logWriter(Logging ログ書き込み) |
logging.logEntries.create |
ジョブのデバッグ情報を Cloud Logging に出力したい場合 |
注:
bigquery.dataViewerだけではテーブルへのロードができません。データを書き込む権限が必要なため、dataEditor(またはdataOwner)を併せて付与してください。
5️⃣ コンソールでのロール付与手順
- IAM と管理 → IAM を開く
- 「+ 追加」ボタンをクリックし、対象サービスアカウント(例:
dts-sa@my-project.iam.gserviceaccount.com)を入力 - 「ロールの選択」で上記ロールを順に追加し、「保存」を押す
6️⃣ gcloud コマンドでの付与例
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
PROJECT_ID=my-project SA_EMAIL=dts-sa@${PROJECT_ID}.iam.gserviceaccount.com # Transfer Service Agent ロール gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${SA_EMAIL}" \ --role="roles/bigquery.transfers.agent" # BigQuery Data Editor ロール gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${SA_EMAIL}" \ --role="roles/bigquery.dataEditor" # Cloud Storage Object Viewer ロール gcloud projects add-iam-policy-binding ${PROJECT_ID} \ --member="serviceAccount:${SA_EMAIL}" \ --role="roles/storage.objectViewer" |
ポイント:ロール付与後は、IAM の変更が反映されるまで数秒~1分程度かかります。権限エラーが出た場合は、
gcloud iam roles describe等で実際に付与された権限を確認してください。
コンソールでの新規転送作成フロー
7️⃣ ポイント
Google Cloud Console の UI はシンプルかつガイド付きです。数クリックで 転送ジョブ を作成し、スケジュールやオプションを設定できます。
手順(画面ベース)
| ステップ | 操作内容 |
|---|---|
| ① Data Transfer ページへ移動 | 左メニュー → BigQuery → データ転送 |
| ② 「転送を作成」ボタンをクリック | 新規ジョブのウィザードが開始します |
| ③ プロジェクトとデータセットの選択 | 転送先の BigQuery プロジェクト・データセット(未設定の場合は新規作成) |
| ④ 転送タイプを選択 | Cloud Storage、Google アナリティクス 360、YouTube Reporting などから目的に合わせて選択 |
| ⑤ 接続情報・スケジュール設定 | バケット名、ファイル形式(CSV/JSON/AVRO 等)、テーブルプレフィックス、実行頻度(cron 式)を入力 |
| ⑥ オプション設定 | WRITE_TRUNCATE / WRITE_APPEND の書き込みモードや、スキーマ自動検出の有無などを選択 |
| ⑦ 作成 & 手動実行テスト | 「作成」→「今すぐ実行」でジョブが正常に完了するか確認 |
✅ ベストプラクティス:初回は
WRITE_TRUNCATE(上書き)でテーブルを作り、期待通りのロード結果を確認した後、運用時はWRITE_APPEND+パーティションキーで重複防止を行うと安全です。
イベントドリブン転送の構築と検証
8️⃣ ポイント
ファイルが Cloud Storage に到着した瞬間に自動でロードする イベントベース転送 を設定すると、データ生成から分析までの遅延を数分単位に削減できます。
手順概要
- Pub/Sub トピックと通知設定
-
バケットの「設定」→「イベント通知」から
OBJECT_FINALIZE(ファイル作成完了) を対象に Pub/Sub トピックを作成し、紐付けます。 -
DTS 側でイベントベース転送を有効化
- Data Transfer ページ → 「転送を作成」→タイプ「Cloud Storage」
-
「イベントベース転送」をチェックし、先ほどの Pub/Sub トピックを指定します。
-
テストデータ投入と動作確認
|
1 2 3 4 5 6 7 8 9 10 |
# テスト用 CSV をローカルで作成 cat <<EOF > test.csv id,name,price 1,Apple,100 2,Banana,80 EOF # バケットにアップロード(/events/ プレフィックスを推奨) gsutil cp test.csv gs://my-bucket/events/ |
- アップロード後 2〜3 分以内に Data Transfer の実行履歴 にジョブが表示され、
SUCCESSが確認できれば完了です。 - エラーの場合は「実行履歴」からエラーログを取得し、権限やスキーマ不一致をチェックします。
📖 詳細手順は「BigQuery Data Transfer Serviceでイベントドリブンにデータを …」をご覧ください。
高頻度転送・コスト最適化とモニタリング
9️⃣ ポイント
1日複数回のバッチ取り込みは 転送ジョブのコピー & スケジュールずらし で実現できます。課金は「ロードしたデータ量(GB)+実行回数」に基づくため、無駄な実行を抑える工夫が重要です。
9.1 複数スケジュールの作成例
| 元ジョブ名 | コピー先ジョブ名 | 実行時刻 |
|---|---|---|
storage_daily |
storage_daily_03 |
03:00 |
storage_daily |
storage_daily_09 |
09:00 |
storage_daily |
storage_daily_15 |
15:00 |
- コピー手順:対象ジョブの「アクション」→「コピー」を選択し、名前とスケジュールだけを書き換えて保存。
- 重複防止策:テーブルは日付パーティション(例:
_PARTITIONTIME)またはファイル名にタイムスタンプを含むプレフィックスで分割し、WRITE_APPENDでロードします。
9.2 実行履歴・エラーログの確認方法
- コンソール → BigQuery → データ転送
- 対象ジョブ → 実行履歴 タブを開く
- 各ジョブのステータス、開始/終了時刻、エラー詳細が一覧表示されます。
9.3 よくある失敗ケースと対策
| エラーメッセージ | 主な原因 | 推奨対策 |
|---|---|---|
Permission denied |
IAM 権限不足(例:storage.objectViewer が無い) |
該当サービスアカウントに必要ロールを再付与 |
Invalid schema |
CSV 列数・データ型がテーブルと不一致 | テーブルスキーマを事前に作成、または 自動検出 オプション有効化 |
Duplicate load detected |
同一ファイルが複数ジョブで処理された | ファイル名にタイムスタンプ付与、もしくはパーティショニングで同時ロードを防止 |
9.4 コスト見積もりとベストプラクティス
- 課金モデル:
Data Transferは「ロードしたデータ量(GB)+実行回数」ベースです。公式料金は BigQuery Data Transfer Service の料金ページ を参照してください。 - 最適化ポイント
- バッチサイズを大きくまとめる → 実行回数削減でコストダウン
- 不要な転送は無効化/削除 → 無駄な実行を防止
- 無料トライアルクレジット を活用し、実運用前に月間コスト感覚を掴む
| 月間データ量 (GB) | 推定料金(標準) |
|---|---|
| 10 GB | 約 ¥1,200 |
| 100 GB | 約 ¥12,000 |
| 500 GB | 約 ¥60,000 |
💡 コスト削減のヒント:同一バケット内で複数データソースがある場合は、単一転送ジョブ にまとめられるか検討し、ロジックを統合することで課金回数を減らせます。
まとめ
- BigQuery Data Transfer Service は、Google Cloud と主要 SaaS のデータ連携をコード不要で実現できる強力なサービスです。
- 必要な IAM ロールは最小権限で付与し、コンソールまたは
gcloudから簡単に設定できます。 - コンソール操作だけで 定期転送・イベントベース転送 の両方が構築でき、スケジュールコピーやパーティショニングで高頻度転送も実現可能です。
- 実行履歴とエラーログを活用し、失敗原因を速やかに特定・対処することで運用の安定性が向上します。
- コストは「データ量 × 単価 + 実行回数」で算出されるため、バッチサイズ調整と不要ジョブの削除で最適化できます。
次のステップ:まずは小規模な Cloud Storage → BigQuery の転送を試し、IAM 設定・スケジュール設定に慣れたら、SaaS データやイベントドリブン転送へ拡張してみましょう。
本記事の内容は 2026 年 4 月時点の情報です。最新の仕様や料金は公式ドキュメントをご確認ください。