GA4インポート/アプリ計測で過去データをインポートする方法

GA4データ連携やアプリ計測で連携しているデータセットの、インポート開始日より過去のデータテーブルをインポートしたい場合があります。これを実現するために、指定された日付範囲のテーブルをソースデータセットからターゲットデータセットに複製(クローン)する必要があります。

本ガイドラインでは、そのために必要なスクリプトの準備および実行方法の詳細を説明します。

テーブルをクローンするスクリプト

-- =============================================================
-- PREPARATION: CLIENT SPECIFIC CONFIGURATION
-- =============================================================

set @@location = ""; -- << Change to the dataset region

DECLARE source_dataset   STRING DEFAULT      '' ;    
DECLARE target_dataset   STRING DEFAULT      '';
DECLARE start_date       DATE   DEFAULT DATE '';        
DECLARE end_date         DATE   DEFAULT DATE '';        

-- =======================================================
-- INTERNAL LOGIC - PLEASE DONOT MODIFY BELOW THIS LINE.
-- ======================================================= 
DECLARE processing_date         DATE;
DECLARE table_name              STRING;
DECLARE source_table_exists     BOOL;
DECLARE target_table_exists     BOOL;
DECLARE clone_sql_query         STRING;
DECLARE create_schema_stmt      STRING;
DECLARE clone_table_stmt        STRING;
DECLARE check_source_table_stmt STRING;
DECLARE check_target_table_stmt STRING;

ASSERT source_dataset IS NOT NULL AND TRIM(source_dataset) <> ''
   AND target_dataset IS NOT NULL AND TRIM(target_dataset) <> ''
   AND start_date IS NOT NULL
   AND end_date IS NOT NULL
AS "Missing values!!! Please set the value for all required fields: source_dataset, start_date, end_date, target_dataset";

ASSERT start_date <= end_date
AS 'ERROR: start_date must be <= end_date';

-- Query Statements
SET create_schema_stmt = FORMAT(
  'CREATE SCHEMA IF NOT EXISTS `%s`', target_dataset
);

SET check_source_table_stmt = FORMAT("""
  SELECT EXISTS (
    SELECT 1
    FROM `%s.%s`.INFORMATION_SCHEMA.TABLES
    WHERE table_name = @tbl
  )""", @@project_id, source_dataset
);

SET check_target_table_stmt = FORMAT("""
  SELECT EXISTS (
    SELECT 1
    FROM `%s.%s`.INFORMATION_SCHEMA.TABLES
    WHERE table_name = @tbl
  )""", @@project_id, target_dataset
);

SET clone_table_stmt = """
  CREATE TABLE `%s.%s.%s`
  CLONE `%s.%s.%s`
""";


-- Create new dataset for cloned tables.
EXECUTE IMMEDIATE create_schema_stmt;

SET processing_date = start_date;

WHILE processing_date <= end_date DO
  SET table_name = FORMAT('events_%s', FORMAT_DATE('%Y%m%d', processing_date));

  -- Check if table exists in the source dataset.
  EXECUTE IMMEDIATE check_source_table_stmt
    INTO source_table_exists
    USING table_name AS tbl;

  -- Check if table already cloned in the target dataset.
  IF source_table_exists THEN
    EXECUTE IMMEDIATE check_target_table_stmt
    INTO target_table_exists
    USING table_name AS tbl;
  ELSE
    SET target_table_exists = FALSE;
  END IF;

  IF source_table_exists AND NOT target_table_exists THEN
    SET clone_sql_query  = FORMAT(
      clone_table_stmt, 
      @@project_id, target_dataset, table_name, 
      @@project_id, source_dataset, table_name
    );

    BEGIN
      EXECUTE IMMEDIATE clone_sql_query;
    EXCEPTION WHEN ERROR THEN
      SELECT FORMAT("Clone failed for: %s.%s", source_dataset, table_name) AS failed_status;
    END;

  END IF;

  SET processing_date = DATE_ADD(processing_date, INTERVAL 1 DAY);
END WHILE;

上記スクリプトは、オペレーター(本運用担当者)の入力設定に基づいて、以下の操作を実行します。

  1. スクリプトを実行するプロジェクト上に新しいデータセットを作成します。

    指定された日付範囲内の各日付について、

    1. ソースデータセットにテーブルが存在するかどうかを確認します。
    2. ターゲットデータセットにテーブルが既にクローンされていないかどうかを確認します。
    3. 上記の2つの条件が満たされた場合、ソースデータセットからターゲットデータセットにテーブルクローンします。

前提条件

  • 同一ロケーションルール: ソースデータセット、ターゲットデータセット、およびジョブ処理は同一のロケーションでなければなりません。最初のステートメントの SET @@location  にジョブのロケーションを指定します。
  • 同一プロジェクト: ターゲットデータセットとすべてのクローンテーブルは、source_dataset と同じプロジェクト配下に作成されます。
  • 冪等性: スクリプトは、ターゲットデータセットに既に存在するテーブルをスキップします。
  • コスト: クローンDDL自体はデータをスキャンしません。INFORMATION_SCHEMA  によるメタデータチェックでは、クエリごとに約10MBの最小課金対象スキャンが発生します。

事前準備

役割と権限

ℹ️Note

このスクリプトは、ターゲットデータセットが存在しない場合は作成CREATE SCHEMA IF NOT EXISTS )します。そのため、ユーザはデータセットを作成するためのプロジェクトレベルの権限が必要です。

BigQuery を実行するユーザには、次のロールが付与されている必要があります。

ロール 付与レベル 権限
BigQuery ジョブユーザー プロジェクト BigQuery クエリジョブを実行する
BigQuery ユーザー プロジェクト ターゲットデータセットを新規作成
BigQuery データ閲覧者 データセット(ソース) 既存のテーブルの読み取り

権限付与方法

プロジェクトレベルのロール

Google Cloud コンソールを使ってプロジェクトレベルのロールを付与します。

  1. IAM と管理 → IAM を選択し、アクセスを許可を選択
  2. プリンシパル: オペレーターのユーザアカウント
  3. ロール:
    1. BigQuery ジョブユーザー を追加
    2. BigQuery ユーザー を追加
  4. 保存 をクリック

データセットレベルのロール

Google Cloud コンソールを使ってデータセットレベルのロールを付与します。

  1. BigQuery 配下でソースデータセットを選択し、共有 → 権限を管理 を選択
  2. プリンシパルを追加 をクリック
  3. プリンシパル: オペレーターのユーザアカウント
  4. ロールBigQuery データ閲覧者 を追加
  5. 保存 をクリック
ℹ️Note
  • ターゲットデータセットが自動作成された時点で、オペレーターに BigQuery データオーナー 権限が付与されます。
  • ソース データセットについては、権限変更はありません。

スクリプトの設定


スクリプト先頭の PREPARATION: CLIENT SPECIFIC CONFIGURATION  セクションを編集してください。

  • @@location
    • ジョブの処理ロケーション(ソース・ターゲットの両データセットで同一
    • 東京リージョンの場合:asia-northeast-1
    • 米国リージョンの場合:us
  • source_dataset
    • 日次テーブルがすでに格納されていて、クローン元となるデータセットです。
  • target_dataset
    • ソースデータセットからクローンしたテーブルを格納する新しいデータセットです。
    • 名前付けのヒント<source_dataset>_clone
  • start_date  / end_date
    • 過去データを含むテーブルの取得対象となる日付範囲です。
    • yyyy-mm-dd  形式で指定します(例:2025-11-06 )。
    • start_date  - 取り込みを開始する最初の日付
    • end_date  - 取り込み対象の最後の日付

指定例 ※そのままコピーしないでください。お客様側で適切に設定してください

set @@location = "asia-northeast-1";

DECLARE source_dataset STRING DEFAULT 'analytics_xxxx';
DECLARE target_dataset STRING DEFAULT 'analytics_xxxx_clone';
DECLARE start_date     DATE   DEFAULT '202x-0x-0x';
DECLARE end_date       DATE   DEFAULT '202x-0x-1x';

スクリプトの実行

BigQuery コンソールを使ってください。

  1. BigQuery の SQL ワークスペースを開きます。
  2. エディタにスクリプト(提供されたもの)を貼り付けます。
  3. 上記で説明した通り、設定セクションを編集します。
  4. 「実行」をクリックします。操作完了は結果パネルで確認してください。

USERGRAMへインポートする

テーブルのクローンが作成されたら、USERGRAMの設定UIを使ってプロジェクト名と新しいデータセット名 (クローンされたテーブルが含まれる target_dataset) を USERGRAM に登録します。


テーブル複製時のトラブルシューティング

無効なロケーション


ロケーションが設定されていない、または誤って設定されている場合、スクリプト実行前に UI コンソールで上記のエラーが表示されます。

データセット情報で確認できるデータセットのロケーションを設定してください。

設定入力が提供されていない

スクリプトを実行する前に、スクリプトの設定 に記載されている通り、すべての入力項目を必ず提供してください。

アクセス拒否

役割と権限 に記載されているロールを確認してください。

現在の実行リージョンとロケーションが一致しない

これは、クエリ処理ロケーションがクエリ冒頭の @@location  で指定したロケーションと異なる場合に発生します。

解決するには、以下の手順で処理ロケーションを自動に変更してください:

その他 → クエリの設定 を選択、ロケーション配下の 自動ロケーション選択 をチェック

解決しない場合 問い合わせ 問い合わせ