Esquema de BigQuery Export

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

Conjuntos de datos

Cada vez que se vincula un proyecto de Firebase a BigQuery, se añade un único conjunto de datos llamado "analytics_<ID_propiedad>" a su proyecto de BigQuery. El campo <ID_propiedad> hace referencia al ID de la propiedad de Analytics, que se puede encontrar en la sección de configuración de Analytics de Firebase. Los datos de cada aplicación que tenga habilitada la exportación a BigQuery se exportarán 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_AAAAMMDD". Además, también se importa una tabla de los eventos recibidos a lo largo del día corriente.  Esta tabla se llama "events_intraday_AAAAMMDD" y se rellena en tiempo real a medida que se recogen los eventos.

Filas

Cada fila de las tablas corresponde a un único evento cargado por el SDK de Analytics.

Columnas

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

 

Nombre del campo Tipo de datos Descripción
Aplicación    
app_info REGISTRO Un registro de la información de la aplicación.
app_info.id CADENA El nombre o el ID del paquete de la aplicación.
app_info.firebase_app_id CADENA El ID de aplicación de Firebase asociado a la aplicación.
app_info.install_source CADENA La tienda desde la que se instaló la aplicación.
app_info.version CADENA El nombre de la versión (Android) o la versión de paquete reducida de la aplicación.
Dispositivo    
device REGISTRO Un registro de la información del dispositivo.
device.category CADENA La categoría del dispositivo (móvil, tablet u ordenador).
device.mobile_brand_name CADENA El nombre de la marca del dispositivo.
device.mobile_model_name CADENA El nombre del modelo del dispositivo.
device.mobile_marketing_name CADENA El nombre comercial del dispositivo.
device.mobile_os_hardware_model CADENA La información del modelo del dispositivo como se obtiene directamente del sistema operativo.
device.operating_system CADENA El sistema operativo del dispositivo (SO).
device.operating_system_version CADENA La versión del SO.
device.vendor_id CADENA IDFV (solo aparece si no se registra el IDFA).
device.advertising_id CADENA IDFA o ID de publicidad.
device.language CADENA El idioma del SO.
device.time_zone_offset_seconds NÚMERO ENTERO La compensación horaria respecto a GMT en segundos.
device.is_limited_ad_tracking BOOLEANO La opción de configuración para limitar el seguimiento de anuncios del dispositivo.
Flujo y plataforma    
stream_id CADENA El ID numérico del flujo.
platform CADENA La plataforma en la que se desarrolló la aplicación.
Usuario    
user_first_touch_timestamp NÚMERO ENTERO La hora (en microsegundos) a la que el usuario abrió la aplicación por primera vez.
user_id CADENA El ID de usuario configurado con la API setUserId.
user_pseudo_id CADENA El ID seudónimo del usuario (p. ej., ID de instancia de aplicación).
user_properties REGISTRO Un registro repetido de propiedades de usuario y configurado con la API setUserProperty.
user_properties.key CADENA El nombre de la propiedad de usuario.
user_properties.value REGISTRO Un registro del valor de propiedad de usuario.
user_properties.value.string_value CADENA El valor de cadena de la propiedad de usuario.
user_properties.value.int_value NÚMERO ENTERO El valor entero de la propiedad de usuario.
user_properties.value.double_value FLOTANTE El valor de doble precisión de la propiedad de usuario.
user_properties.value.float_value FLOTANTE Actualmente no se usa este campo.
user_properties.value.set_timestamp_micros NÚMERO ENTERO La hora (en microsegundos) a la que se configuró por última vez la propiedad de usuario.
user_ltv REGISTRO Un registro de la información del valor del tiempo de vida del cliente. Este campo no se rellena en tablas intradiarias.
user_ltv.revenue FLOTANTE El valor del ciclo de vida del cliente (ingresos) del usuario. Este campo no se rellena en tablas intradiarias.
user_ltv.currency CADENA El valor del ciclo de vida del cliente (moneda) del usuario. Este campo no se rellena en tablas intradiarias.
Campaña   Nota: La atribución de traffic_source se basa en el último clic multicanal. Los valores de traffic_source no cambian si el usuario interactúa con otras campañas después de instalar la aplicación.
traffic_source REGISTRO El nombre de la fuente de tráfico con la que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
traffic_source.name CADENA El nombre de la campaña de marketing con la que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
traffic_source.medium CADENA El nombre del medio (p. ej., publicidad en buscadores, búsqueda orgánica o correo electrónico) con el que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
traffic_source.source CADENA El nombre de la red con la que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
Información geográfica    
geo REGISTRO Un registro de la información geográfica del usuario.
geo.continent CADENA El continente en el que se registraron los eventos, según la dirección IP.
geo.sub_continent CADENA El subcontinente en el que se registraron los eventos, según la dirección IP.
geo.country CADENA El país en el que se registraron los eventos, según la dirección IP.
geo.region CADENA La región en la que se registraron los eventos, según la dirección IP.
geo.metro CADENA El área metropolitana en la que se registraron los eventos, según la dirección IP.
geo.city CADENA La ciudad en la que se registraron los eventos, según la dirección IP.
Evento    
event_date CADENA La fecha en la que se registró el evento (en el formato de fecha AAAAMMDD de la zona horaria registrada de la aplicación).
event_timestamp NÚMERO ENTERO La hora (en microsegundos y formato UTC) a la que se registró el evento en el cliente.
event_previous_timestamp NÚMERO ENTERO La hora (en microsegundos y formato UTC) a la que se registró previamente el evento en el cliente.
event_name CADENA El nombre del evento.
event_params REGISTRO Un registro repetido de los parámetros asociados a este evento.
event_params.key CADENA La clave del parámetro de evento.
event_params.value REGISTRO Un registro del valor del parámetro de evento.
event_params.value.string_value CADENA El valor de cadena del parámetro de evento.
event_params.value.int_value NÚMERO ENTERO El valor entero del parámetro de evento.
event_params.value.double_value FLOTANTE El valor de doble precisión del parámetro de evento.
event_params.value.float_value FLOTANTE El valor flotante del parámetro de evento.  Actualmente no se usa este campo.
event_value_in_usd FLOTANTE El valor de conversión de moneda (en USD) del parámetro "value" del evento.
event_bundle_sequence_id NÚMERO ENTERO El ID secuencial del paquete en el que se subieron estos eventos.
event_server_timestamp_offset NÚMERO ENTERO Compensación en microsegundos de la marca de tiempo entre la hora de la recogida y la de carga.
Web    
web_info REGISTRO Un registro de datos web.
web_info.hostname CADENA El nombre de host asociado al evento registrado.
web_info.browser CADENA El navegador con el que el usuario consultó el contenido.
web_info.browser_version CADENA La versión del navegador con la que el usuario consultó el contenido.

 

 

Secuencia de comandos para migrar los conjuntos de datos de BigQuery del esquema de exportación anterior al nuevo
  1. Inicie sesión en la consola de Cloud Platform y vaya a la página Administrar recursos.
  2. Abra el proyecto cuyos datos desea migrar y, en la parte superior de la página, haga clic en Activar Cloud Shell.
  3. Cuando se abra el shell, copie la siguiente secuencia de comandos en un archivo llamado migration_script.sql:
    1. Ejecute el comando cat > migration_script.sql.
    2. Copie y pegue en el shell la secuencia de comandos que se indica más abajo.
    3. Para guardar y salir, pulse Ctrl + D.
    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 en un archivo llamado migration.sh la secuencia de comandos Bash que aparece más abajo:
    1. Ejecute el comando cat > migration.sh.
    2. Copie y pegue en el shell la secuencia de comandos que se indica más abajo.
    3. Para guardar y salir, pulse Ctrl + D.
    Modifique la secuencia de comandos siguiente; incluya el ID de la propiedad de Analytics, el ID de proyecto de BigQuery, el ID de aplicación de Firebase, el nombre del conjunto de datos de BigQuery y las fechas de inicio y finalización de los datos que quiera.
    Secuencia de comandos (migration.sh):
    # ID de la propiedad de Analytics del proyecto. Podrá encontrarlo en la sección de configuración de Analytics de Firebase.
    PROPERTY_ID= ID de su propiedad de Analytics
    
    # Proyecto de BigQuery Export.
    BQ_PROJECT_ID= "ID de su proyecto de BigQuery" (p. ej., "proyecto-público-de-firebase")
    # ID de la aplicación de Firebase.
    FIREBASE_APP_ID="ID de su aplicación de Firebase" (p. ej., "1:300830567303:ios:09b1ab1d3ca29bda")
    
    # Conjunto desde el que se importan los datos.
    BQ_DATASET="nombre del conjunto de BigQuery desde el que quiere importar los datos" (p. ej., "demo_de_firebase_para_iOS")
    
    # Plataforma.
    PLATFORM="plataforma de la aplicación; puede ser ANDROID o IOS"
    
    # Periodo del cual se quiere hacer la migración, incluidas las fechas [START_DATE] y [END_DATE].
    START_DATE=20180324
    END_DATE=20180327
    
    # Nota: No modifique el código siguiente si no tiene los conocimientos para hacerlo.
    startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
    enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
    
    # Se debe repetir la secuencia de comandos por los días comprendidos entre las dos fechas anteriores.
    DATE="$startdate"
    while [ "$DATE" -le "$enddate" ]; do
    
            # Se construye la tabla de BigQuery aplicando los parámetros anteriores.
            BQ_TABLE="$BQ_PROJECT_ID.$BQ_DATASET.app_events_$DATE"
    
            echo "Migrando $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.

 

Antiguo esquema de exportación

user_dim

Nombre del campo Tipo de datos Descripción
user_dim REGISTRO Un registro de dimensiones de usuario.
user_dim.user_id CADENA El ID de usuario configurado con la API setUserId.
user_dim.first_open_timestamp_micros NÚMERO ENTERO La hora (en microsegundos) a la que el usuario abrió la aplicación por primera vez.
user_dim.user_properties REGISTRO Un registro repetido de propiedades de usuario y configurado con la API setUserProperty.
user_dim.user_properties.key CADENA El nombre de la propiedad de usuario.
user_dim.user_properties.value REGISTRO Un registro de la información sobre la propiedad de usuario.
user_dim.user_properties.value.value REGISTRO Un registro del valor de propiedad de usuario.
user_dim.user_properties.value.value.string_value CADENA El valor de cadena de la propiedad de usuario.
user_dim.user_properties.value.value.int_value NÚMERO ENTERO El valor entero de la propiedad de usuario.
user_dim.user_properties.value.value.double_value FLOTANTE El valor de doble precisión de la propiedad de usuario.
user_dim.user_properties.value.set_timestamp_usec NÚMERO ENTERO La hora (en microsegundos) a la que se configuró por última vez la propiedad de usuario.
user_dim.user_properties.value.index NÚMERO ENTERO El índice (de 0 a 24) de la propiedad de usuario.
user_dim.device_info REGISTRO Un registro de la información del dispositivo.
user_dim.device_info.device_category CADENA La categoría del dispositivo (móvil, tablet u ordenador).
user_dim.device_info.mobile_brand_name CADENA El nombre de la marca del dispositivo.
user_dim.device_info.mobile_model_name CADENA El nombre del modelo del dispositivo.
user_dim.device_info.mobile_marketing_name CADENA El nombre comercial del dispositivo.
user_dim.device_info.device_model CADENA El modelo del dispositivo.
user_dim.device_info.platform_version CADENA La versión del SO.
user_dim.device_info.device_id CADENA IDFV (solo aparece si el IDFA no está disponible).
user_dim.device_info.resettable_device_id CADENA IDFA o ID de publicidad.
user_dim.device_info.user_default_language CADENA El idioma del SO.
user_dim.device_info.device_time_zone_offset_seconds NÚMERO ENTERO La compensación horaria respecto a GMT en segundos.
user_dim.device_info.limited_ad_tracking BOOLEANO La opción de configuración para limitar el seguimiento de anuncios del dispositivo.
user_dim.geo_info REGISTRO Un registro de la información geográfica del usuario.
user_dim.geo_info.continent CADENA El continente en el que se registraron los eventos, según la dirección IP.
user_dim.geo_info.country CADENA El país en el que se registraron los eventos, según la dirección IP.
user_dim.geo_info.region CADENA La región en la que se registraron los eventos, según la dirección IP.
user_dim.geo_info.city CADENA La ciudad en la que se registraron los eventos, según la dirección IP.
user_dim.app_info REGISTRO Un registro de la información de la aplicación.
user_dim.app_info.app_version CADENA El nombre de la versión (Android) o la versión de paquete reducida de la aplicación.
user_dim.app_info.app_instance_id CADENA El ID único de la instancia de la aplicación.
user_dim.app_info.app_store CADENA La tienda de la que se ha descargado esta aplicación.
user_dim.app_info.app_platform CADENA La plataforma en que se está ejecutando esta aplicación.
user_dim.traffic_source REGISTRO El nombre de la fuente de tráfico con la que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
user_dim.traffic_source.user_acquired_campaign CADENA El nombre de la campaña de marketing con la que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
user_dim.traffic_source.user_acquired_medium CADENA El nombre del medio (búsqueda de pago, búsqueda orgánica, correo electrónico, etc.) con el que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
user_dim.traffic_source.user_acquired_source CADENA El nombre de la red con la que se adquirió al usuario. Este campo no se rellena en tablas intradiarias.
user_dim.bundle_info REGISTRO Un registro de la información sobre el paquete en el que se subieron estos eventos.
user_dim.bundle_info.bundle_sequence_id NÚMERO ENTERO El ID secuencial del paquete en el que se subieron estos eventos.
user_dim.ltv_info REGISTRO Un registro de la información del valor del ciclo de vida del cliente sobre este usuario. Este campo no se rellena en tablas intradiarias.
user_dim.ltv_info.revenue FLOTANTE El valor del ciclo de vida del cliente (ingresos) de este usuario. Este campo no se rellena en tablas intradiarias.
user_dim.ltv_info.currency CADENA El valor del ciclo de vida del cliente (moneda) de este usuario. Este campo no se rellena en tablas intradiarias.
 

event_dim

Nombre del campo Tipo de datos Descripción
event_dim REGISTRO Un registro repetido de información correspondiente a los eventos de este paquete.
event_dim.date CADENA La fecha en la que se registró este evento (en el formato de fecha AAAAMMDD de la zona horaria registrada de la aplicación).
event_dim.name CADENA El nombre de este evento.
event_dim.params REGISTRO Un registro repetido de los parámetros asociados a este evento.
event_dim.params.key CADENA La clave del parámetro de evento.
event_dim.params.value REGISTRO Un registro del valor del parámetro de evento.
event_dim.params.value.string_value CADENA El valor de cadena del parámetro de evento.
event_dim.params.value.int_value NÚMERO ENTERO El valor entero del parámetro de evento.
event_dim.params.value.double_value FLOTANTE El valor de doble precisión del parámetro de evento.
event_dim.timestamp_micros NÚMERO ENTERO La hora (en microsegundos y formato UTC) a la que se registró este evento en el cliente.
event_dim.previous_timestamp_micros NÚMERO ENTERO La hora (en microsegundos y formato UTC) a la que se registró previamente este evento en el cliente.
¿Te ha resultado útil esta información?
¿Cómo podemos mejorar esta página?