É possível exportar dados do Performance Monitoring de apps para Apple e Android para o BigQuery para análise posterior. Com o BigQuery, é possível fazer análises usando o BigQuery SQL, exportar os dados para outro provedor de nuvem ou usá-los para seus modelos personalizados de ML.
Ativar a exportação do BigQuery
- Acesse a página Integrações no console do Firebase e, em seguida, clique em Link no card do BigQuery. 
- Siga as instruções na tela para ativar o BigQuery. - Quando você ativa a exportação do BigQuery para o Performance Monitoring, acontece isto: - O Firebase exporta uma cópia dos dados existentes para o BigQuery. A propagação inicial dos dados para exportação pode levar até 48 horas para ser concluída. - É possível configurar manualmente o preenchimento de dados dos últimos 30 dias ou da data mais recente em que você ativou a exportação do BigQuery (o que for mais recente).
 
- Após a criação do banco de dados, o local não pode ser alterado, mas é possível mover (recriar) ou copiar o conjunto de dados para um local diferente. Para saber mais, consulte Mudar local do conjunto de dados. 
- O Firebase configura sincronizações regulares dos dados do projeto do Firebase para o BigQuery. Essas operações de exportação diárias geralmente terminam em 24 horas depois de serem programadas. 
- Por padrão, todos os apps no projeto são vinculados ao BigQuery. Todos os apps adicionados mais tarde ao projeto serão vinculados automaticamente ao BigQuery. É possível gerenciar quais apps enviam dados. 
 
Para desativar a exportação do BigQuery, desvincule seu projeto no console do Firebase.
Quais dados são exportados para o BigQuery?
Para cada aplicativo no projeto, a exportação cria uma tabela que inclui todos os eventos de desempenho registrados. Cada linha na tabela é um evento único de desempenho que pode ser de um dos seguintes tipos:
- Trace de duração: traces que coletam, por padrão, a métrica de "duração", que inclui inicialização do app, app em primeiro plano e app em segundo plano, bem como qualquer trace de código personalizado instrumentado pelo desenvolvedor. - event_typeé- DURATION_TRACE
- event_nameé igual ao nome do trace
 
- Métrica de trace: métricas personalizadas associadas aos traces de código personalizados instrumentados pelo desenvolvedor. - event_typeé- TRACE_METRIC
- event_nameé o nome da métrica
- parent_trace_nameé o nome do trace que contém essa métrica
 
- Trace de tela: traces que abrangem o ciclo de vida de uma tela (traces de renderização de tela). - event_typeé- SCREEN_TRACE
- event_nameé um prefixo- _st_junto do nome real da tela
 
- Solicitação de rede: traces que abrangem o ciclo de vida de uma solicitação de rede (traces de solicitação de rede HTTP). - event_typeé- NETWORK_REQUEST
- event_nameé o padrão categorizado do URL de solicitação de rede
 
Cada evento de desempenho contém atributos do evento, como país e operadora do dispositivo cliente, além de informações específicas do evento:
- Trace de duração, métricas de trace e traces de tela contêm trace_info
- As métricas de traces contêm trace_info.metric_info
- Os traces de tela contêm trace_info.screen_info
- Os traces de rede contêm network_info
Esquema detalhado de dados
| Nome do campo | Tipo | Descrição | 
|---|---|---|
| event_timestamp | timestamp | Carimbo de data/hora que marca o período em que o evento foi iniciado no dispositivo cliente (início da geração de trace, início da rede etc.) | 
| app_display_version | string | A versão de exibição do aplicativo (por exemplo, "4.1.7") 
 | 
| app_build_version | string | A versão do aplicativo (por exemplo, "1523456") 
 | 
| os_version | string | A versão do SO do dispositivo cliente 
 | 
| device_name | string | Nome do dispositivo cliente (por exemplo, "Google Pixel") | 
| país | string | Código de duas letras do país em que o evento ocorreu (por exemplo, "US" para os EUA, ou "ZZ" para país desconhecido) | 
| operadora | string | Operadora do dispositivo cliente | 
| radio_type | string | Tipo de rádio ativo quando o evento ocorreu (por exemplo, "WIFI") | 
| custom_attributes | ARRAY<RECORD> | Todos os atributos personalizados associados a este evento | 
| custom_attributes.key | string | Chave do atributo personalizado | 
| custom_attributes.value | string | Valor do atributo personalizado | 
| event_type | string | Tipo do evento e valores possíveis: 
 | 
| event_name | string | Nome do evento 
 | 
| parent_trace_name | string | Nome do trace pai que transporta a métrica de trace Presente apenas para TRACE_METRIC | 
| trace_info | RECORD | Apenas presente para DURATION_TRACE,SCREEN_TRACEeTRACE_METRIC | 
| trace_info.duration_us | int64 | 
 | 
| trace_info.screen_info | RECORD | Presente apenas para SCREEN_TRACE | 
| trace_info.screen_info.slow_frame_ratio | float64 | A proporção de frames lentos para este trace de tela, entre 0 e 1 (por exemplo, um valor de 0,05 significa que 5% dos frames para essa instância de tela levaram mais de 16 ms para serem renderizados) | 
| trace_info.screen_info.frozen_frame_ratio | float64 | A proporção de frames congelados para este trace de tela, entre 0 e 1 (por exemplo, um valor de 0,05 significa que 5% dos frames para essa instância de tela levaram mais de 700 ms para serem renderizados) | 
| trace_info.metric_info | RECORD | Apenas presente para TRACE_METRIC | 
| trace_info.metric_info.metric_value | int64 | Valor da métrica de trace | 
| network_info | RECORD | Apenas presente para NETWORK_REQUEST | 
| network_info.response_code | int64 | Código de resposta HTTP para a resposta de rede. Por exemplo, 200 ou 404 | 
| network_info.response_mime_type | string | Resposta de rede tipo MIME, por exemplo, "text/html" | 
| network_info.request_http_method | string | Método HTTP da solicitação de rede, por exemplo, "GET" ou "POST" | 
| network_info.request_payload_bytes | int64 | Tamanho do payload de solicitação de rede Unidade: byte | 
| network_info.response_payload_bytes | int64 | Tamanho do payload de resposta de rede Unidade: byte | 
| network_info.request_completed_time_us | int64 | Microssegundos após event_timestampquando o envio da solicitação de rede estiver concluídoUnidade: microssegundo | 
| network_info.response_initiated_time_us | int64 | Microssegundos após event_timestampquando a resposta da rede for iniciadaUnidade: microssegundo | 
| network_info.response_completed_time_us | int64 | Microssegundos após event_timestampquando a resposta de rede estiver completaUnidade: microssegundo | 
O que você pode fazer com os dados exportados?
As seções a seguir oferecem exemplos de consultas que podem ser executadas no BigQuery em comparação com os dados exportados do Performance Monitoring.
Correlacionar os dados mostrados no console
O painel do Firebase agrega dados diários no fuso horário America/Los_Angeles.
Para corresponder ao que foi visto no console, as funções de data precisam definir explicitamente
America/Los_Angeles como o fuso horário. Caso contrário, a função de data vai
usar o UTC como padrão.
SELECT DATE(event_timestamp, 'America/Los_Angeles') AS daily_date, APPROX_QUANTILES(trace_info.duration_us, 100)[OFFSET(90)] / 1000000 AS p90_seconds, FROM `TABLE_NAME` WHERE DATE(event_timestamp, 'America/Los_Angeles') >= DATE_SUB( PARSE_DATE('%Y%m%d', 'YYYY-MM-DD'), INTERVAL 7 DAY) AND DATE(event_timestamp, 'America/Los_Angeles') <= PARSE_DATE('%Y%m%d', 'YYYY-MM-DD') AND event_name = '_app_start' GROUP BY 1 ORDER BY 1 DESC;
Visualizar a média da latência de início de aplicativo filtrada por país
SELECT AVG(trace_info.duration_us), country FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "DURATION_TRACE" AND event_name = "_app_start" GROUP BY 2;
Verifique a proporção de frames congelados em várias condições
Por exemplo, é possível verificar a proporção de frames congelados junto com o tempo que os usuários passam em cada tela do seu aplicativo quando estão em diferentes tipos de rádio (Wi-Fi, 4G etc.).
SELECT AVG(trace_info.duration_us / 1000000) AS seconds_on_screen, AVG(trace_info.screen_info.frozen_frame_ratio) AS frozen_frame_ratio, event_name, radio_type FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "SCREEN_TRACE" GROUP BY event_name, radio_type ORDER BY event_name, radio_type;
Calcular a taxa de ocorrência em cache ao carregar certos tipos de arquivos a partir do disco
Esta análise pressupõe que você instrumentou um trace de código personalizado para ser carregado a partir do disco
com um atributo personalizado denominado file-extension e uma métrica personalizada (um
 TRACE_METRIC) denominada cache-hit que está definida como 1 em casos de ocorrência em cache e como 0
em casos de ausência no cache.
Por exemplo, é possível calcular a taxa de ocorrência em cache ao carregar arquivos PNG a partir do disco:
SELECT AVG(trace_info.metric_info.metric_value) AS cache_hit_rate FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "TRACE_METRIC" AND event_name = "cache-hit" AND parent_trace_name = "loadFromDisk" AND STRUCT("file-extension", "png") IN UNNEST(custom_attributes);
Verificar a hora do dia em que os usuários emitem solicitações de rede
Por exemplo, é possível verificar a hora do dia em que os usuários dos Estados Unidos emitem solicitações de rede do seu app:
SELECT count(1) AS hourly_count, EXTRACT(HOUR FROM event_timestamp) AS hour_of_day FROM `TABLE_NAME` WHERE _PARTITIONTIME > TIMESTAMP("YYYY-MM-DD") AND event_type = "NETWORK_REQUEST" AND country = "US" GROUP BY 2 ORDER BY 2;
Levar os dados do Performance Monitoring para qualquer lugar
Às vezes, você quer acessar os dados do Performance Monitoring do lado do servidor ou enviá-los para outra solução de terceiros. No momento, não há cobrança para exportação de dados.
É possível exportar seus dados ao:
- Como usar a IU da Web do BigQuery 
- executar o comando - bq extractda CLI;
- enviar um job de extração pela API ou por bibliotecas do cliente. 
Preços
Não há custo financeiro para exportar dados do Performance Monitoring, e o BigQuery fornece limites generosos de uso sem custos. Para mais informações, consulte preços do BigQuery ou o sandbox do BigQuery.