LoginSignup
2
0

More than 1 year has passed since last update.

BigQuery エクスポートをしている GA4 のプロパティを、別のプロパティに切り替えた際の作業ログ

Posted at

作業実施の背景

ある Firebase プロジェクトに、GA4 プロパティ(プロパティA)が連携済みだとします。
とある事情で一度連携を解除し、別の GA4 プロパティ(プロパティB)を連携しました。

元々プロパティAは、BigQuery へデータをエクスポートしていたため、プロパティBでも BigQuery へのエクスポートを行ったのですが、プロパティIDが変わったため、別のデータセットが出来上がりました。

今後のことも考え、データソースは1つに集約させた方が良いと判断し、BigQuery に存在しているプロパティAのシャーディングテーブルを、プロパティBのシャーディングテーブルに移行することにしました。

この記事は、その際に行った作業内容を記述したものになります。
※あくまで一例であり、この手順が一番最適であるとは限りませんのでご注意ください。

前提

移行したいプロパティAのシャーディングテーブルは、analytics_111111データセットにあり、2021年1月1日〜2023年2月7日までのシャーディングテーブルが存在しています。
新しく作成したプロパティBのシャーディングは、analytics_222222データセットに存在にあり、2023年2月7日のシャーディングテーブルまで存在しています。

作業日は、2023年2月8日に行っています。

移行元であるプロパティAのシャーディングテーブルの日付部分を抽出

下記 SQL を実行して、移行したいシャーディングテーブルの期間を抽出します。

SELECT
REPLACE(STRING_AGG(CONCAT('"', partition_name,'"') ORDER BY partition_name ), ","," ")
FROM 
(
  SELECT 
  DISTINCT event_date AS partition_name 
  FROM 
  `project_id.analytics_111111.events_*`
  WHERE 
    _TABLE_SUFFIX BETWEEN '20210101' AND '20230206'
  ORDER BY PARSE_DATE("%Y%m%d", event_date)
)

プロパティBのシャーディングテーブルにコピー

CLOUD SHELL を開き、コピー用のシェルスクリプトbq_cp.shを作成します。
tables変数には、先程抽出したシャーディングテーブルの期間の文字列を渡してください。

bq_cp.sh
tables=("20210101" "20210102" ... "20230205" "20230206")
for val in ${tables[*]}; do
  bq cp -a analytics_111111.events_$val analytics_222222.events_$val
done

$ /bin/sh bq_cp.shでシェルスクリプトを実行し、コピーが完了するのを待ちます。

最新のシャーディングテーブルの差分を埋める

切り替えた日のみ、analytics_111111.events_20230207analytics222222.events_20230207にレコードが分散しているので、analytics222222.events_20230207に寄せます。

-- 新しいプロパティに対して、切り替えた日の一時テーブルを作成
CREATE TABLE `project_id.analytics_222222.tmp_events_20230207` 
AS 
SELECT * FROM `project_id.analytics_222222.events_20230207`;


-- 一時テーブルに、古いプロパティの切り替えた日のレコードを挿入
INSERT INTO `project_id.analytics_222222.tmp_events_20230207` (event_date, event_timestamp, event_name, event_params, event_previous_timestamp, event_value_in_usd, event_bundle_sequence_id, event_server_timestamp_offset, user_id, user_pseudo_id, privacy_info, user_properties, user_first_touch_timestamp, user_ltv, device, geo, app_info, traffic_source, stream_id, platform, event_dimensions, ecommerce, items)
SELECT 
  *
FROM 
  `project_id.analytics_111111.events_20230207`;


-- 新しいプロパティの切り替えた日のシャーディングテーブルを削除
DROP TABLE `project_id.analytics_222222.events_20230207`;


-- 一時テーブルを切り替えた日のシャーディングテーブルとして作成
CREATE TABLE `project_id.analytics_222222.events_20230207`
AS 
SELECT * FROM `project_id.analytics_222222.tmp_events_20230207`;


-- 一時テーブルを削除
DROP TABLE `project_id.analytics_222222.tmp_events_20230207`;

一通り確認し、問題なさそうであれば、プロパティAのanalytics_111111データセットを削除すれば完了です。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0