0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[BigQuery] SELECT文からパーティション付きテーブルの作成

Posted at

はじめに

BigQueryにてパーティション付きテーブルの作成クエリです。
with句を使ったサンプルです。
ついでにFirebaseAnalyticsのサンプルクエリを記載します。

パーティション付きテーブルのSQL

CREATE TABLE
  `[出力先プロジェクトID].[出力先データセット名].[出力先テーブル名]`
PARTITION BY
   [パーティション列] OPTIONS( 
    require_partition_filter = TRUE -- パーティション フィルタを必須にする設定
) AS
WITH [with句名] as (
 [select ]
)
SELECT
  *
FROM
  [with句名]

FirebaseAnalyticsのイベントテーブルからテーブル作成例

CREATE TABLE
  `[出力先プロジェクトID].[出力先データセット名].[出力先テーブル名]`
PARTITION BY
  event_date OPTIONS( require_partition_filter = TRUE ) AS
WITH
  select_for_create_table AS (
  SELECT
    events.event_date,
    events.event_timestamp,
    events.event_name,
    events.user_id,
    events.user_pseudo_id,
    events.entrances,
    events.engaged_session_event,
    events.engagement_time_msec,
    events.ga_session_id,
    events.ga_session_number,
    events.fa_event_origin,
    events.fa_screen,
    events.fa_previous_screen,
    events.user_first_touch_timestamp,
    events.app_name,
    events.app_version,
    events.device_mobile_model_name,
    events.device_operating_system,
    events.device_operating_system_version,
    events.geo_region,
    events.geo_city,
  FROM (
    SELECT
      (
      SELECT
        AS STRUCT ANY_VALUE(CASE
            WHEN fa_param.key = 'entrances' THEN fa_param.value.int_value
        END
          ) AS entrances,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'engaged_session_event' THEN fa_param.value.int_value
        END
          ) AS engaged_session_event,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'engagement_time_msec' THEN fa_param.value.int_value
        END
          ) AS engagement_time_msec,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'ga_session_id' THEN fa_param.value.int_value
        END
          ) AS ga_session_id,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'ga_session_number' THEN fa_param.value.string_value
        END
          ) AS ga_session_number,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'firebase_event_origin' THEN fa_param.value.string_value
        END
          ) AS fa_event_origin,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'firebase_screen' THEN fa_param.value.string_value
        END
          ) AS fa_screen,
        ANY_VALUE(CASE
            WHEN fa_param.key = 'firebase_previous_screen' THEN fa_param.value.string_value
        END
          ) AS fa_previous_screen,
      FROM
        UNNEST(event_params) AS fa_param ).*,
      event_name,
      PARSE_DATE('%Y%m%d',
        event_date) AS event_date,
      DATETIME_TRUNC(DATETIME(TIMESTAMP_MICROS(event_timestamp),
          'Asia/Tokyo'),
        SECOND) AS event_timestamp,
      SAFE_CAST(user_id AS int64) AS user_id,
      user_pseudo_id,
      DATETIME_TRUNC(DATETIME(TIMESTAMP_MICROS(user_first_touch_timestamp),
          'Asia/Tokyo'),
        SECOND) AS user_first_touch_timestamp,
      app_info.id AS app_name,
      app_info.version AS app_version,
      COALESCE(device.mobile_model_name,
        device.mobile_os_hardware_model) AS device_mobile_model_name,
      device.operating_system AS device_operating_system,
      device.operating_system_version AS device_operating_system_version,
      geo.region AS geo_region,
      geo.city AS geo_city,
    FROM
      `[プロジェクトID].analytics_xxxxxxxxx.events_*` ) AS events)
SELECT
  *
FROM
  select_for_create_table

さいごに

GoogleAnalytics4がデフォルトになってきて、BigQueryとFirebaseAnalyticsやGoogleAnalyticsと連携することが簡単になってきました。
溜まった日付テーブルから一括で中間テーブルを作成する時に役立つと思います。

sqlだけで実行できるとマネージドコンソールだけで完結するので楽ですね。

0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?