GA4の日次データのうち、一定期間のデータをBigQueryの別プロジェクトに毎日コピーする方法
こんにちは!noteをお読みいただきありがとうございます。
BX事業本部(旧SMKT事業部)note運営の山口です。
BigQueryにGA4の日次データを毎日自動でコピーする手法は、データ管理を効率化してデータ分析の精度を高めるために重要です。
本記事では、GA4の一定期間のデータをBigQueryの別プロジェクトに自動的に転送する方法についてご紹介します。
BigQuery Data Transfer Serviceを使用して、以下のようなデータ転送を行う際の手順を具体的に解説しています。
✅️データセット単位でのデータ転送
✅️データテーブル単位でのデータ転送
✅️直近7日間のデータテーブルを別プロジェクトにコピー(データ転送)
以下のような方に、特におすすめしたい記事となっています。
GA4のデータ格納先のプロジェクトを移行したい方
特定のプロジェクト間のデータ転送を自動化したい方
BigQuery Data Transfer Serviceの概要を学びたい方
データセットまたはデータテーブル単位でのデータ転送を行いたい方
GA4のデータの正確性を保つために直近7日間のデータを再評価したい方
BigQuery Data Transfer Service概要
BigQuery Data Transfer Serviceとは
BigQuery Data Transfer Serviceとは、設定したスケジュールに基づいてBigQueryへのデータの転送を自動化する、GCPのマネージド サービスです。
コードの作成等は不要で、BigQuery のナビゲーションメニューで設定ができます。
転送可能なデータソースは、こちらから確認できます。
BigQuery Data Transfer Serviceのアクセス方法
BigQuery Data Transfer Serviceへのアクセス方法は、以下の3通りがあります。
Google Cloud コンソール
bq コマンドライン ツール
BigQuery Data Transfer Service API
今回は、BigQuery Data Transfer Service APIを使用します。
BigQuery のナビゲーションメニュー>データ転送>APIの有効化
から、APIを有効にすると転送の作成が可能になります。
BigQuery Data Transfer Serviceの料金体系
BigQuery Data Transfer Serviceの利用自体は無料ですが、転送するデータ量によって以下のコストが発生します。
ストレージコスト
ストレージコストは以下の通りです。
10GBまでは無料
10GBを超える分について、1GBあたり0.02ドル/月(米国リージョン)
※日本リージョンの場合、1GBあたり0.026ドル/月
例えばAプロジェクトからBプロジェクトに30GBのデータ転送を行った場合、Bプロジェクト側の所有者は、以下のストレージコストが発生し始めます。
(30GB-10GB)×0.02=0.4ドル/月(約60円/月)
ただし、これはBプロジェクト内に他のデータが存在しない場合であり、
すでに10GB以上のデータがある場合は30GB分のストレージコストが丸々発生します。
参考リンク
クエリ実行コスト
BigQueryで実行したSQLクエリが読み取ったデータサイズに応じて課金されます。
基本は0円ですが、クエリを書いてデータテーブル単位で転送する場合にはクエリ実行コストが発生します。
クエリ実行コストは以下の通りです。
毎月1TBまで無料
1TBを超える読み取りデータサイズに対して、1TBあたり5ドル(米国リージョン)
日本リージョンの場合、1TBあたり6ドル/月
リージョン間データ転送コスト
以前まではリージョンをまたいでデータ転送を行うことはできませんでしたが、Data Transfer Serviceにより実現可能になりました。
なお、リージョンをまたいでデータ転送を行う場合は、リージョン間データ転送コストが発生します。
(同一リージョン内のデータ転送は無料)
例)米国↔東京(asia-northeast-1)間でデータ転送する場合
最初の1TBまで0.12ドル/GB
┗1TB=1,024GBの場合は、約122.88ドル(約18,000円)
参考リンク
データセット単位で別プロジェクトにデータ転送する方法
データセットをコピーする方法は、以下の2通りがあります。
BigQuery のコピー関数を使用する
BigQuery Data Transfer Service を使用する
ただし、1.は以下の場合には使用できません。
スケジュール設定(定期的なデータ転送)を行う場合
VPCが異なるプロジェクト間でのデータ転送を行う場合
そのため、今回は2.の方法での手順を解説します。
【Step1】[データ転送] ページに移動
<補足事項>
「転送元」ではなく、「転送先」のプロジェクト側で設定を行います。
【Step2】[転送を作成] をクリック
【Step3】ソースタイプの[ソース]から[Dataset Copy] を選択
【Step4】転送構成名の[表示名]に、転送実行の名前を入力(日本語も可)
【Step5】スケジュール オプションで、データ転送スケジュールを設定
<補足事項>
入力する時間は「UTC協定世界時」にする必要があります。(例:日本時間の15:00→UTCの6:00)
参考リンク
「すぐに開始」を選択すると、転送の作成を保存した後すぐに転送が開始されます。
【Step6】転送先の設定の[データセット]で、データ転送”先”のデータセットを選択
<補足事項>
既存のデータセットへの追加ではなく、新しいデータセットを作成することも可能です。
【Step7】[データソースの詳細] に、データ転送”元”の情報を入力
<補足事項>
[Overwrite destination table]に✔を入れると、同じデータテーブル名があった際に上書きされます。(データとスキーマの両方)
【Step8】[保存] をクリック
<注意点>
個人のGoogleアカウントを用いて転送が行われるため、転送実行者のアカウントにデータセットをコピーする権限が付与されているかを確認する必要があります。
データテーブル単位で別プロジェクトにデータ転送する方法
BigQueryにおけるデータ転送は、データセット単位では可能ですが、データテーブル単位で行うことはできません。
そのため、データテーブル単位で別プロジェクトにデータ転送するには、データ転送用の新しいデータセットを作る必要があります。
以下よりデータ転送の手順をご説明します。
【Step1】クエリを実行
以下のクエリを実行します。
SELECT * FROM (データテーブル名)
【Step2】結果の保存>BigQueryテーブルをクリック
【Step3】データ転送用の新しいデータセット名とデータテーブル名を作成し、エクスポート
【Step4】「データセット単位で別プロジェクトにデータ転送する方法」のStep1から順に実行
Step3まででデータ転送用のデータセットとデータテーブルを作成できたので、前述した「データセット単位で別プロジェクトにデータ転送する方法」の手順に沿ってデータ転送を行います。
【実践】GA4の直近7日間のデータテーブルをBigQueryの別プロジェクトに毎日コピーする方法
GA4の日次データは、BigQuery上では「events_yyyymmdd」の形式で保存されます。
下記の例では、データセット(analytics_****)の中に337日分のデータテーブルが格納されている状態です。
今回は、GA4の直近7日間のデータテーブルをBigQueryの別プロジェクトにデータ転送する方法をご紹介します。
【補足:直近7日間のデータテーブルをデータ転送する理由】
GA4のデータは、一度生成されても後日に再度更新されることがあります。
参考リンク
そのため、直近のデータを洗い替えることで、転送先のプロジェクトに格納されるデータの正確性を高めるために、このような手法を行っています。
データ転送手順は以下のとおりです。
なお、プロジェクト名は以下を前提にご説明します。
転送元のプロジェクト:Aプロジェクト
転送先のプロジェクト:Bプロジェクト
【Step1】直近7日分データだけのデータセットを作成
直近7日分のデータテーブルだけのデータセットを作成するために、以下のクエリを実行します。
DECLARE start_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY);
DECLARE end_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);
CREATE TEMP TABLE date_range AS
SELECT day
FROM UNNEST(GENERATE_DATE_ARRAY(start_date, end_date)) AS day;
FOR day_record IN (SELECT day FROM date_range)
DO
EXECUTE IMMEDIATE FORMAT("""
CREATE OR REPLACE TABLE `(Aプロジェクトのプロジェクト名).(Aプロジェクトの新しいデータセット名).events_%s`
AS
SELECT * FROM `(Aプロジェクトのプロジェクト名). (Aプロジェクトの既存のデータセット名).events_%s`
""", FORMAT_DATE("%Y%m%d", day_record.day), FORMAT_DATE("%Y%m%d", day_record.day));
END FOR;
これで、直近7日分のデータが新しいデータセット(dateset_oneweek)にコピーされました。
【Step2】クエリのスケジュール設定
Step1で作成したクエリを毎日スケジュール実行するために、「スケジュール」から設定を行います。
【Step3】クエリに任意の名前を設定
「スケジュールされたクエリの名前」に、任意の名前を設定します。(create_one_weekなど)
【Step4】データテーブル作成のスケジュール設定
「スケジュール オプション」から、データ転送スケジュールを設定します。
<補足事項>
入力する時間は「UTC協定世界時」にする必要があります。(例:日本時間の15:00→UTCの6:00)
参考リンク
「すぐに開始」を選択すると、転送の作成を保存した後すぐに転送が開始されます。
【Step5】ロケーションタイプ(リージョン)の選択
「クエリ結果の書き込み先」内にある「ロケーションタイプ」から、リージョンを選択します。
基本的には「自動ロケーションを選択」に✔が入っている状態で大丈夫ですが、データセットによって異なるリージョンを設定している場合は、✔を外して今回使用するデータセットのリージョンに変更する必要があります。
今回は、Aプロジェクト全体のリージョンはUSですが、使用するデータセットは東京(asia-northeast1)だったため、リージョンを個別に設定しました。
【Step6】転送のスケジュール設定
作成したcreate_data_oneweekを、Bプロジェクトのデータセット内に転送します。
手順は、データセット単位で別プロジェクトにデータ転送する方法と同様です。
【Step7】直近7日分のデータセット内のデータテーブルを削除
直近7日分のデータセット(dateset_oneweek)には、翌日になると8日分のデータが格納されてしまいます。
毎日常に「直近7日分」のデータテーブルを保つためには、毎日dateset_oneweek内のデータテーブルを削除する必要があります。
dateset_oneweek内のデータテーブルを削除するために、以下のクエリを実行します。
ただし、データセット(dateset_oneweek)自体は削除せず、あくまでデータセット内のデータテーブルのみを削除する点に注意が必要です。
FOR table_record IN (SELECT table_id FROM `(Aプロジェクトのプロジェクト名).dataset_oneweek.__TABLES__`)
DO
EXECUTE IMMEDIATE FORMAT("DROP TABLE `(Aプロジェクトのプロジェクト名).dataset_oneweek.%s`", table_record.table_id);
END FOR;
これでデータセット内(dateset_oneweek)のデータテーブルが削除されました。
【Step8】データテーブル削除のスケジュール設定
Step7で作成したクエリを毎日スケジュール実行するために、「スケジュール」から設定を行います。
手順はデータテーブルを作成する時と同様ですので、Step2~5を参考にしてください。
<補足事項>
「スケジュールされたクエリの名前」は、delete_dataset_oneweekなどとしておくと良いでしょう。
以上の手順を実行することで、GA4の直近7日間のデータテーブルをBigQueryの別プロジェクトに毎日コピーすることができるようになります!
皆さんも実務で使う機会があった際は、ぜひこの記事を参考にデータ転送を行ってみてください。
Tableau, Power BI, Looker Studioの無料テンプレート配布中
弊社公式サイトでは、各種BIツールの無料テンプレートを配布中です!
GA4レポート、ガントチャート、インサイドセールスの活動管理ダッシュボードなど、すぐに活用可能なサンプルを各種そろえております。
ダウンロードは下記URLよりお申し込みください。
●●●
弊社PBDなら、データドリブン経営を一気通貫でご支援可能です。
PBDでは、BI導入支援をはじめとした、データ活用支援サービスを提供させていただいております。
基盤構築から設計~開発~運用まで一気通貫で貴社のデータ活用をご支援。
PBDが得意とする伴走型支援で、導入後の活かし方までサポートいたします。
また、分析活動をお客様社内で実現いただけるよう、トレーニングのご相談も承っております。
「データ基盤構築」「BI人材育成」「データ可視化・分析」なら、パーソルビジネスプロセスデザインにご相談ください。
●●●
パーソルビジネスプロセスデザイン
ビジネストランスフォーメーション事業本部(セールスマーケティング)
では、幅広いポジションで一緒に働く仲間を募集しています!
●●●