Esquema do BigQuery Export

Este artigo explica o formato e o esquema dos dados do Google Analytics para Firebase que são exportados para o BigQuery.

Conjuntos de dados

Para cada projeto do Firebase associado ao BigQuery, é adicionado ao seu projeto do BigQuery um único conjunto de dados denominado "analytics_<property_id>". O ID da propriedade refere-se ao ID da sua propriedade do Analytics, que pode encontrar nas definições do Analytics no Firebase. Cada aplicação para a qual a exportação do BigQuery esteja ativada irá exportar os respetivos dados para esse único conjunto de dados.

Tabelas

Em cada conjunto de dados, é importada uma tabela para cada dia de exportação. Estas tabelas têm o formato "events_YYYYMMDD". Além disso, uma tabela é importada para os eventos recebidos ao longo do dia atual.  O nome da tabela é "events_intraday_YYYYMMDD" e esta é preenchida em tempo real à medida que os eventos são recolhidos.

Linhas

Cada linha de uma tabela corresponde a um único evento carregado pelo SDK do Analytics.

Colunas

As colunas da exportação são listadas abaixo.

 

Nome do campo Tipo de dados Descrição
Aplicação    
app_info REGISTO Um registo de informações na aplicação.
app_info.id STRING O nome do pacote ou o ID do pacote da aplicação.
app_info.firebase_app_id STRING O ID da aplicação do Firebase associado à aplicação.
app_info.install_source STRING A loja que instalou a aplicação.
app_info.version STRING O nome da versão da aplicação (Android) ou a versão curta do pacote.
Dispositivo    
device REGISTO Um registo das informações do dispositivo.
device.category STRING A categoria do dispositivo (telemóvel, tablet, computador).
device.mobile_brand_name STRING O nome da marca do dispositivo.
device.mobile_model_name STRING O nome do modelo do dispositivo.
device.mobile_marketing_name STRING O nome comercial do dispositivo.
device.mobile_os_hardware_model STRING As informações do modelo do dispositivo obtidas diretamente do sistema operativo.
device.operating_system STRING O sistema operativo do dispositivo.
device.operating_system_version STRING A versão do SO.
device.vendor_id STRING IDFV (apenas presente quando o IDFA não é recolhido).
device.advertising_id STRING ID de publicidade/IDFA.
device.language STRING O idioma do SO.
device.time_zone_offset_seconds NÚMERO INTEIRO A deslocação de GMT em segundos.
device.is_limited_ad_tracking BOOLEANO A definição Controlo de limite para anúncios do dispositivo.
Transmissão em fluxo contínuo e plataforma    
stream_id STRING O ID numérico da transmissão em fluxo contínuo.
platform STRING A plataforma na qual a aplicação foi criada.
Utilizador    
user_first_touch_timestamp NÚMERO INTEIRO A hora (em microssegundos) a que o utilizador abriu a aplicação pela primeira vez.
user_id STRING O User ID definido através da API setUserId.
user_pseudo_id STRING O ID pseudonimizado (por exemplo, ID de instância da aplicação) do utilizador.
user_properties REGISTO Um registo repetido de propriedades de utilizador definidas com a API setUserProperty.
user_properties.key STRING O nome da propriedade do utilizador.
user_properties.value REGISTO Um registo para o valor da propriedade do utilizador.
user_properties.value.string_value STRING O valor de string da propriedade do utilizador.
user_properties.value.int_value NÚMERO INTEIRO O valor inteiro da propriedade do utilizador.
user_properties.value.double_value FLUTUANTE O valor duplo da propriedade do utilizador.
user_properties.value.float_value FLUTUANTE Este campo não é utilizado atualmente.
user_properties.value.set_timestamp_micros NÚMERO INTEIRO A hora (em microssegundos) a que a propriedade do utilizador foi definida pela última vez.
user_ltv REGISTO Um registo de informações de valor do cliente relativas ao utilizador. Este campo não é preenchido em tabelas intradiárias.
user_ltv.revenue FLUTUANTE O valor do cliente (receita) do utilizador. Este campo não é preenchido em tabelas intradiárias.
user_ltv.currency STRING O valor do cliente (moeda) do utilizador. Este campo não é preenchido em tabelas intradiárias.
Campanha   Nota: a atribuição de traffic_source baseia-se no último clique em vários canais. Os valores de traffic_source não mudam se o utilizador interagir com as campanhas subsequentes após a instalação.
traffic_source REGISTO Nome da origem de tráfego que adquiriu o utilizador em primeiro lugar. Este campo não é preenchido em tabelas intradiárias.
traffic_source.name STRING Nome da campanha de marketing que adquiriu o utilizador em primeiro lugar. Este campo não é preenchido em tabelas intradiárias.
traffic_source.medium STRING Nome do meio (pesquisa paga, pesquisa orgânica, email, etc.) que adquiriu o utilizador em primeiro lugar. Este campo não é preenchido em tabelas intradiárias.
traffic_source.source STRING Nome da rede que adquiriu o utilizador em primeiro lugar. Este campo não é preenchido em tabelas intradiárias.
Geográficos    
geo REGISTO Um registo das informações geográficas do utilizador.
geo.continent STRING O continente de comunicação de eventos, com base no endereço IP.
geo.sub_continent STRING O subcontinente de comunicação de eventos, com base no endereço IP.
geo.country STRING O país de comunicação de eventos, com base no endereço IP.
geo.region STRING A região de comunicação de eventos, com base no endereço IP.
geo.metro STRING A área metropolitana de comunicação de eventos, com base no endereço IP.
geo.city STRING A cidade de comunicação de eventos, com base no endereço IP.
Evento    
event_date STRING A data em que o evento foi registado (formato YYYYMMDD no fuso horário registado na aplicação).
event_timestamp NÚMERO INTEIRO A hora (em microssegundos, UTC) a que o evento foi registado no cliente.
event_previous_timestamp NÚMERO INTEIRO A hora (em microssegundos, UTC) a que o evento foi anteriormente registado no cliente.
event_name STRING O nome do evento.
event_params REGISTO Um registo repetido dos parâmetros associados a este evento.
event_params.key STRING A chave do parâmetro do evento.
event_params.value REGISTO Um registo do valor do parâmetro do evento.
event_params.value.string_value STRING O valor da string do parâmetro do evento.
event_params.value.int_value NÚMERO INTEIRO O valor inteiro do parâmetro do evento.
event_params.value.double_value FLUTUANTE O valor duplo do parâmetro do evento.
event_params.value.float_value FLUTUANTE O valor flutuante do parâmetro do evento.  Este campo não é utilizado atualmente.
event_value_in_usd FLUTUANTE O valor de conversão de moeda (em USD) do parâmetro "value" do evento.
event_bundle_sequence_id NÚMERO INTEIRO O ID sequencial do pacote em que foram carregados estes eventos.
event_server_timestamp_offset NÚMERO INTEIRO Deslocação de data/hora entre o tempo de recolha e o tempo de carregamento em microssegundos.
Web    
web_info REGISTO Um registo de informações para dados da Web.
web_info.hostname STRING O nome do anfitrião associado ao evento registado.
web_info.browser STRING O navegador em que o utilizador visualizou conteúdo.
web_info.browser_version STRING A versão do navegador em que o utilizador visualizou conteúdo.

 

 

Utilize este script para migrar os conjuntos de dados existentes do BigQuery do esquema de exportação antigo para o novo esquema
  1. Inicie sessão na Cloud Platform Console >: página Recursos do gestor.
  2. Abra o projeto cujos dados pretende migrar e clique em Ativar Google Cloud Shell na parte superior da página.
  3. Quando a shell abrir, copie o script abaixo para um ficheiro denominado migration_script.sql:
    1. Emita o comando cat > migration_script.sql
    2. Copie e cole o script abaixo na shell.
    3. Prima Ctrl+D para guardar e sair.
    Script (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 uma nova shell e copie o script bash abaixo para um ficheiro denominado migration.sh:
    1. Emita o comando cat > migration.sh
    2. Copie e cole o script abaixo na shell.
    3. Prima Ctrl+D para guardar e sair.
    Modifique o seguinte script de modo a incluir o ID da sua propriedade do Analytics, o ID do projeto do BigQuery, o ID da aplicação do Firebase, o nome do conjunto de dados do BigQuery e as datas de início e de conclusão dos dados pretendidos.
    Script (migration.sh):
    # ID da propriedade do Analytics para o projeto. Encontre-o nas Definições do Analytics no Firebase.
    PROPERTY_ID=o seu ID da propriedade do Analytics
    
    # Projeto do BigQuery Export.
    BQ_PROJECT_ID="o seu ID de projeto do BigQuery" (por exemplo, "firebase-public-project")
    
    # ID da aplicação do Firebase para a aplicação.
    FIREBASE_APP_ID="o seu ID de aplicação do Firebase" (por exemplo, "1:300830567303:ios:09b1ab1d3ca29bda")
    
    # Conjunto de dados de origem da importação.
    BQ_DATASET="nome do conjunto de dados do BigQuery a partir do qual pretende importar" (por exemplo, "com_firebase_demo_IOS")
    
    # Plataforma
    PLATFORM="plataforma da aplicação. ANDROID ou IOS"
    
    # Intervalo de datas pretendido para a execução da migração, incluindo [START_DATE,END_DATE].
    START_DATE=20180324
    END_DATE=20180327
    
    # Não modifique o script abaixo, a menos que saiba o que está a fazer :)
    startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
    enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
    
    # Percorra as datas.
    DATE="$startdate"
    while [ "$DATE" -le "$enddate" ]; do
    
            # Tabela do BigQuery criada a partir dos parâmetros acima.
            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
    
    # FIM DO SCRIPT
    
    
  5. Abra uma nova shell e emita o comando bash migration.sh

 

Esquema de exportação antigo

user_dim

Nome do campo Tipo de dados Descrição
user_dim REGISTO Um registo das dimensões do utilizador.
user_dim.user_id STRING O User ID definido através da API setUserId.
user_dim.first_open_timestamp_micros NÚMERO INTEIRO A hora (em microssegundos) a que o utilizador abriu a aplicação pela primeira vez.
user_dim.user_properties REGISTO Um registo repetido de propriedades do utilizador definidas com a API setUserProperty.
user_dim.user_properties.key STRING O nome da propriedade de utilizador.
user_dim.user_properties.value REGISTO Um registo para informações sobre a propriedade de utilizador.
user_dim.user_properties.value.value REGISTO Um registo para o valor da propriedade do utilizador.
user_dim.user_properties.value.value.string_value STRING O valor de string da propriedade do utilizador.
user_dim.user_properties.value.value.int_value NÚMERO INTEIRO O valor inteiro da propriedade do utilizador.
user_dim.user_properties.value.value.double_value FLUTUANTE O valor duplo da propriedade do utilizador.
user_dim.user_properties.value.set_timestamp_usec NÚMERO INTEIRO A hora (em microssegundos) a que a propriedade do utilizador foi definida pela última vez.
user_dim.user_properties.value.index NÚMERO INTEIRO O índice (0-24) da propriedade de utilizador.
user_dim.device_info REGISTO Um registo das informações do dispositivo.
user_dim.device_info.device_category STRING A categoria do dispositivo (telemóvel, tablet, computador).
user_dim.device_info.mobile_brand_name STRING O nome da marca do dispositivo.
user_dim.device_info.mobile_model_name STRING O nome do modelo do dispositivo.
user_dim.device_info.mobile_marketing_name STRING O nome comercial do dispositivo.
user_dim.device_info.device_model STRING O modelo do dispositivo.
user_dim.device_info.platform_version STRING A versão do SO.
user_dim.device_info.device_id STRING IDFV (apenas presente quando o IDFA não está disponível).
user_dim.device_info.resettable_device_id STRING ID de publicidade/IDFA.
user_dim.device_info.user_default_language STRING O idioma do SO.
user_dim.device_info.device_time_zone_offset_seconds NÚMERO INTEIRO A deslocação de GMT em segundos.
user_dim.device_info.limited_ad_tracking BOOLEANO A definição Controlo de limite para anúncios do dispositivo.
user_dim.geo_info REGISTO Um registo das informações geográficas do utilizador.
user_dim.geo_info.continent STRING O continente de comunicação de eventos, com base no endereço IP.
user_dim.geo_info.country STRING O país de comunicação de eventos, com base no endereço IP.
user_dim.geo_info.region STRING A região de comunicação de eventos, com base no endereço IP.
user_dim.geo_info.city STRING A cidade de comunicação de eventos, com base no endereço IP.
user_dim.app_info REGISTO Um registo de informações na aplicação.
user_dim.app_info.app_version STRING O nome da versão da aplicação (Android) ou a versão curta do pacote.
user_dim.app_info.app_instance_id STRING O ID exclusivo para esta instância da aplicação.
user_dim.app_info.app_store STRING A loja que instalou esta aplicação.
user_dim.app_info.app_platform STRING A plataforma que executa esta aplicação.
user_dim.traffic_source REGISTO Nome da origem de tráfego utilizada para adquirir o utilizador. Este campo não é preenchido em tabelas intradiárias.
user_dim.traffic_source.user_acquired_campaign STRING O nome da campanha de marketing que adquiriu o utilizador. Este campo não é preenchido em tabelas intradiárias.
user_dim.traffic_source.user_acquired_medium STRING O nome do meio (pesquisa paga, pesquisa orgânica, email, etc.) que adquiriu o utilizador. Este campo não é preenchido em tabelas intradiárias.
user_dim.traffic_source.user_acquired_source STRING O nome da rede que adquiriu o utilizador. Este campo não é preenchido em tabelas intradiárias.
user_dim.bundle_info REGISTO Um registo de informações relativas ao pacote em que foram carregados estes eventos.
user_dim.bundle_info.bundle_sequence_id NÚMERO INTEIRO O ID sequencial do pacote em que foram carregados estes eventos.
user_dim.ltv_info REGISTO Um registo de informações de valor do cliente relativas a este utilizador. Este campo não é preenchido em tabelas intradiárias.
user_dim.ltv_info.revenue FLUTUANTE O valor do cliente (receita) deste utilizador. Este campo não é preenchido em tabelas intradiárias.
user_dim.ltv_info.currency STRING O valor do cliente (moeda) deste utilizador. Este campo não é preenchido em tabelas intradiárias.
 

event_dim

Nome do campo Tipo de dados Descrição
event_dim REGISTO Um registo repetido de informações relativas aos eventos neste pacote.
event_dim.date STRING A data em que este evento foi registado (formato AAAAMMDD no fuso horário registado na aplicação).
event_dim.name STRING O nome deste evento.
event_dim.params REGISTO Um registo repetido dos parâmetros associados a este evento.
event_dim.params.key STRING A chave do parâmetro do evento.
event_dim.params.value REGISTO Um registo do valor do parâmetro do evento.
event_dim.params.value.string_value STRING O valor da string do parâmetro do evento.
event_dim.params.value.int_value NÚMERO INTEIRO O valor inteiro do parâmetro do evento.
event_dim.params.value.double_value FLUTUANTE O valor duplo do parâmetro do evento.
event_dim.timestamp_micros NÚMERO INTEIRO A hora (em microssegundos, UTC) a que este evento foi registado no cliente.
event_dim.previous_timestamp_micros NÚMERO INTEIRO A hora (em microssegundos, UTC) a que este evento foi anteriormente registado no cliente.
A informação foi útil?
Como podemos melhorá-la?