🟡 HubSpot Operations Hub(Data Hub)実践教科書 — 2026年版
Chapter 6

データウェアハウス統合(Enterprise)
Snowflake / BigQuery との双方向連携

「HubSpot のすべての CRM データを、分析チームが使う Snowflake にリアルタイムで同期したい」「BigQuery の機械学習モデルが算出したスコアを HubSpot の自動化に使いたい」——これらは Data Hub Enterprise のデータウェアハウス統合(DWH 統合)が解決する問題だ。本章では Snowflake・BigQuery との双方向同期のアーキテクチャ・スキーマ設計・セットアップ手順・データリネージ追跡・BI ツールとの連携設計を体系的に解説する。

📖 読了目安 25分
🎯 対象:データエンジニア・RevOps・BI 担当・CTO
🔧 必要プラン:Operations Hub Enterprise(必須)

📋 この章の内容

  1. 6-1DWH 統合のアーキテクチャ——何がどの方向に同期されるか
  2. 6-2Snowflake 接続のセットアップ——スキーマ設計と認証設定
  3. 6-3BigQuery 接続のセットアップ——プロジェクト設定とスキーマ
  4. 6-4データリネージ追跡・BI 連携・運用設計
Section 6-1

DWH 統合のアーキテクチャ——何がどの方向に同期されるか

HubSpot Data Hub Enterprise の DWH 統合は、HubSpot CRM のすべてのオブジェクトデータをほぼリアルタイムでデータウェアハウスに同期する機能だ。単なる「エクスポート」ではなく、変更検知型の差分同期(CDC: Change Data Capture)で動くため、HubSpot 側の更新が数分以内に DWH へ反映される。

🏗️ HubSpot ↔ データウェアハウス 統合アーキテクチャ
👤
Contacts
コンタクト全プロパティ
🏢
Companies
会社全プロパティ
🟡
HubSpot Smart CRM
全オブジェクト・カスタムオブジェクト
エンゲージメント・活動履歴
💰
Deals
商談・パイプライン
🎫
Tickets
サポートチケット
↓ HubSpot → DWH(CDC 差分同期・最短15分)
↑ DWH → HubSpot(バッチ書き戻し・スケジュール設定)
❄️
Snowflake
V2_LIVE スキーマ(15分更新)
V2 スキーマ(日次バッチ)
🔷
BigQuery
hubspot_live データセット(15分更新)
hubspot_daily データセット(日次)
CDC 差分同期(変更があった行のみ転送・最短15分)
書き戻し(DWH から HubSpot へのプロパティ更新)
全件スナップショット(日次バッチ)

同期されるデータの種類と制約

データカテゴリDWH への同期DWH からの書き戻し備考
標準オブジェクト
(コンタクト・会社・取引・チケット)
✓ 全プロパティ ✓ プロパティ値の書き戻し 削除されたレコードは is_deleted フラグで管理
カスタムオブジェクト ✓ 全プロパティ ✓ 対応 Enterprise のカスタムオブジェクトも同期対象
エンゲージメント
(メール開封・クリック・活動)
✓ イベントテーブルとして同期 ✗ 書き戻し不可 分析用途のみ。DWH からの書き込みは不可
マーケティングメール
(送信履歴・購読ステータス)
✓ 同期 △ 購読ステータスのみ書き戻し可 メール送信履歴の上書きは不可
添付ファイル・画像 ✗ 非対応 ✗ 非対応 バイナリデータは同期対象外。URL のみ同期
ワークフロー実行ログ ✓ 同期(Enterprise) ✗ 書き戻し不可 監査・コンプライアンス用途
💡 V2_LIVE スキーマと V2 スキーマの使い分け(Snowflake)

Snowflake には2種類のスキーマが自動生成される。V2_LIVE:15分ごとに更新される準リアルタイムスキーマ。ダッシュボードや当日の営業数値確認に使う。V2:日次バッチで全件スナップショット。過去履歴の保持・重い分析クエリに使う。BI ツールのメインデータソースは V2 を推奨(V2_LIVE はクエリのたびに最新を取得するためコストが高い)。

Section 6-2

Snowflake 接続のセットアップ——スキーマ設計と認証設定

Snowflake との統合は HubSpot 側で「データウェアハウス」設定から行う。接続が完了すると HubSpot が自動的に Snowflake 上にデータベース・スキーマ・テーブルを作成し、以降は自動で同期が維持される。手動でテーブルを作る必要はない。

❄️ Snowflake 統合セットアップ手順
所要時間:30〜60分(Snowflake の管理者権限が必要)
1
Snowflake 側
HubSpot 専用ロール・ウェアハウス・データベースを作成
Snowflake の管理者権限で以下を実行。HubSpot 用の最小権限ロールを作成し、専用ウェアハウスを割り当てる。本番データベースと分離することでコスト管理と権限制御が容易になる。
-- ロール作成 CREATE ROLE HUBSPOT_ROLE; -- ウェアハウス作成(X-Small で十分。後で必要に応じてスケールアップ) CREATE WAREHOUSE HUBSPOT_WH WITH WAREHOUSE_SIZE = 'X-SMALL' AUTO_SUSPEND = 60 AUTO_RESUME = TRUE; -- データベース作成 CREATE DATABASE HUBSPOT_CRM; -- 権限付与 GRANT USAGE ON WAREHOUSE HUBSPOT_WH TO ROLE HUBSPOT_ROLE; GRANT ALL ON DATABASE HUBSPOT_CRM TO ROLE HUBSPOT_ROLE;
2
Snowflake 側
HubSpot 接続用のサービスアカウントユーザーを作成
人間のアカウントではなく、HubSpot 専用のサービスアカウントを作成する。パスワードは強力なランダム文字列を生成して使用する。
CREATE USER HUBSPOT_USER PASSWORD = '<strong_random_password>' DEFAULT_ROLE = HUBSPOT_ROLE DEFAULT_WAREHOUSE = HUBSPOT_WH MUST_CHANGE_PASSWORD = FALSE; GRANT ROLE HUBSPOT_ROLE TO USER HUBSPOT_USER;
3
HubSpot 側
HubSpot で接続情報を入力して接続テスト
HubSpot の「設定 → データ管理 → データウェアハウス → Snowflake を接続」から以下の情報を入力する。
アカウント識別子:xxxxx.ap-northeast-1(例:東京リージョン) ウェアハウス名 :HUBSPOT_WH データベース名 :HUBSPOT_CRM スキーマ名 :PUBLIC(自動生成) ユーザー名 :HUBSPOT_USER パスワード :<作成したパスワード>
4
HubSpot 側
同期するオブジェクトと方向を選択
接続成功後、同期対象オブジェクト(コンタクト・会社・取引・チケット・カスタムオブジェクト)と同期方向(HubSpot→Snowflake のみ / 双方向)を設定する。初回は HubSpot→Snowflake の一方向から始めて動作確認してから双方向を有効化することを推奨。
5
Snowflake 側
初回同期の完了を確認し、テーブル構造を検証
初回の全件同期は HubSpot のデータ量によって数分〜数時間かかる。完了後 Snowflake 側で自動生成されたテーブル群を確認する。
-- 作成されたテーブル一覧を確認 SHOW TABLES IN SCHEMA HUBSPOT_CRM.V2_LIVE; -- コンタクト数を確認(HubSpot 側と一致しているか) SELECT COUNT(*) FROM HUBSPOT_CRM.V2_LIVE.CONTACTS; -- 最終同期時刻を確認 SELECT MAX(_FIVETRAN_SYNCED) FROM HUBSPOT_CRM.V2_LIVE.CONTACTS;

自動生成される Snowflake スキーマの構造

HubSpot が Snowflake に自動生成するテーブルは HubSpot の CRM オブジェクトと1対1対応する。各テーブルにはすべてのプロパティが列として展開され、さらにシステム管理用の列(_hs_synced_at・hs_object_id・is_deleted)が追加される。

HUBSPOT_CRM.V2_LIVE — 主要テーブルのスキーマ抜粋 Snowflake
CONTACTS コンタクト
HS_OBJECT_IDNUMBERPK・HubSpot レコード ID
EMAILVARCHARメールアドレス
FIRSTNAMEVARCHAR
LASTNAMEVARCHAR
LIFECYCLESTAGEVARCHARライフサイクルステージ
HUBSPOT_OWNER_IDNUMBERFK → OWNERS
HS_LEAD_STATUSVARCHARリードステータス
INDUSTRYVARCHAR業種
_HS_SYNCED_ATTIMESTAMP_NTZ最終同期日時
IS_DELETEDBOOLEAN削除フラグ
DEALS 取引
HS_OBJECT_IDNUMBERPK
DEALNAMEVARCHAR商談名
AMOUNTFLOAT金額
DEALSTAGEVARCHAR商談ステージ
CLOSEDATEDATEクローズ予定日
PIPELINEVARCHARパイプライン
HUBSPOT_OWNER_IDNUMBERFK → OWNERS
ASSOCIATIONS__CONTACT_IDSARRAY関連コンタクト ID 配列
_HS_SYNCED_ATTIMESTAMP_NTZ最終同期日時
IS_DELETEDBOOLEAN削除フラグ
Section 6-3

BigQuery 接続のセットアップ——プロジェクト設定とスキーマ

BigQuery との統合も Snowflake と同様に HubSpot 側の設定だけで完結する。Google Cloud のサービスアカウントを作成して JSON キーを HubSpot に渡すだけで、あとは HubSpot が自動的に BigQuery データセット・テーブルを作成・管理する。

🔷 BigQuery 統合セットアップ手順
所要時間:20〜40分(Google Cloud の IAM 管理者権限が必要)
1
Google Cloud 側
HubSpot 専用のサービスアカウントを作成
Google Cloud Console → IAM と管理 → サービスアカウントから作成。名前例:[email protected]。以下の最小限ロールのみ付与する。
必要な IAM ロール: - BigQuery Data Editor(hubspot- プレフィックスのデータセットのみ) - BigQuery Job User(クエリ実行権限) - BigQuery Data Viewer(読み取りアクセス) ※ BigQuery Admin や Project Owner は絶対に付与しない
2
Google Cloud 側
サービスアカウントの JSON キーを生成・ダウンロード
サービスアカウントの「キー」タブ → 「鍵を追加」→「JSON」を選択してダウンロード。このファイルは機密情報のため安全な場所に保管し、メール・Slack 等で共有しない。
3
HubSpot 側
HubSpot に JSON キーをアップロードして接続
「設定 → データ管理 → データウェアハウス → BigQuery を接続」から GCP プロジェクト ID と JSON キーファイルをアップロードする。接続テストを実行して「接続成功」を確認する。
4
BigQuery 側(自動生成を確認)
HubSpot が自動生成するデータセット構造を確認
初回同期後、BigQuery に以下のデータセットが自動生成される。
hubspot_live (準リアルタイム:15分更新) ├── contacts (コンタクト) ├── companies (会社) ├── deals (取引) ├── tickets (チケット) └── engagements (エンゲージメントイベント) hubspot_daily (日次スナップショット:過去90日分を保持) ├── contacts_YYYYMMDD ├── deals_YYYYMMDD └── ...(日付パーティション)

同期スキーマの種類と使い分け

Snowflake: V2_LIVE / BigQuery: hubspot_live
準リアルタイムスキーマ
HubSpot での変更が15分以内に反映される。最新の CRM 状態を参照したいリアルタイムダッシュボード・当日の営業進捗確認・アラートシステムに使う。クエリごとに最新データを取得するためコストが高くなりやすい。
更新頻度:最短15分(変更があった行のみ CDC で転送)
Snowflake: V2 / BigQuery: hubspot_daily
日次スナップショットスキーマ
日次で全件のスナップショットを取得する。過去の特定日時点でのデータを参照したい月次レポート・年次比較・機械学習の学習データに使う。V2_LIVE より安価でクエリが安定する。
更新頻度:日次1回(全件スナップショット。過去90日分保持)
双方向同期
DWH → HubSpot 書き戻し
BigQuery/Snowflake で計算したスコア・分類・予測値を HubSpot のプロパティに書き戻す。ML モデルの推論結果・高度な集計値を HubSpot の自動化のトリガーとして使えるようになる。
書き戻し方法:HubSpot API 経由(スケジュールバッチ or イベントトリガー)
エンゲージメントデータ
メール・活動履歴のイベントログ
メール開封・クリック・ページビュー・フォーム送信・電話・ミーティングなどのエンゲージメントイベントが時系列テーブルとして同期される。時系列分析・行動予測モデルの学習データとして活用できる。
更新頻度:最短15分(書き戻し不可・分析専用)
⚠️ BigQuery のコスト管理——スキャン量に注意

BigQuery はスキャンしたデータ量に応じて課金される($5/TB)。hubspot_live テーブルへのフルスキャンクエリを BI ツールが頻繁に実行すると月数万円のクラウドコストが発生することがある。対策:① SELECT * は避け必要な列だけ SELECT する / ② パーティションキーで絞り込む(WHERE _hs_synced_at > ...)/ ③ BI ツールには hubspot_daily を向け、hubspot_live は緊急確認用のみに限定する。

Section 6-4

データリネージ追跡・BI 連携・運用設計

データリネージ(Data Lineage)の追跡

Enterprise プランではデータリネージ追跡機能が利用できる。「この HubSpot プロパティの値はどこから来たのか・どのワークフローが書き込んだか・DWH 経由で更新されたか」の来歴をすべて記録・可視化できる。コンプライアンス対応・監査・データ品質の根本原因分析に不可欠な機能だ。

🔍 データリネージの例:health_score プロパティの来歴
「このスコアはどこから来たのか」を一画面で追跡できる
データソース
BigQuery
hubspot_live.contacts
+ product_usage テーブル
変換
dbt モデル
customer_health_score.sql
v1.4.2(2026/03/01 更新)
書き戻し
HubSpot API
PATCH /contacts/{id}
毎週月曜 2:00 JST
HubSpot プロパティ
health_score
最終更新:2026/03/03
値:82
使用箇所
WF:チャーンアラート
health_score < 40 で
CSM に Slack 通知
📌 リネージ追跡が重要な理由:「health_score が突然 0 になった」という問題が発生したとき、リネージ記録があれば「dbt モデルの v1.4.2 のデプロイと同時に発生した → SQL の除算でゼロ除算が起きた」という原因を数分で特定できる。リネージ記録がないと、調査に丸1日かかる場合がある。

BI ツールとの連携設計

BI ツール接続方法推奨データソース注意事項
Tableau Snowflake / BigQuery コネクタ(標準搭載) V2(日次)をメインに・V2_LIVE は最新値確認用 Live 接続は避け Extract(抽出)モードを推奨。クエリコストを抑えられる
Looker / Looker Studio BigQuery コネクタ(ネイティブ統合) hubspot_daily をメイン利用 Looker Studio は無料で使えるが同時接続数が多いとクエリコストが上昇。キャッシュを有効化する
Power BI Snowflake / BigQuery コネクタ Import モード(日次更新)推奨 DirectQuery は BigQuery コストが高くなる。Dataset を Import して定時更新するほうが安い
Metabase Snowflake / BigQuery コネクタ V2 / hubspot_daily HubSpot の標準レポートと BI の両方を使うチームに人気。無料の OSS 版も利用可

DWH 統合の運用チェックリスト

✅ 本番運用前の確認事項
🔐 セキュリティ・権限
HubSpot 専用の最小権限サービスアカウントを作成した(プロジェクトオーナー権限を付与していない)
JSON キー・パスワード等の認証情報をシークレットマネージャーに保存した(Slack・メール共有は絶対にしない)
個人情報(メール・電話番号)を含むテーブルへのアクセスを必要最小限のロールに制限した
GDPR / 個人情報保護法の観点で DWH 側の個人データの保持期間・削除ポリシーを決定した
🔄 同期・データ品質
初回同期完了後に HubSpot のレコード数と DWH のレコード数が一致することを確認した
_HS_SYNCED_AT 列で「最終同期からの経過時間」を監視するアラートを設定した(30分超で通知)
is_deleted = TRUE のレコードを除外する WHERE 条件を BI クエリに必ず入れる慣習を共有した
書き戻し処理(DWH → HubSpot)のエラーログを監視する仕組みを設けた
💰 コスト管理
BigQuery の月次スキャン量に予算アラートを設定した(推奨:月$100を超えたら通知)
Snowflake のウェアハウスに AUTO_SUSPEND(60秒)を設定してアイドル時のコストをゼロにした
BI ツールは hubspot_live(V2_LIVE)への頻繁なフルスキャンを避けるルールをチームに共有した

📌 第6章 まとめ

DWH 統合は「CDC 差分同期」で15分以内に HubSpot → DWH を反映

変更があった行だけを転送する CDC 方式のため、全件エクスポートより遥かに効率的。V2_LIVE(15分更新)と V2/hubspot_daily(日次)の2スキーマが自動生成される。BI ツールのメインデータソースは日次スキーマを推奨——リアルタイムは BI コストが高くなる。

セットアップは「最小権限の専用サービスアカウント」が大原則

Snowflake は専用ロール+ウェアハウス+データベースを作成。BigQuery はサービスアカウントに BigQuery Data Editor + Job User のみ付与。プロジェクトオーナーや管理者権限を HubSpot サービスアカウントに付与するのは重大なセキュリティリスク。

双方向同期で「DWH の ML スコア」を HubSpot の自動化に使える

HubSpot → DWH の一方向だけでなく、BigQuery/Snowflake で計算した機械学習スコア・セグメント分類・予測値を HubSpot API 経由でプロパティに書き戻せる。これにより「ML が算出したチャーンリスクスコアが閾値を超えたら CSM にアラート」のような高度な自動化が実現する。

データリネージ追跡で「スコアの出所」を説明できる組織になる

「このスコアはどこから来たのか」「いつのモデルバージョンが計算したのか」を追跡できる仕組みがないと、問題発生時に原因特定に丸1日かかる。データリネージ記録 + dbt のバージョン管理 + 書き戻しログの3点セットで説明責任のあるデータ組織を作る。

Next Chapter
第7章へ →