Esquema do BigQuery Export

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

Conjuntos de dados

Para cada projeto do Firebase vinculado ao BigQuery, um conjunto de dados exclusivo chamado "analytics_ <property_id>" é adicionado ao seu projeto do BigQuery. O código da propriedade refere-se àquele do Google Analytics, encontrado nas configurações do Google Analytics no Firebase. Cada aplicativo com a exportação do BigQuery ativada exportará os dados para esse conjunto exclusivo.

Tabelas

Em todos os conjuntos de dados, uma tabela é importada para cada dia de exportação. Essas tabelas têm o formato "events_AAAAMMDD". Além disso, uma tabela é importada para eventos recebidos no dia atual.  Ela é chamada de "events_intraday_AAAAMMDD" e é preenchida em tempo real à medida que os eventos são coletados.

Linhas

Cada linha de uma tabela corresponde a um evento exclusivo enviado pelo SDK do Google Analytics.

Colunas

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

 

Nome do campo Tipo de dado Descrição
Aplicativo    
app_info RECORD Um registro das informações no aplicativo.
app_info.id STRING O nome ou o ID do pacote do aplicativo.
app_info.firebase_app_id STRING O código do app do Firebase associado ao aplicativo.
app_info.install_source STRING A loja onde você instalou o aplicativo.
app_info.version STRING O nome da versão (Android) ou versão abreviada do pacote do aplicativo.
Dispositivo    
device RECORD Um registro das informações do dispositivo.
device.category STRING A categoria do dispositivo (smartphone, 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 recuperadas diretamente do sistema operacional.
device.operating_system STRING O sistema operacional do dispositivo.
device.operating_system_version STRING A versão do SO.
device.vendor_id STRING IDFV (presente somente se o IDFA não for coletado).
device.advertising_id STRING Código de publicidade/IDFA.
device.language STRING O idioma do SO.
device.time_zone_offset_seconds INTEGER A diferença do fuso horário em relação ao GMT em segundos.
device.is_limited_ad_tracking BOOLEAN A configuração "Limitar o rastreamento de anúncios" do dispositivo.
Fluxo e plataforma    
stream_id STRING O código numérico do fluxo.
platform STRING A plataforma em que o aplicativo foi criado.
Usuário    
user_first_touch_timestamp INTEGER A data e a hora (em microssegundos) em que o usuário abriu o aplicativo pela primeira vez.
user_id STRING User ID definido pela API setUserId.
user_pseudo_id STRING O código pseudônimo (por exemplo, código da instância do aplicativo) para o usuário.
user_properties RECORD Um registro repetido de propriedades do usuário configurado com a API setUserProperty.
user_properties.key STRING O nome da propriedade do usuário.
user_properties.value RECORD Um registro do valor da propriedade do usuário.
user_properties.value.string_value STRING O valor da string da propriedade do usuário.
user_properties.value.int_value INTEGER O valor com números inteiros da propriedade do usuário.
user_properties.value.double_value FLOAT O dobro do valor da propriedade do usuário.
user_properties.value.float_value FLOAT Este campo não está sendo usado no momento.
user_properties.value.set_timestamp_micros INTEGER A data e a hora (em microssegundos) em que a propriedade do usuário foi configurada pela última vez.
user_ltv RECORD Um registro das informações do valor da vida útil sobre o usuário. Este campo não é preenchido nas tabelas intradiárias.
user_ltv.revenue FLOAT O valor da vida útil (receita) do usuário. Este campo não é preenchido nas tabelas intradiárias.
user_ltv.currency STRING O valor da vida útil (moeda) do usuário. Este campo não é preenchido nas tabelas intradiárias.
Campanha   Observação: a atribuição traffic_source tem como base o último clique em vários canais. Os valores de traffic_source não mudam se o usuário interage com campanhas posteriores à instalação.
traffic_source RECORD Nome da origem de tráfego que conquistou o usuário. Este campo não é preenchido nas tabelas intradiárias.
traffic_source.name STRING Nome da campanha de marketing que conquistou o usuário. Este campo não é preenchido nas tabelas intradiárias.
traffic_source.medium STRING Nome da mídia (pesquisa paga, pesquisa orgânica, e-mail etc.) que conquistou o usuário. Este campo não é preenchido nas tabelas intradiárias.
traffic_source.source STRING Nome da rede que conquistou o usuário. Este campo não é preenchido nas tabelas intradiárias.
Informações geográficas    
geo RECORD Um registro das informações geográficas do usuário.
geo.continent STRING O continente de onde os eventos foram informados, com base no endereço IP.
geo.sub_continent STRING O subcontinente de onde os eventos foram informados, com base no endereço IP.
geo.country STRING O país de onde os eventos foram informados, com base no endereço IP.
geo.region STRING A região de onde os eventos foram informados, com base no endereço IP.
geo.metro STRING A área metropolitana de onde os eventos foram informados, com base no endereço IP.
geo.city STRING A cidade de onde os eventos foram informados, com base no endereço IP.
Evento    
event_date STRING A data em que o evento foi registrado (formato AAAAMMDD no fuso horário registrado do seu aplicativo).
event_timestamp INTEGER A hora (em microssegundos, UTC) em que o evento foi registrado no cliente.
event_previous_timestamp INTEGER A hora (em microssegundos, UTC) em que o evento foi registrado anteriormente no cliente.
event_name STRING O nome do evento.
event_params RECORD Um registro repetido dos parâmetros associados a este evento.
event_params.key STRING A chave do parâmetro do evento.
event_params.value RECORD Um registro 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 INTEGER O valor com números inteiros do parâmetro do evento.
event_params.value.double_value FLOAT O dobro do valor do parâmetro do evento.
event_params.value.float_value FLOAT O valor flutuante do parâmetro do evento.  Este campo não está sendo usado no momento.
event_value_in_usd FLOAT O valor convertido em moeda (em USD) do parâmetro "value" do evento.
event_bundle_sequence_id INTEGER O código sequencial do pacote que recebeu o upload destes eventos.
event_server_timestamp_offset INTEGER Diferença da data e hora entre o tempo de coleta e o tempo de upload em microssegundos.
Web    
web_info RECORD Um registro de informações para dados da Web.
web_info.hostname STRING O nome do host associado ao evento registrado.
web_info.browser STRING O navegador em que o usuário visualizou o conteúdo.
web_info.browser_version STRING A versão do navegador em que o usuário visualizou o conteúdo.

 

 

Use esse script para migrar os conjuntos de dados do BigQuery do antigo esquema de exportação para o novo.
  1. Faça login no Console do Cloud Platform > página "Gerenciar recursos".
  2. Abra o projeto cujos dados você quer migrar e clique em Ativar o Google Cloud Shell na parte superior da página.
  3. Quando o shell for aberto, copie o script abaixo em um arquivo chamado migration_script.sql:
    1. Execute o comando cat > migration_script.sql.
    2. Copie e cole o script abaixo no shell.
    3. Pressione Ctrl + D para salvar 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 um novo shell e copie o script bash abaixo em um arquivo chamado migration.sh:
    1. Execute o comando cat > migration.sh.
    2. Copie e cole o script abaixo no shell.
    3. Pressione Ctrl + D para salvar e sair.
    Modifique o script a seguir para incluir o código da propriedade do Google Analytics, o código do projeto do BigQuery, o código do aplicativo do Firebase, o nome do conjunto de dados do BigQuery e as datas de início e término das informações desejadas.
    Script (migration.sh):
    # Código da propriedade do Google Analytics associado ao projeto. Pode ser encontrado nas configurações do Google Analytics no Firebase.
    PROPERTY_ID = código da sua propriedade do Google Analytics
    
    # Projeto do BigQuery Export.
    BQ_PROJECT_ID = "código do seu projeto do BigQuery" (por exemplo, "firebase-public-project")
    
    # Código do app do Firebase associado ao aplicativo.
    FIREBASE_APP_ID="código do seu app do Firebase" (por exemplo, "1:300830567303:ios:09b1ab1d3ca29bda")
    
    # Conjunto de dados que será usado para importação.
    BQ_DATASET="nome do conjunto de dados do BigQuery que você quer usar para importação" (por exemplo, "com_firebase_demo_IOS")
    
    # Plataforma
    PLATFORM="plataforma do aplicativo. ANDROID ou IOS"
    
    # Período em que você executará a migração, incluindo [START_DATE,END_DATE].
    START_DATE=20180324
    END_DATE=20180327
    
    # Não modifique o script abaixo, a menos que você saiba o que está fazendo :)
    startdate=$(date -d"$START_DATE"  +%Y%m%d) || exit -1
    enddate=$(date -d"$END_DATE"  +%Y%m%d) || exit -1
    
    # Faça testes com 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 um novo shell e execute o comando bash migration.sh.

 

Esquema antigo de exportação

user_dim

Nome do campo Tipo de dado Descrição
user_dim RECORD Um registro das dimensões do usuário.
user_dim.user_id STRING User ID definido pela API setUserId.
user_dim.first_open_timestamp_micros INTEGER A data e a hora (em microssegundos) em que o usuário abriu o aplicativo pela primeira vez.
user_dim.user_properties RECORD Um registro repetido de propriedades do usuário configurado com a API setUserProperty.
user_dim.user_properties.key STRING O nome da propriedade do usuário.
user_dim.user_properties.value RECORD Um registro das informações sobre a propriedade do usuário.
user_dim.user_properties.value.value RECORD Um registro do valor da propriedade do usuário.
user_dim.user_properties.value.value.string_value STRING O valor da string da propriedade do usuário.
user_dim.user_properties.value.value.int_value INTEGER O valor com números inteiros da propriedade do usuário.
user_dim.user_properties.value.value.double_value VARIÁVEL O dobro do valor da propriedade do usuário.
user_dim.user_properties.value.set_timestamp_usec INTEGER A data e a hora (em microssegundos) em que a propriedade do usuário foi configurada pela última vez.
user_dim.user_properties.value.index INTEGER O índice (de 0 a 24) da propriedade do usuário.
user_dim.device_info RECORD Um registro das informações do dispositivo.
user_dim.device_info.device_category STRING A categoria do dispositivo (smartphone, 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 (apresentar somente se o IDFA não estiver disponível).
user_dim.device_info.resettable_device_id STRING Código de publicidade/IDFA.
user_dim.device_info.user_default_language STRING O idioma do SO.
user_dim.device_info.device_time_zone_offset_seconds INTEGER A diferença do fuso horário em relação ao GMT em segundos.
user_dim.device_info.limited_ad_tracking BOOLEAN A configuração "Limitar o rastreamento de anúncios" do dispositivo.
user_dim.geo_info RECORD Um registro das informações geográficas do usuário.
user_dim.geo_info.continent STRING O continente de onde os eventos foram informados, com base no endereço IP.
user_dim.geo_info.country STRING O país de onde os eventos foram informados, com base no endereço IP.
user_dim.geo_info.region STRING A região de onde os eventos foram informados, com base no endereço IP.
user_dim.geo_info.city STRING A cidade de onde os eventos foram informados, com base no endereço IP.
user_dim.app_info RECORD Um registro das informações no aplicativo.
user_dim.app_info.app_version STRING O nome da versão (Android) ou versão abreviada do pacote do aplicativo.
user_dim.app_info.app_instance_id STRING O código exclusivo desta instância do aplicativo.
user_dim.app_info.app_store STRING A loja que instalou este aplicativo.
user_dim.app_info.app_platform STRING A plataforma na qual o aplicativo está sendo executado.
user_dim.traffic_source RECORD Nome da origem de tráfego usada para conquistar o usuário. Este campo não é preenchido nas tabelas intradiárias.
user_dim.traffic_source.user_acquired_campaign STRING O nome da campanha de marketing que conquistou o usuário. Este campo não é preenchido nas tabelas intradiárias.
user_dim.traffic_source.user_acquired_medium STRING O nome do meio (pesquisa paga, pesquisa orgânica, e-mail etc.) usado para conquistar o cliente. Este campo não é preenchido nas tabelas intradiárias.
user_dim.traffic_source.user_acquired_source STRING O nome da rede que conquistou o usuário. Este campo não é preenchido nas tabelas intradiárias.
user_dim.bundle_info RECORD Um registro das informações relacionadas ao pacote que recebeu o upload destes eventos.
user_dim.bundle_info.bundle_sequence_id INTEGER O código sequencial do pacote que recebeu o upload destes eventos.
user_dim.ltv_info RECORD Um registro das informações de "Valor da vida útil" sobre este usuário. Este campo não é preenchido nas tabelas intradiárias.
user_dim.ltv_info.revenue VARIÁVEL O "Valor da vida útil" (receita) deste usuário. Este campo não é preenchido nas tabelas intradiárias.
user_dim.ltv_info.currency STRING O "Valor da vida útil" (moeda) deste usuário. Este campo não é preenchido nas tabelas intradiárias.
 

event_dim

Nome do campo Tipo de dado Descrição
event_dim RECORD Um registro repetido das informações relacionadas aos eventos deste pacote.
event_dim.date STRING A data na qual o evento foi registrado (em formato AAAAMMDD no fuso horário registrado do seu aplicativo.)
event_dim.name STRING O nome deste evento.
event_dim.params RECORD Um registro repetido dos parâmetros associados a este evento.
event_dim.params.key STRING A chave do parâmetro do evento.
event_dim.params.value RECORD Um registro 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 INTEGER O valor com números inteiros do parâmetro do evento.
event_dim.params.value.double_value VARIÁVEL O dobro do valor do parâmetro do evento.
event_dim.timestamp_micros INTEGER A hora (em microssegundos, UTC) em que o evento foi registrado no cliente.
event_dim.previous_timestamp_micros INTEGER A hora (em microssegundos, UTC) em que o evento foi registrado anteriormente no cliente.
Isso foi útil?
Como podemos melhorá-lo?