見出し画像

7. BigQueryのクエリのスケジューリングの設定方法や使い方

この記事ではBigQueryのクエリを定期的に実行し、出力結果をテーブルとして自動保存する方法をご紹介します。

Google Analyticsのデータを日毎・週毎・月毎に自動集計することで、手運用の手間を削減することができます。スケジュールの設定を細かくカスタムすることができるため、好きなタイミングでクエリを自動実行することができます。

日毎のクエリのスケジューリング設定方法

1. クエリのスケジューリングの利用設定

初めてスケジューリング機能を利用する場合は、機能自体を有効化する必要があります。

BigQueryのクエリのスケジューリング1

BigQueryのクエリのスケジューリング2

2. クエリの用意

2,3行目の「DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 DAY)」で前日の日付を取得しています。ユーザー定義関数を使うことで、前日や前週、前月の日付を対象期間に設定できます。
また、テーブル名は自身のものに書き換えてください。以下のクエリを実行してもNo resultsになります。

-- データを取得する対象期間を設定
CREATE TEMPORARY FUNCTION fromDate() AS (DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 DAY));
CREATE TEMPORARY FUNCTION toDate()  AS (DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 DAY));

​WITH
-- 縦持ちのデータを扱いやいように横持ちに変換
`convert_event_params` AS(
SELECT
 PARSE_DATE("%Y%m%d", event_date) AS date
 , user_pseudo_id
 , (SELECT value.string_value FROM UNNEST(event_params) AS params WHERE params.key = 'firebase_screen_class') AS firebase_screen_class
/****** 自身のテーブル名に書き変えてください ******/
FROM `firebase-public-project.analytics_153293282.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', fromDate()) AND FORMAT_DATE('%Y%m%d', toDate())
AND event_name = 'screen_view'
AND platform != 'WEB'
)
,
-- Firebaseの各画面ごとのユーザー数や閲覧回数を計算
`calc_event_users` AS (
SELECT
 date
 , firebase_screen_class
 , COUNT(1) AS views
 , COUNT(DISTINCT user_pseudo_id) AS view_users
FROM `convert_event_params`
GROUP BY date, firebase_screen_class
)
,
--  screen_viewのイベントが発生したアクティブユーザー数を計算
`calc_active_users` AS (
SELECT
 date
 , COUNT(DISTINCT user_pseudo_id) AS active_users
FROM `convert_event_params`
GROUP BY date
)

SELECT
 date
 , firebase_screen_class
 , views
 , views / view_users AS views_per_user
 , view_users
 , view_users / active_users AS view_users_per_AU
 , active_users
FROM `calc_event_users`
INNER JOIN `calc_active_users` USING(date)
ORDER BY date, firebase_screen_class​

3. 「Create new scheduled query」をクリック

BigQueryのクエリのスケジューリング3

4. 各項目を設定

以下の画像のように各項目を設定します。
⑤のテーブル名ですが、「{run_time-24h|"%Y%m%d"}」と書くことで前日の日付に変わります。
例えば、実行日が2020/12/15の場合は「daily_calc_firebase_screen_class_20201214」になります。

BigQueryのクエリのスケジューリング4

週毎にクエリのスケジューリングを設定する例

クエリについては以下のようになります。抜粋になるため、その他のクエリは上記の日毎のものを参考にしてください。

-- データを取得する対象期間を設定
-- 7日前を指定
CREATE TEMPORARY FUNCTION fromDate() AS (DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 7 DAY));
-- 1日前を指定
CREATE TEMPORARY FUNCTION toDate()  AS (DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 DAY));

WITH
`convert_event_params` AS(
SELECT
 -- 日付をその週の初めの日曜日に変換
 DATE_TRUNC(PARSE_DATE("%Y%m%d", event_date), WEEK) AS date
 , user_pseudo_id
 , (SELECT value.string_value FROM UNNEST(event_params) AS params WHERE params.key = 'firebase_screen_class') AS firebase_screen_class
/****** 自身のテーブル名に書き変えてください ******/
FROM `firebase-public-project.analytics_153293282.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', fromDate()) AND FORMAT_DATE('%Y%m%d', toDate())
AND event_name = 'screen_view'
AND platform != 'WEB'
)

etc....

先週初め(日曜)から先月末(土曜)までのGoogle Analyticsのデータを取得できるように対象期間を設定しつつ、週毎にデータを集計できるように設定しています。
例えば、2021年1月10日(日)に実行された場合は2021年1月3日(日)〜1月9日(土)が対象となります。

-- 7日前を指定
CREATE TEMPORARY FUNCTION fromDate() AS (DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 7 DAY));
-- 1日前を指定
CREATE TEMPORARY FUNCTION toDate()  AS (DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 DAY));


-- 日付をその週の初めの日曜日に変換
DATE_TRUNC(PARSE_DATE("%Y%m%d", event_date), WEEK) AS date

また、以下の画像を参考にスケジュールを設定してください。
テーブル名ですが、2020年1月10日に実行された場合は「weekly_calc_firebase_screen_class_20210109」で保存されます。

BigQueryのクエリのスケジューリング7

BigQueryのクエリのスケジューリング6

月毎にクエリのスケジューリングを設定する例

クエリについては以下のようになります。抜粋になるため、その他のクエリは上記の日毎のものを参考にしてください。

-- データを取得する対象期間を設定
-- 先月の初日を指定、○月1日
CREATE TEMPORARY FUNCTION fromDate() AS (DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH), MONTH));
-- 先月末を指定、○月31日など
CREATE TEMPORARY FUNCTION toDate()  AS (DATE_SUB(DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH), INTERVAL 1 DAY));

WITH
`convert_event_params` AS(
SELECT
 -- 日付をYYYY年MM月1日に変換
 DATE_TRUNC(PARSE_DATE("%Y%m%d", event_date), MONTH) AS date
 , user_pseudo_id
 , (SELECT value.string_value FROM UNNEST(event_params) AS params WHERE params.key = 'firebase_screen_class') AS firebase_screen_class
/****** 自身のテーブル名に書き変えてください ******/
FROM `firebase-public-project.analytics_153293282.events_*`
WHERE
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', fromDate()) AND FORMAT_DATE('%Y%m%d', toDate())
AND event_name = 'screen_view'
AND platform != 'WEB'
)

etc....

先月初めから先月末までのGoogle Analyticsのデータを取得できるように対象期間を設定しつつ、月毎にデータを集計できるように設定しています。

-- 先月の初日を指定、○月1日
CREATE TEMPORARY FUNCTION fromDate() AS (DATE_TRUNC(DATE_SUB(CURRENT_DATE('Asia/Tokyo'), INTERVAL 1 MONTH), MONTH));
-- 先月末を指定、○月31日など
CREATE TEMPORARY FUNCTION toDate()  AS (DATE_SUB(DATE_TRUNC(CURRENT_DATE('Asia/Tokyo'), MONTH), INTERVAL 1 DAY));


-- 日付をYYYY年MM月1日に変換
 DATE_TRUNC(PARSE_DATE("%Y%m%d", event_date), MONTH) AS date​

また、以下の画像を参考にスケジュールを設定してください。
テーブル名ですが、2020年1月1日に実行された場合は「monthly_calc_firebase_screen_class_20201231」で保存されます。

BigQueryのクエリのスケジューリング5

最後に

今回は日毎、週毎、月毎にクエリのスケジューリングを設定する方法をご紹介しました。
クエリの内容を書き換えることで、自動かつ定期的にクエリを実行してテーブルとして保存できます。

この保存されたテーブルをGoogle Data Studioで読み込むように設定することで、モニタリング用の自動更新されるダッシュボードが完成します。
次の記事ではBigQueryのテーブルをGoogle Data Studioで表示する方法をご紹介します。

このマガジンの記事

1. アプリの各画面を閲覧したユーザー数をBigQueryで集計する方法
2. Google Analytics 4の各イベントについての説明(page_view, screen_viewなど)
3. event_paramsについて(BigQueryのGoogle Analytics 4プロパティ)
4. GAをBigQueryで分析する際の注意点(WebとAppの違いやPlatformの絞り込み)
5. BigQueryでGoogle Analyticsを分析するときに参照したいドキュメント一覧
6. BigQueryのUDFの使い方や使用例の紹介(SQL編)
7. BigQueryのクエリのスケジューリングの設定方法や使い方

もし気に入っていただけたら、ぜひサポートお願いします!