Esquema de BigQuery Export

En este artículo, se explican el formato y el esquema de los datos de Google Analytics para Firebase que se exportan a BigQuery.

Conjuntos de datos

Para cada proyecto de Firebase vinculado a BigQuery, se agrega un solo conjunto de datos llamado "analytics_<property_id>" a su proyecto de BigQuery. El ID de propiedad se refiere al ID de propiedad de Analytics, que se encuentra en su "Configuración de Analytics" en Firebase. Cada una de las aplicaciones para las cuales esté habilitada la exportación de BigQuery exportará sus datos a ese único conjunto de datos.

Tablas

En cada conjunto de datos, se importa una tabla por cada día de exportación. Estas tablas tienen el formato "events_YYYYMMDD". Además, se importa una tabla de los eventos que se reciben durante el día.  Esta se denomina "events_intraday_YYYYMMDD" y se completa en tiempo real, a medida que se recopilan los eventos.

Filas

Cada fila de una tabla corresponde a un único evento subido por el SDK de Analytics.

Columnas

A continuación, se indican las columnas incluidas en la exportación.

 

Nombre del campo Tipo de datos Descripción
Aplicación    
app_info RECORD Un registro de información sobre la aplicación
app_info.id STRING El nombre o ID del paquete de la aplicación
app_info.firebase_app_id STRING El ID de la aplicación de Firebase asociado con la aplicación
app_info.install_source STRING La tienda que instaló la aplicación
app_info.version STRING El nombre de la versión de la aplicación (Android) o la versión abreviada del paquete
Dispositivo    
device RECORD Un registro de la información del dispositivo
device.category STRING La categoría del dispositivo (dispositivo móvil, tablet, computadora de escritorio)
device.mobile_brand_name STRING El nombre de la marca del dispositivo
device.mobile_model_name STRING El nombre del modelo del dispositivo
device.mobile_marketing_name STRING El nombre comercial del dispositivo
device.mobile_os_hardware_model STRING La información del modelo del dispositivo extraída directamente del sistema operativo
device.operating_system STRING El sistema operativo del dispositivo
device.operating_system_version STRING La versión del SO
device.vendor_id STRING IDFV (presente solo si no se cuenta con el código IDFA)
device.advertising_id STRING IDFA o ID de publicidad
device.language STRING El idioma del SO
device.time_zone_offset_seconds INTEGER Diferencia con respecto a la GMT en segundos
device.is_limited_ad_tracking BOOLEAN La configuración del límite de seguimiento de anuncios del dispositivo
Flujo de datos y plataforma    
stream_id STRING El ID numérico del flujo de datos
platform STRING La plataforma en la que se construyó la aplicación
Usuario    
user_first_touch_timestamp INTEGER La hora (en microsegundos) a la que el usuario abrió la aplicación por primera vez
user_id STRING El ID de usuario que se configura a través de la API setUserId
user_pseudo_id STRING El id seudónimo (p. ej., ID de instancia de la aplicación) para el usuario
user_properties RECORD Un registro repetido de las propiedades del usuario que se configura con la API setUserProperty
user_properties.key STRING El nombre de la propiedad del usuario
user_properties.value RECORD Un registro del valor de la propiedad del usuario
user_properties.value.string_value STRING El valor de string de la propiedad del usuario
user_properties.value.int_value INTEGER El valor entero de la propiedad del usuario
user_properties.value.double_value FLOAT El valor doble de la propiedad del usuario
user_properties.value.float_value FLOAT Este campo no se utiliza actualmente
user_properties.value.set_timestamp_micros INTEGER La hora (en microsegundos) a la que la propiedad del usuario se configuró por última vez
user_ltv RECORD Un registro de la información del valor del ciclo de vida del cliente sobre el usuario (este campo no se completa en las tablas del día)
user_ltv.revenue FLOAT El valor del ciclo de vida del cliente (ingresos) del usuario (este campo no se completa en las tablas del día)
user_ltv.currency STRING El valor del ciclo de vida del cliente (moneda) del usuario (este campo no se completa en las tablas del día)
Campaña   Nota: La atribución "traffic_source" se basa en el último clic en varios canales y sus valores no cambian si el usuario interactúa con campañas posteriores después de la instalación.
traffic_source RECORD El nombre de la fuente de tráfico que primero captó al usuario (este campo no se completa en las tablas del día)
traffic_source.name STRING El nombre de la campaña de marketing que primero captó al usuario (este campo no se completa en las tablas del día)
traffic_source.medium STRING El nombre del medio (búsqueda pagada, búsqueda orgánica, correo electrónico, etc.) que primero captó al usuario (este campo no se completa en las tablas del día)
traffic_source.source STRING El nombre de la red que primero captó al usuario (este campo no se completa en las tablas del día)
Ubicación geográfica    
geo RECORD Un registro de la información geográfica del usuario
geo.continent STRING El continente desde el que se informaron los eventos, según la dirección IP
geo.sub_continent STRING El subcontinente desde el que se informaron los eventos, según la dirección IP
geo.country STRING El país desde el que se informaron los eventos, según la dirección IP
geo.region STRING La región desde la que se informaron los eventos, según la dirección IP
geo.metro STRING El área metropolitana desde la que se informaron los eventos, según la dirección IP
geo.city STRING La ciudad desde la que se informaron los eventos, según la dirección IP
Evento    
event_date STRING La fecha en la que se registró el evento (con el formato YYYYMMDD según la zona horaria registrada en su aplicación)
event_timestamp INTEGER La hora (en microsegundos, UTC) a la que se registró el evento en el cliente
event_previous_timestamp INTEGER La hora (en microsegundos, UTC) a la que se registró anteriormente el evento en el cliente
event_name STRING El nombre del evento
event_params RECORD Un registro repetido de los parámetros asociados con este evento
event_params.key STRING La clave del parámetro del evento
event_params.value RECORD Un registro del valor del parámetro del evento
event_params.value.string_value STRING El valor de string del parámetro del evento
event_params.value.int_value INTEGER El valor entero del parámetro del evento
event_params.value.double_value FLOAT El valor doble del parámetro del evento
event_params.value.float_value FLOAT El valor decimal del parámetro del evento  Este campo no se utiliza actualmente
event_value_in_usd FLOAT El valor monetario expresado en USD del parámetro "value" del evento
event_bundle_sequence_id INTEGER El ID secuencial del conjunto en el que se subieron estos eventos
event_server_timestamp_offset INTEGER La compensación en la marca de tiempo entre la hora de la recopilación y la hora de la carga expresada en microsegundos
Web    
web_info RECORD Un registro de información sobre los datos web
web_info.hostname STRING El nombre de host asociado con el evento registrado
web_info.browser STRING El navegador en el que el usuario vio el contenido
web_info.browser_version STRING La versión del navegador en el que el usuario vio el contenido

 

 

Utilice la siguiente secuencia de comandos para migrar los conjuntos de datos de BigQuery existentes del esquema de exportación anterior al nuevo
  1. Acceda a Cloud Platform Console >: página de recursos de Administrador.
  2. Abra el proyecto cuyos datos desea migrar y haga clic en Activar Google Cloud Shell en la parte superior de la página.
  3. Cuando se abra el shell, copie la secuencia de comandos de abajo en un archivo llamado migration_script.sql:
    1. Ejecute el comando cat > migration_script.sql
    2. Copie la siguiente secuencia de comandos y péguela en el shell.
    3. Presione Ctrl+D para guardar y salir.
    Secuencia de comandos (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. Abra un nuevo shell y copie la secuencia de comandos bash de abajo en un archivo llamado migration.sh:
    1. Ejecute el comando cat > migration.sh
    2. Copie la siguiente secuencia de comandos y péguela en el shell.
    3. Presione Ctrl+D para guardar y salir.
    Modifique la siguiente secuencia de comandos para incluir su ID de propiedad de Analytics, el ID del proyecto de BigQuery, el ID de la aplicación de Firebase, el nombre del conjunto de datos de BigQuery y las fechas de inicio y finalización de los datos que desee.
    Secuencia de comandos (migration.sh):
    # ID de propiedad de Analytics para el proyecto. Búsquelo en la configuración de Analytics en Firebase.
    PROPERTY_ID=su ID de propiedad de Analytics
    
    # Proyecto de BigQuery Export.
    BQ_PROJECT_ID="su ID de proyecto de BigQuery" (p. ej., "proyecto-público-firebase")
    
    # ID de la aplicación de Firebase para la aplicación.
    FIREBASE_APP_ID="su ID de la aplicación Firebase" (p. ej., "1:300830567303:ios:09b1ab1d3ca29bda")
    
    # Conjunto de datos desde el cual realizar la importación.
    BQ_DATASET="nombre del conjunto de datos de BigQuery de los cuales desea realizar la importación" (p. ej., "com_firebase_demo_IOS")
    
    # Plataforma
    PLATFORM="la plataforma de la aplicación. ANDROID o IOS"
    
    # Período para el cual desea ejecutar la migración, [START_DATE,END_DATE] inclusive.
    START_DATE=20180324
    END_DATE=20180327
    
    # No modifique la siguiente secuencia de comandos a menos que esté seguro de lo que está haciendo:)
    startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
    enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
    
    # Repita para todas las fechas incluidas.
    DATE="$startdate"
    while [ "$DATE" -le "$enddate" ]; do
    
            # La tabla BQ que se construye a partir de los parámetros arriba mencionados.
            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
    
    # FIN DE LA SECUENCIA DE COMANDOS
    
    
  5. Abra un nuevo shell y ejecute el comando bash migration.sh.

 

Esquema de exportación anterior

user_dim

Nombre del campo Tipo de datos Descripción
user_dim RECORD Un registro de las dimensiones de usuario
user_dim.user_id STRING El ID de usuario que se configura a través de la API setUserId
user_dim.first_open_timestamp_micros INTEGER La hora (en microsegundos) a la que el usuario abrió la aplicación por primera vez
user_dim.user_properties RECORD Un registro repetido de las propiedades del usuario que se configura con la API setUserProperty
user_dim.user_properties.key STRING El nombre de la propiedad del usuario
user_dim.user_properties.value RECORD Un registro de información sobre la propiedad del usuario
user_dim.user_properties.value.value RECORD Un registro del valor de la propiedad del usuario
user_dim.user_properties.value.value.string_value STRING El valor de string de la propiedad del usuario
user_dim.user_properties.value.value.int_value INTEGER El valor entero de la propiedad del usuario
user_dim.user_properties.value.value.double_value FLOAT El valor doble de la propiedad del usuario
user_dim.user_properties.value.set_timestamp_usec INTEGER La hora (en microsegundos) a la que la propiedad del usuario se configuró por última vez
user_dim.user_properties.value.index INTEGER El índice (0-24) de la propiedad del usuario
user_dim.device_info RECORD Un registro de la información del dispositivo
user_dim.device_info.device_category STRING La categoría del dispositivo (dispositivo móvil, tablet, computadora de escritorio)
user_dim.device_info.mobile_brand_name STRING El nombre de la marca del dispositivo
user_dim.device_info.mobile_model_name STRING El nombre del modelo del dispositivo
user_dim.device_info.mobile_marketing_name STRING El nombre comercial del dispositivo
user_dim.device_info.device_model STRING El modelo del dispositivo
user_dim.device_info.platform_version STRING La versión del SO
user_dim.device_info.device_id STRING IDFV (presente solo si IDFA no está disponible)
user_dim.device_info.resettable_device_id STRING IDFA o ID de publicidad
user_dim.device_info.user_default_language STRING El idioma del SO
user_dim.device_info.device_time_zone_offset_seconds INTEGER Diferencia con respecto a la GMT en segundos
user_dim.device_info.limited_ad_tracking BOOLEAN La configuración del límite de seguimiento de anuncios del dispositivo
user_dim.geo_info RECORD Un registro de la información geográfica del usuario
user_dim.geo_info.continent STRING El continente desde el que se informaron los eventos, según la dirección IP
user_dim.geo_info.country STRING El país desde el que se informaron los eventos, según la dirección IP
user_dim.geo_info.region STRING La región desde la que se informaron los eventos, según la dirección IP
user_dim.geo_info.city STRING La ciudad desde la que se informaron los eventos, según la dirección IP
user_dim.app_info RECORD Un registro de información sobre la aplicación
user_dim.app_info.app_version STRING El nombre de la versión de la aplicación (Android) o la versión abreviada del paquete
user_dim.app_info.app_instance_id STRING El ID único de esta instancia de la aplicación
user_dim.app_info.app_store STRING La tienda que instaló esta aplicación
user_dim.app_info.app_platform STRING La plataforma en la que se ejecuta esta aplicación
user_dim.traffic_source RECORD El nombre de la fuente de tráfico que se usó para captar al usuario (este campo no se completa en las tablas del día)
user_dim.traffic_source.user_acquired_campaign STRING El nombre de la campaña de marketing que captó al usuario (este campo no se completa en las tablas del día)
user_dim.traffic_source.user_acquired_medium STRING El nombre del medio (búsqueda de pago, búsqueda orgánica, correo electrónico, etc.) que captó al usuario (este campo no se completa en las tablas del día)
user_dim.traffic_source.user_acquired_source STRING El nombre de la red que captó al usuario (este campo no se completa en las tablas del día)
user_dim.bundle_info RECORD Un registro de la información sobre el conjunto en el que se subieron estos eventos
user_dim.bundle_info.bundle_sequence_id INTEGER El ID secuencial del conjunto en el que se subieron estos eventos
user_dim.ltv_info RECORD Un registro de la información del valor del ciclo de vida del cliente sobre este usuario (este campo no se completa en las tablas del día)
user_dim.ltv_info.revenue FLOAT El valor del ciclo de vida del cliente (ingresos) de este usuario (este campo no se completa en las tablas del día)
user_dim.ltv_info.currency STRING El valor del ciclo de vida del cliente (moneda) de este usuario (este campo no se completa en las tablas del día)
 

event_dim

Nombre del campo Tipo de datos Descripción
event_dim RECORD Un registro repetido de la información relativa a los eventos de este conjunto
event_dim.date STRING La fecha en la que se registró el evento (con el formato YYYYMMDD según la zona horaria registrada en su aplicación)
event_dim.name STRING El nombre de este evento
event_dim.params RECORD Un registro repetido de los parámetros asociados con este evento
event_dim.params.key STRING La clave del parámetro del evento
event_dim.params.value RECORD Un registro del valor del parámetro del evento
event_dim.params.value.string_value STRING El valor de string del parámetro del evento
event_dim.params.value.int_value INTEGER El valor entero del parámetro del evento
event_dim.params.value.double_value FLOAT El valor doble del parámetro del evento
event_dim.timestamp_micros INTEGER La hora (en microsegundos, UTC) a la que se registró este evento en el cliente
event_dim.previous_timestamp_micros INTEGER La hora (en microsegundos, UTC) a la que se registró anteriormente este evento en el cliente
¿Te resultó útil esto?
¿Cómo podemos mejorarla?