BigQuery Export のスキーマ

この記事では、BigQuery にエクスポートする Firebase 向け Google アナリティクスのデータの形式とスキーマについて説明します。

データセット

BigQuery にリンクしている Firebase プロジェクトごとに、「analytics_<property_id>」という名前の 1 つのデータセットが BigQuery プロジェクトに追加されます。プロパティ ID は、アナリティクスのプロパティ ID を参照します。これは Firebase の [アナリティクスの設定] で確認できます。BigQuery のエクスポートが有効になっている各アプリは、対応する 1 つのデータセットにデータをエクスポートします。

各データセット内で、エクスポートの日付ごとに表がインポートされます。これらの表の形式は「events_YYYYMMDD」となります。これに加えて、1 日の途中で発生したイベントを格納したテーブルもインポートされます。このテーブルには「events_intraday_YYYYMMDD」という形式の名前が付き、イベントが収集されるとデータがリアルタイムで追加されます。

テーブルの各行は、アナリティ SDK によってアップロードされた 1 つのイベントに対応します。

エクスポート データには以下の列があります。

 

フィールド名 データ型 説明
アプリ    
app_info RECORD アプリについての情報を格納するレコード。
app_info.id 文字列 アプリのパッケージ名またはバンドル ID。
app_info.firebase_app_id 文字列 アプリに関連付けられている Firebase アプリ ID。
app_info.install_source 文字列 アプリをインストールしたストア。
app_info.version 文字列 アプリの versionName(Android の場合)または short bundle version。
端末    
device RECORD 端末の情報を格納するレコード。
device.category 文字列 端末のカテゴリ(モバイル、タブレット、PC)。
device.mobile_brand_name 文字列 端末のブランド名。
device.mobile_model_name 文字列 端末のモデル名。
device.mobile_marketing_name 文字列 端末のマーケティング名。
device.mobile_os_hardware_model 文字列 OS から直接取得した端末のモデル情報。
device.operating_system 文字列 端末の OS。
device.operating_system_version 文字列 OS のバージョン。
device.vendor_id 文字列 IDFV(IDFA を収集していない場合にのみ使用)。
device.advertising_id 文字列 広告 ID / IDFA。
device.language 文字列 OS の言語。
device.time_zone_offset_seconds INTEGER GMT との時差(秒単位)。
device.is_limited_ad_tracking BOOLEAN 端末の「広告トラッキング抑制」が有効になっているかどうか。
ストリームとプラットフォーム    
stream_id 文字列 ストリームの数値 ID。
platform 文字列 アプリケーションが構築されているプラットフォーム。
ユーザー    
user_first_touch_timestamp INTEGER ユーザーが初めてアプリを開いた時刻(ミリ秒単位)。
user_id 文字列 setUserId API によって設定されるユーザー ID。
user_pseudo_id 文字列 ユーザーの仮の ID(アプリ インスタンス ID など)。
user_properties RECORD setUserProperty API によって設定される、ユーザー プロパティの繰り返しレコード。
user_properties.key 文字列 ユーザー プロパティの名前。
user_properties.value RECORD ユーザー プロパティの値を格納するレコード。
user_properties.value.string_value 文字列 ユーザー プロパティの文字列値。
user_properties.value.int_value INTEGER ユーザー プロパティの整数値。
user_properties.value.double_value FLOAT ユーザー プロパティの倍精度値。
user_properties.value.float_value FLOAT このフィールドは現在使用されていません。
user_properties.value.set_timestamp_micros INTEGER ユーザー プロパティが最後に設定された時刻(ミリ秒単位)。
user_ltv RECORD ユーザーのライフタイム バリューに関する情報を格納するレコード。このフィールドは当日テーブルでは使用されません。
user_ltv.revenue FLOAT ユーザーのライフタイム バリュー(収益)。このフィールドは当日テーブルでは使用されません。
user_ltv.currency 文字列 ユーザーのライフタイム バリュー(通貨)。このフィールドは当日テーブルでは使用されません。
キャンペーン   注: traffic_source のアトリビューションは、クロスチャネルのラストクリックに基づいています。traffic_source の値は、ユーザーがインストール後に次のキャンペーンを操作しても変更されません。
traffic_source RECORD ユーザーを最初に獲得したトラフィック ソースの名前。このフィールドは当日テーブルでは使用されません。
traffic_source.name 文字列 ユーザーを最初に獲得したマーケティング キャンペーンの名前。このフィールドは当日テーブルでは使用されません。
traffic_source.medium 文字列 ユーザーを最初に獲得したメディアの名前(有料検索、オーガニック検索、メールなど)。このフィールドは当日テーブルでは使用されません。
traffic_source.source 文字列 ユーザーを最初に獲得したネットワークの名前。このフィールドは当日テーブルでは使用されません。
地域    
geo RECORD ユーザーの位置情報を格納するレコード。
geo.continent 文字列 イベントが報告された大陸(IP アドレス ベース)。
geo.sub_continent 文字列 イベントが報告された亜大陸(IP アドレスベース)。
geo.country 文字列 イベントが報告された国(IP アドレス ベース)。
geo.region 文字列 イベントが報告された地域(IP アドレス ベース)。
geo.metro 文字列 イベントが報告された大都市圏(IP アドレスベース)。
geo.city 文字列 イベントが報告された都市(IP アドレス ベース)。
イベント    
event_date 文字列 イベントが記録された日付(アプリの登録タイムゾーンにおける日付を YYYYMMDD 形式で示したもの)。
event_timestamp INTEGER 該当クライアントでイベントが記録された時刻(ミリ秒単位、UTC)。
event_previous_timestamp INTEGER 該当クライアントで前回イベントが記録された時刻(ミリ秒単位、UTC)。
event_name 文字列 イベントの名前です。
event_params RECORD このイベントに関連付けられたパラメータを格納する繰り返しレコード。
event_params.key 文字列 イベント パラメータのキー。
event_params.value RECORD イベント パラメータの値を格納するレコード。
event_params.value.string_value 文字列 イベント パラメータの文字列値。
event_params.value.int_value INTEGER イベント パラメータの整数値。
event_params.value.double_value FLOAT イベント パラメータの倍精度値。
event_params.value.float_value FLOAT イベント パラメータの浮動小数点値。このフィールドは現在使用されていません。
event_value_in_usd FLOAT イベントの「値」パラメータの通貨換算値(米ドル単位)。
event_bundle_sequence_id INTEGER これらのイベントをまとめたアップロード用バンドルのシーケンシャル ID。
event_server_timestamp_offset INTEGER データの収集時とアップロード時のタイムスタンプの間隔(マイクロ秒単位)。
ウェブ    
web_info RECORD ウェブデータの情報のレコード。
web_info.hostname 文字列 ログに記録されたイベントに関連付けられたホスト名。
web_info.browser 文字列 ユーザーがコンテンツを閲覧したブラウザ。
web_info.browser_version 文字列 ユーザーがコンテンツを閲覧したブラウザのバージョン。

 

 

このスクリプトを使用して、既存の BigQuery データセットを古いエクスポート スキーマから新しいエクスポート スキーマに移行する
  1. Cloud Platform Console にログインし、[リソースの管理] ページに移動します。
  2. データを移行するプロジェクトを開き、ページの上部にある [Google Cloud Shell を有効にする] をクリックします。
  3. シェルが開いたら、migration_script.sql という名前のファイルに、以下のスクリプトをコピーします。
    1. cat > migration_script.sql の順にコマンドを発行します。
    2. 以下のスクリプトをコピーしてシェルに貼り付けます。
    3. Ctrl+D キーを押して保存し、終了します。
    スクリプト(migration_script.sql):
      SELECT
      @date AS event_date,
      event.timestamp_micros AS event_timestamp,
      event.previous_timestamp_micros AS event_previous_timestamp,
      event.name AS event_name,
      event.value_in_usd  AS event_value_in_usd,
       user_dim.bundle_info.bundle_sequence_id AS event_bundle_sequence_id,
      user_dim.bundle_info.server_timestamp_offset_micros as event_server_timestamp_offset,
      (
      SELECT
        ARRAY_AGG(STRUCT(event_param.key AS key,
            STRUCT(event_param.value.string_value AS string_value,
              event_param.value.int_value AS int_value,
              event_param.value.double_value AS double_value, 
              event_param.value.float_value AS float_value) AS value))
      FROM
        UNNEST(event.params) AS event_param) AS event_params,
      user_dim.first_open_timestamp_micros AS user_first_touch_timestamp,
      user_dim.user_id AS user_id,
      user_dim.app_info.app_instance_id AS user_pseudo_id,
      "" AS stream_id,
      user_dim.app_info.app_platform AS platform,
      STRUCT( user_dim.ltv_info.revenue AS revenue,
        user_dim.ltv_info.currency AS currency ) AS user_ltv,
      STRUCT( user_dim.traffic_source.user_acquired_campaign AS name,
          user_dim.traffic_source.user_acquired_medium AS medium,
          user_dim.traffic_source.user_acquired_source AS source ) AS traffic_source,
      STRUCT( user_dim.geo_info.continent AS continent,
        user_dim.geo_info.country AS country,
        user_dim.geo_info.region AS region,
        user_dim.geo_info.city AS city ) AS geo,
      STRUCT( user_dim.device_info.device_category AS category,
        user_dim.device_info.mobile_brand_name,
        user_dim.device_info.mobile_model_name,
        user_dim.device_info.mobile_marketing_name,
        user_dim.device_info.device_model AS mobile_os_hardware_model,
        @platform AS operating_system,
        user_dim.device_info.platform_version AS operating_system_version,
        user_dim.device_info.device_id AS vendor_id,
        user_dim.device_info.resettable_device_id AS advertising_id,
        user_dim.device_info.user_default_language AS language,
        user_dim.device_info.device_time_zone_offset_seconds AS time_zone_offset_seconds,
        IF(user_dim.device_info.limited_ad_tracking, "Yes", "No") AS is_limited_ad_tracking ) AS device,
      STRUCT( user_dim.app_info.app_id AS id,
        @firebase_app_id  AS firebase_app_id,
        user_dim.app_info.app_version AS version,
        user_dim.app_info.app_store AS install_source ) AS app_info,
      (
      SELECT
        ARRAY_AGG(STRUCT(user_property.key AS key,
            STRUCT(user_property.value.value.string_value AS string_value,
              user_property.value.value.int_value AS int_value,
              user_property.value.value.double_value AS double_value,
              user_property.value.value.float_value AS float_value,
              user_property.value.set_timestamp_usec AS set_timestamp_micros ) AS value))
      FROM
        UNNEST(user_dim.user_properties) AS user_property) AS user_properties
    FROM
      `SCRIPT_GENERATED_TABLE_NAME`,
      UNNEST(event_dim) AS event
      
  4. 新しいシェルを開き、migration.sh という名前のファイルに以下の bash スクリプトをコピーします。
    1. cat > migration.sh の順にコマンドを発行します。
    2. 以下のスクリプトをコピーしてシェルに貼り付けます。
    3. Ctrl+D キーを押して保存し、終了します。
    アナリティクス プロパティ ID、BigQuery プロジェクト ID、Firebase アプリ ID、BigQuery データセット名、および必要なデータの開始日と終了日を含めるように、次のスクリプトを変更します。
    スクリプト(migration.sh):
    # Analytics Property ID for the Project. Find this in Analytics Settings in Firebase.
    PROPERTY_ID=your Analytics property ID
    
    # Bigquery Export Project.
    BQ_PROJECT_ID="your BigQuery Project ID" (e.g., "firebase-public-project")
    
    # Firebase App ID for the app.
    FIREBASE_APP_ID="your Firebase App ID" (e.g., "1:300830567303:ios:09b1ab1d3ca29bda")
    
    # Dataset to import from.
    BQ_DATASET="name of BigQuery dataset you want to import from" (e.g., "com_firebase_demo_IOS")
    
    # Platform
    PLATFORM="platform of the app. ANDROID or IOS"
    
    # Date range for which you want to run migration, [START_DATE,END_DATE] inclusive.
    START_DATE=20180324
    END_DATE=20180327
    
    # Do not modify the script below, unless you know what you are doing :)
    startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
    enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
    
    # Iterate through the dates.
    DATE="$startdate"
    while [ "$DATE" -le "$enddate" ]; do
    
            # BQ table constructed from above params.
            BQ_TABLE="$BQ_PROJECT_ID.$BQ_DATASET.app_events_$DATE"
    
            echo "Migrating $BQ_TABLE"
    
            cat migration_script.sql | sed -e "s/SCRIPT_GENERATED_TABLE_NAME/$BQ_TABLE/g" | bq query \
            --debug_mode \
            --allow_large_results \
            --noflatten_results \
            --use_legacy_sql=False \
            --destination_table analytics_$PROPERTY_ID.events_$DATE \
            --batch \
            --append_table \
            --parameter=firebase_app_id::$FIREBASE_APP_ID \
            --parameter=date::$DATE \
            --parameter=platform::$PLATFORM \
            --project_id=$BQ_PROJECT_ID
    
    
            temp=$(date -I -d "$DATE + 1 day")
            DATE=$(date -d "$temp" +%Y%m%d)
    
    done
    exit
    
    # END OF SCRIPT
    
    
  5. 新しいシェルを開き、bash migration.sh コマンドを発行します。

 

古いエクスポート スキーマ

user_dim

フィールド名 データタイプ 説明
user_dim RECORD ユーザー ディメンションのレコード。
user_dim.user_id STRING setUserId API によって設定されるユーザー ID。
user_dim.first_open_timestamp_micros INTEGER ユーザーが初めてアプリを開いた時刻(ミリ秒単位)。
user_dim.user_properties RECORD setUserProperty API によって設定される、ユーザー プロパティの繰り返しレコード。
user_dim.user_properties.key STRING ユーザー プロパティの名前。
user_dim.user_properties.value RECORD ユーザー プロパティについての情報を格納するレコード。
user_dim.user_properties.value.value RECORD ユーザー プロパティの値を格納するレコード。
user_dim.user_properties.value.value.string_value STRING ユーザー プロパティの文字列値。
user_dim.user_properties.value.value.int_value INTEGER ユーザー プロパティの整数値。
user_dim.user_properties.value.value.double_value FLOAT ユーザー プロパティの倍精度値。
user_dim.user_properties.value.set_timestamp_usec INTEGER ユーザー プロパティが最後に設定された時刻(ミリ秒単位)。
user_dim.user_properties.value.index INTEGER ユーザー プロパティのインデックス(0~24)。
user_dim.device_info RECORD 端末の情報を格納するレコード。
user_dim.device_info.device_category STRING 端末のカテゴリ(モバイル、タブレット、PC)。
user_dim.device_info.mobile_brand_name STRING 端末のブランド名。
user_dim.device_info.mobile_model_name STRING 端末のモデル名。
user_dim.device_info.mobile_marketing_name STRING 端末のマーケティング名。
user_dim.device_info.device_model STRING 端末のモデル。
user_dim.device_info.platform_version STRING OS のバージョン。
user_dim.device_info.device_id STRING IDFV(IDFA を利用できない場合にのみ使用)。
user_dim.device_info.resettable_device_id STRING 広告 ID / IDFA。
user_dim.device_info.user_default_language STRING OS の言語。
user_dim.device_info.device_time_zone_offset_seconds INTEGER GMT との時差(秒単位)。
user_dim.device_info.limited_ad_tracking BOOLEAN 端末の「広告トラッキング抑制」が有効になっているかどうか。
user_dim.geo_info RECORD ユーザーの位置情報を格納するレコード。
user_dim.geo_info.continent STRING イベントが報告された大陸(IP アドレスベース)。
user_dim.geo_info.country STRING イベントが報告された国(IP アドレスベース)。
user_dim.geo_info.region STRING イベントが報告された地域(IP アドレスベース)。
user_dim.geo_info.city STRING イベントが報告された都市(IP アドレスベース)。
user_dim.app_info RECORD アプリについての情報を格納するレコード。
user_dim.app_info.app_version STRING アプリの versionName(Android の場合)または short bundle version。
user_dim.app_info.app_instance_id STRING アプリのこのインスタンスを識別する固有 ID。
user_dim.app_info.app_store STRING このアプリをインストールしたストア。
user_dim.app_info.app_platform STRING このアプリが実行されているプラットフォーム。
user_dim.traffic_source RECORD 該当ユーザーを獲得した際に使用したトラフィック ソースの名前。このフィールドは当日テーブルでは使用されません。
user_dim.traffic_source.user_acquired_campaign STRING 該当ユーザーを獲得したマーケティング キャンペーンの名前。このフィールドは当日テーブルでは使用されません。
user_dim.traffic_source.user_acquired_medium STRING 該当ユーザーを獲得したメディアの名前(有料検索、オーガニック検索、メールなど)。このフィールドは当日テーブルでは使用されません。
user_dim.traffic_source.user_acquired_source STRING 該当ユーザーを獲得したネットワークの名前。このフィールドは当日テーブルでは使用されません。
user_dim.bundle_info RECORD これらのイベントをまとめたアップロード用バンドルについての情報を格納するレコード。
user_dim.bundle_info.bundle_sequence_id INTEGER これらのイベントをまとめたアップロード用バンドルのシーケンシャル ID。
user_dim.ltv_info RECORD このユーザーのライフタイム バリューについての情報を格納するレコード。このフィールドは当日テーブルでは使用されません。
user_dim.ltv_info.revenue FLOAT このユーザーのライフタイム バリュー(収益)。このフィールドは当日テーブルでは使用されません。
user_dim.ltv_info.currency STRING このユーザーのライフタイム バリュー(通貨)。このフィールドは当日テーブルでは使用されません。
 

event_dim

フィールド名 データタイプ 説明
event_dim RECORD このバンドル内のイベントに関する情報を格納する繰り返しレコード。
event_dim.date STRING このイベントが記録された日付(アプリの登録タイムゾーンにおける日付を YYYYMMDD 形式で示したもの)。
event_dim.name STRING このイベントの名前。
event_dim.params RECORD このイベントに関連付けられたパラメータを格納する繰り返しレコード。
event_dim.params.key STRING イベント パラメータのキー。
event_dim.params.value RECORD イベント パラメータの値を格納するレコード。
event_dim.params.value.string_value STRING イベント パラメータの文字列値。
event_dim.params.value.int_value INTEGER イベント パラメータの整数値。
event_dim.params.value.double_value FLOAT イベント パラメータの倍精度値。
event_dim.timestamp_micros INTEGER 該当クライアントでこのイベントが記録された時刻(ミリ秒単位、UTC)。
event_dim.previous_timestamp_micros INTEGER 該当クライアントで前回このイベントが記録された時刻(ミリ秒単位、UTC)。
この記事は役に立ちましたか?
改善できる点がありましたらお聞かせください。