Google AnalyticsのデータをCloud Storageにエクスポートする

# Google AnalyticsのデータをCloud Storageにエクスポートする

## はじめに
Google Analytics のGA4を使うことで、Google Analytics のデータを BigQuery にエクスポートできます。
BigQuery にエクスポートして Google Analytics のデータを分析することができますし、
同じ Google Cloud のサービスである Cloud Storage にもエクスポートすることで、データの長期保存や他アプリケーションへ展開することができます。
今回は Google Analytics のデータを BigQuery を経由して Cloud Storage へエクスポートしてみました。

## エクスポート方法
今回は、
① Google Analytics のデータを BigQuery にエクスポートする
② BigQuery のデータを Cloud Storage にエクスポートする
の2つの手順を実施します。

### Google Analytics のデータを BigQuery にエクスポートする
BigQuery へのエクスポートは、Google Analytics の設定のみです。

データをエクスポートしたい Google Analytics のページを開き、画面左下の「管理」ボタン（歯車マーク）をクリックします。
[プロパティ]列の「BigQuery のリンク」をクリックします。
![GA管理ページ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/f568ecaf-86d7-ce73-baa8-7fd896ba4e71.png)

「BigQuery のリンク」パネルが開くので、「リンク」ボタンをクリックします。
![GA_BQへのリンク.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/e2f382ec-c023-72e8-e70a-656cb9b726ba.png)

「BigQuery プロジェクトを選択」からエクスポート先の Google Cloud プロジェクトを選択し、「次へ」ボタンをクリックします。
![GA_リンクの設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/338f5853-b117-593e-7adf-e25e237f077e.png)

[データ ストリームとイベント]はデフォルトのまま設定します。
[頻度]について、今回は「毎日」を選択し、「次へ」ボタンをクリックします。
![GA_構成の設定.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/e9c96696-998b-c74e-6c30-5e791e9e4b6e.png)

設定に問題がなければ「送信」ボタンをクリックします。これでエクスポートの設定は完了です。

#### エクスポートされる Google Analytics のデータについて
##### エクスポート先の BigQuery テーブル
Google Analytics のデータは、BigQuery の `analytics_<Google Analytics のID>` というデータセットの、
`events_YYYYMMDD` というテーブルにエクスポートされます。
データセットとテーブルは自動で作成されます。

##### エクスポートの頻度
エクスポート設定の[頻度]で「毎日」と「ストリーミング」が選択できます。
「毎日」の場合、Google Analytics のイベントデータがその次の日にエクスポートされます。
例）2022/8/9に起こったイベントのデータは、2022/8/10に`events_20220809` テーブルにエクスポートされます。

「ストリーミング」の場合、イベント発生ごとにデータが `events_intraday_YYYYMMDD` という一時テーブルにエクスポートされます。
その後 `events_YYYYMMDD` テーブルが作成され一時テーブルが削除されます。
例）2022/8/9に起こったイベントのデータは、生成されるたびに `events_intraday_20220809` テーブルに書き込まれます。
2022/8/9のイベントの全データはのちに`events_20220809` テーブルに格納され、`events_intraday_20220809` テーブルが削除されます。

詳細は Google Analytics のドキュメントを確認してください。

https://support.google.com/analytics/answer/9358801?hl=ja&ref_topic=9359001

### BigQuery のデータを Cloud Storage にエクスポートする
Cloud Storage へのエクスポートは、BigQuery のクエリを使います。
クエリをスケジュール登録し、日時で自動実行するためです。

```sql
DECLARE table_date STRING;
SET table_date = FORMAT_TIMESTAMP("%Y%m%d", DATE_ADD(current_date(), INTERVAL -1 DAY));

EXECUTE IMMEDIATE FORMAT("""
EXPORT DATA
  OPTIONS (
    uri = 'gs://<Cloud Storage のバケット名>/events_%s_*.json',
    format = 'JSON',
    overwrite = true
)
AS (
  SELECT *
  FROM `analytics_<Google Analytics の ID>.events_%s`
)
""", table_date, table_date);

```

#### クエリの詳細
```sql
DECLARE table_date STRING;
set table_date = FORMAT_TIMESTAMP("%Y%m%d", DATE_ADD(current_date(), INTERVAL -1 DAY));
```

`DECLARE` で変数を宣言し、`SET` で変数の値を設定します。
`DATE_ADD(current_date(), INTERVAL -1 DAY)` でクエリ実行の前日の日付を取得し、
`FORMAT_TIMESTAMP("%Y%m%d",...)` で日付の形式をテーブル名と同じ YYYYMMDD に変換します。

```sql
EXECUTE IMMEDIATE FORMAT("""
　　　<中略>
""", table_date, table_date);
```

変数をテーブル名に使う場合は `EXECUTE IMMEDIATE FORMAT("""<クエリ>""", <変数名>)` を使用します。
`<クエリ>` 内で変数の値で置き換えたい箇所を `%s` と記載し、`<変数名>` に置き換える変数名を記載します。

```sql
EXPORT DATA
  OPTIONS (
    uri = 'gs://<Cloud Storage のバケット名>/events_%s_*.json',
    format = 'JSON',
    overwrite = true
)
AS (
  SELECT *
  FROM `analytics_<Google Analytics の ID>.events_%s`
)
```

`EXPORT DATA OPTIONS` で エクスポート先のURIとエクスポートフォーマットを設定します。
エクスポートされたデータが分割された場合に備えて、URIにワイルドカードを指定する必要があります。
また、Google Analytics のデータにはネストデータが含まれているため、そのままエクスポートするにはフォーマットを JSON に指定します。
（UNNEST() を使ってネストデータを展開すれば、CSVなどでもエクスポート可能です。）
`AS (SELECT ...)` でエクスポートするカラムとテーブルを指定します。

#### クエリを自動実行する
クエリタブ上部の「スケジュール」から「スケジュールされたクエリを新規作成」をクリックします。
![クエリ新規作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/3b392ba0-8962-4098-9350-89821a2f76e3.png)

クエリの名前とスケジュールオプションを設定し、「保存」ボタンをクリックします。
Google Analytics のエクスポートデータを見ると、最終更新時刻が17時などの夕方なので、クエリ実施の時刻は夜遅くに設定しました。
![新たにスケジュールされたクエリ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426544/322fcdbc-1b83-337d-55ee-6fa402f916e7.png)


保存したスケジュールされたクエリは、 BigQuery の左メニューの「スケジュールされたクエリ」から確認することができます。


## 参考にしたドキュメント・記事

https://cloud.google.com/bigquery/docs/reference/standard-sql/timestamp_functions?hl=ja#current_timestamp
https://cloud.google.com/bigquery/docs/reference/standard-sql/date_functions?hl=ja#date_add
https://cloud.google.com/bigquery/docs/reference/standard-sql/operators?hl=ja#concatenation_operator
https://cloud.google.com/bigquery/docs/exporting-data?hl=ja#exporting_data_into_one_or_more_files

https://apl-py.com/tec/bigquerysql%E5%86%85%E3%81%A7%E5%A4%89%E6%95%B0%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%A6%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95declare%E3%81%A8set
https://zenn.dev/persona/articles/3d72642f12e461

以上です。
参考になれば幸いです。