Схема BigQuery Export

В этой статье описываются формат и схема данных Google Аналитики для Firebase, экспортируемых в BigQuery.

Наборы данных

Для каждого проекта Firebase, связанного с BigQuery, в проект BigQuery добавляется один набор данных под названием analytics_<property_id>. В качестве значения property_id подставляется идентификатор ресурса Google Аналитики, который можно найти в настройках Google Аналитики на платформе Firebase. В этот набор будет выполняться экспорт данных из всех приложений, для которых включен экспорт BigQuery.

Таблицы

Для каждого набора данных создается по одной таблице на каждый день в пределах периода времени, к которому относится экспортируемая информация. Названия таких таблиц имеют формат events_ГГГГММДД.

Также создается таблица с данными по всем событиям в приложении, зарегистрированным в течение текущего дня, которая получает название в формате events_intraday_ГГГГММДД. Она заполняется в реальном времени по мере регистрации событий.

Если вы используете тестовую среду BigQuery, импорт событий в течение дня не производится, и кроме того, применяются дополнительные ограничения.

Чтобы импортировать события в течение дня, перейдите из тестовой среды в обычный режим.

Строки

Каждая строка таблицы содержит сведения об одном событии, загруженные с помощью Analytics SDK.

Столбцы

Ниже приведены столбцы таблицы экспортируемых данных.

 

Имя поля Тип данных Описание
Приложение    
app_info RECORD Запись с информацией о приложении.
app_info.id STRING Название или идентификатор пакета приложения.
app_info.firebase_app_id STRING Идентификатор приложения в Firebase, связанный с приложением.
app_info.install_source STRING Магазин, из которого установлено приложение.
app_info.version STRING Параметр versionName (для устройств Android) или краткая версия пакета.
Устройство    
device RECORD Запись с информацией об устройстве.
device.category STRING Тип устройства (смартфон, планшет или компьютер).
device.mobile_brand_name STRING Бренд устройства.
device.mobile_model_name STRING Название модели устройства.
device.mobile_marketing_name STRING Торговое наименование устройства.
device.mobile_os_hardware_model STRING Сведения о модели устройства, полученные непосредственно из операционной системы.
device.operating_system STRING Операционная система устройства.
device.operating_system_version STRING Версия операционной системы.
device.vendor_id STRING Идентификатор IDFV (только если идентификатор IDFA не извлекается).
device.advertising_id STRING Рекламный идентификатор или IDFA.
device.language STRING Язык операционной системы.
device.time_zone_offset_seconds INTEGER Смещение времени относительно GMT (в секундах).
device.is_limited_ad_tracking BOOLEAN Информация о настройке ограничения отслеживания объявлений.
Поток и платформа    
stream_id STRING Числовой идентификатор потока.
platform STRING Платформа, на которой создано приложение.
Пользователь    
user_first_touch_timestamp INTEGER Время в микросекундах, когда пользователь впервые запустил приложение.
user_id STRING Идентификатор пользователя, заданный с помощью setUserId API.
user_pseudo_id STRING Идентификатор-псевдоним, предназначенный для пользователя, например идентификатор экземпляра приложения.
user_properties RECORD Повторная запись со свойствами пользователя, заданными с помощью setUserProperty API.
user_properties.key STRING Название свойства пользователя.
user_properties.value RECORD Запись со значением свойства пользователя.
user_properties.value.string_value STRING Строковое значение свойства пользователя.
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 STRING Валюта, в которой выражена общая ценность пользователя. Это поле не заполняется в таблицах за день.
Кампания   Примечание: при атрибуции в поле traffic_source используется модель Последний клик (несколько каналов). Значения traffic_source не изменяются, если пользователь после установки взаимодействует с последующими кампаниями.
traffic_source RECORD Название источника трафика, через который был впервые привлечен пользователь. Это поле не заполняется в таблицах за день.
traffic_source.name STRING Название кампании, благодаря которой был впервые привлечен пользователь. Это поле не заполняется в таблицах за день.
traffic_source.medium STRING Название канала, через который был впервые привлечен пользователь (например, поисковая реклама, обычный поиск или электронная почта). Это поле не заполняется в таблицах за день.
traffic_source.source STRING Название сети, через которую был впервые привлечен пользователь. Это поле не заполняется в таблицах за день.
География    
geo RECORD Запись с геоданными пользователя.
geo.continent STRING Континент, где были зарегистрированы события. Определяется по IP-адресу.
geo.sub_continent STRING Макрорегион, где были зарегистрированы события. Определяется по IP-адресу.
geo.country STRING Страна, где были зарегистрированы события. Определяется по IP-адресу.
geo.region STRING Регион, где были зарегистрированы события. Определяется по IP-адресу.
geo.metro STRING Городская агломерация, где были зарегистрированы события. Определяется по IP-адресу.
geo.city STRING Город, где были зарегистрированы события. Определяется по IP-адресу.
Событие    
event_date STRING Дата, когда было зарегистрировано событие (в формате ГГГГММДД, часовой пояс приложения).
event_timestamp INTEGER Время, когда событие было зарегистрировано в клиенте (в микросекундах, UTC).
event_previous_timestamp INTEGER Время, когда событие было зарегистрировано в клиенте в прошлый раз (в микросекундах, UTC).
event_name STRING Название события.
event_params RECORD Повторная запись с параметрами события.
event_params.key STRING Ключ параметра события.
event_params.value RECORD Запись со значением параметра события.
event_params.value.string_value STRING Строка – значение параметра события.
event_params.value.int_value INTEGER Целое число – значение параметра события.
event_params.value.double_value FLOAT Число двойной точности – значение параметра события.
event_params.value.float_value FLOAT Число с плавающей запятой – значение параметра события.Это поле в настоящее время не используется.
event_value_in_usd FLOAT Ценность параметра "value" в долларах США.
event_bundle_sequence_id INTEGER Порядковый идентификатор пакета, в котором были загружены события.
event_server_timestamp_offset INTEGER Смещение временной метки между временем сбора и загрузки (в микросекундах).
Веб    
web_info RECORD Запись с информацией о сайте.
web_info.hostname STRING Имя хоста, связанного с зарегистрированным событием.
web_info.browser STRING Браузер, в котором пользователь просматривал контент.
web_info.browser_version STRING Версия браузера, в котором пользователь просматривал контент.

 

 

Воспользуйтесь этим скриптом, чтобы перенести существующие наборы данных 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:
    1. Выполните команду cat > migration.sh.
    2. Скопируйте в оболочку приведенный ниже скрипт.
    3. Нажмите Ctrl + D, чтобы сохранить изменения и выйти.
    Добавьте в приведенный ниже скрипт свой идентификатор ресурса Аналитики, идентификатор проекта BigQuery, идентификатор приложения в Firebase, название набора данных BigQuery, а также укажите даты начала и окончания для нужных данных.
    Скрипт (migration.sh):
    # Идентификатор ресурса Аналитики для проекта. Найдите его в настройках Google Аналитики на платформе Firebase.
    PROPERTY_ID=ваш идентификатор ресурса Аналитики
    
    # Проект Bigquery Export.
    BQ_PROJECT_ID="ваш идентификатор проекта BigQuery" (например, "firebase-public-project")
    
    # Идентификатор вашего приложения в Firebase.
    FIREBASE_APP_ID="идентификатор вашего приложения в Firebase" (например, "1:300830567303:ios:09b1ab1d3ca29bda")
    
    # Набор данных, из которого выполняется импорт.
    BQ_DATASET="название набора данных BigQuery, из которого выполняется импорт" (например, "com_firebase_demo_IOS")
    
    # Платформа
    PLATFORM="платформа приложения – ANDROID или IOS"
    
    # Диапазон дат, данные за которые необходимо перенести, включая [START_DATE,END_DATE].
    START_DATE=20180324
    END_DATE=20180327
    
    # Изменять следующий скрипт не рекомендуется.
    startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
    enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
    
    # Выполните итерации для заданных дат.
    DATE="$startdate"
    while [ "$DATE" -le "$enddate" ]; do
    
            # Таблица BigQuery на основе приведенных выше параметров.
            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
    
    # ОКОНЧАНИЕ СКРИПТА
    
    
  5. Откройте новую оболочку и выполните команду bash migration.sh.

 

Старая схема экспорта

user_dim

Название поля Тип данных Описание
user_dim RECORD Запись с пользовательскими параметрами.
user_dim.user_id STRING Идентификатор пользователя, установленный с помощью setUserId API.
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 Тип устройства (смартфон, планшет или компьютер).
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 Версия операционной системы.
user_dim.device_info.device_id STRING Идентификатор IDFV (только если нет идентификатора IDFA).
user_dim.device_info.resettable_device_id STRING Рекламный идентификатор или IDFA.
user_dim.device_info.user_default_language STRING Язык операционной системы.
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) или краткая версия пакета.
user_dim.app_info.app_instance_id STRING Уникальный идентификатор данного экземпляра приложения.
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 Порядковый идентификатор пакета, в котором были загружены события.
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 Дата, когда было зарегистрировано событие (часовой пояс, заданный в формате ГГГГММДД в приложении)
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).
Эта информация оказалась полезной?
Как можно улучшить эту статью?