Вы можете экспортировать данные Performance Monitoring из приложений Apple и Android в BigQuery для дальнейшего анализа. BigQuery позволяет анализировать данные с помощью BigQuery SQL, экспортировать их в другой облачный сервис и даже использовать их для собственных моделей машинного обучения.
Включить экспорт BigQuery
- Перейдите на страницу «Интеграции» в консоли Firebase , затем нажмите «Ссылка» на карточке BigQuery . 
- Следуйте инструкциям на экране, чтобы включить BigQuery . - При включении экспорта BigQuery для Performance Monitoring происходит следующее: - Firebase экспортирует копию ваших данных в BigQuery . Первоначальное распространение данных для экспорта может занять до 48 часов. - Вы можете вручную запланировать заполнение данных за последние 30 дней или на самую последнюю дату, когда вы включили экспорт BigQuery (в зависимости от того, что наступило позже).
 
- После создания набора данных его местоположение изменить нельзя, но вы можете скопировать его в другое место или вручную переместить (создать заново). Подробнее см. в разделе Изменение местоположения набора данных . 
- Firebase настраивает регулярную синхронизацию данных из вашего проекта Firebase с BigQuery . Эти ежедневные операции экспорта обычно завершаются в течение 24 часов после запланированного времени. 
- По умолчанию все приложения в вашем проекте связаны с BigQuery . Все приложения, которые вы позже добавите в проект, автоматически связаны с BigQuery . Вы можете управлять тем, какие приложения отправляют данные . 
 
Чтобы деактивировать экспорт BigQuery , отключите свой проект в консоли Firebase .
Какие данные экспортируются в BigQuery ?
Для каждого приложения в проекте при экспорте создаётся таблица, включающая все зафиксированные события производительности. Каждая строка в таблице представляет собой одно событие производительности, которое может быть одним из следующих:
- Трассировка длительности — трассировки, которые по умолчанию собирают метрику «длительности», которая включает запуск приложения, приложение на переднем плане и приложение в фоновом режиме, а также любые пользовательские трассировки кода, инструментированные разработчиком. -  event_type—DURATION_TRACE
-  event_nameсовпадает с именем трассировки
 
-  
- Метрика трассировки — пользовательские метрики, связанные с пользовательскими трассировками кода, инструментированными разработчиком. -  event_type—TRACE_METRIC
-  event_name— имя метрики
-  parent_trace_name— имя трассы, содержащей эту метрику
 
-  
- Трассировка экрана — трассировки, охватывающие весь жизненный цикл экрана (трассировки рендеринга экрана) -  event_type—SCREEN_TRACE
-  event_name— это префикс_st_плюс фактическое имя экрана
 
-  
- Сетевой запрос — трассировки, охватывающие весь жизненный цикл сетевого запроса (трассировки сетевых запросов HTTP) -  event_type—NETWORK_REQUEST
-  event_name— это категоризированный шаблон URL-адреса сетевого запроса
 
-  
Каждое событие производительности содержит атрибуты события (такие как страна и оператор клиентского устройства), а также информацию, специфичную для события:
-  Трассировки длительности, метрики трассировки и трассировки экрана содержат trace_info
-  Метрики трассировки содержат trace_info.metric_info
-  Трассировки экрана содержат trace_info.screen_info
-  Сетевые трассировки содержат network_info
Подробная схема данных
| Имя поля | Тип | Описание | 
|---|---|---|
| event_timestamp | метка времени | Метка времени с момента начала события на клиентском устройстве (начало трассировки, запуск сети и т. д.) | 
| версия_отображения_приложения | нить | Отобразить версию приложения (например, «4.1.7») 
 | 
| версия_сборки_приложения | нить | Версия сборки приложения (например, «1523456») 
 | 
| версия_ос | нить | Версия ОС клиентского устройства 
 | 
| имя_устройства | нить | Название клиентского устройства (например, «Google Pixel») | 
| страна | нить | Двухбуквенный код страны, в которой произошло событие (например, «US» или «ZZ» для неизвестной страны) | 
| перевозчик | нить | Носитель клиентского устройства | 
| тип_радио | нить | Тип активного радио на момент события (например, «WIFI»). | 
| пользовательские_атрибуты | МАССИВ<ЗАПИСЬ> | Все пользовательские атрибуты, прикрепленные к этому событию | 
| пользовательские_атрибуты.ключ | нить | Ключ пользовательского атрибута | 
| пользовательские_атрибуты.значение | нить | Значение настраиваемого атрибута | 
| тип_события | нить | Тип события; возможные значения: 
 | 
| имя_события | нить | Название мероприятия 
 | 
| parent_trace_name | нить | Имя родительского следа, который несет метрику следа Присутствует только для TRACE_METRIC | 
| trace_info | ЗАПИСЫВАТЬ | Присутствует только для DURATION_TRACE,SCREEN_TRACEиTRACE_METRIC | 
| trace_info.duration_us | int64 | 
 | 
| trace_info.screen_info | ЗАПИСЫВАТЬ | Присутствует только для SCREEN_TRACE | 
| trace_info.screen_info.slow_frame_ratio | float64 | Коэффициент медленных кадров для этой трассировки экрана, от 0 до 1 (например, значение 0,05 означает, что 5% кадров для этого экземпляра экрана потребовали более 16 мс для рендеринга) | 
| trace_info.screen_info.frozen_frame_ratio | float64 | Соотношение замороженных кадров для этой трассировки экрана, от 0 до 1 (например, значение 0,05 означает, что 5% кадров для этого экземпляра экрана потребовали более 700 мс для рендеринга) | 
| trace_info.metric_info | ЗАПИСЫВАТЬ | Присутствует только для TRACE_METRIC | 
| trace_info.metric_info.metric_value | int64 | Значение метрики трассировки | 
| сетевая_информация | ЗАПИСЫВАТЬ | Присутствует только для NETWORK_REQUEST | 
| network_info.response_code | int64 | Код ответа HTTP для сетевого ответа (например, 200, 404) | 
| network_info.response_mime_type | нить | Тип MIME сетевого ответа (например, «text/html») | 
| network_info.request_http_method | нить | HTTP-метод сетевого запроса (например, «GET» или «POST») | 
| network_info.request_payload_bytes | int64 | Размер полезной нагрузки сетевого запроса Единица измерения: байт | 
| network_info.response_payload_bytes | int64 | Размер полезной нагрузки сетевого ответа Единица измерения: байт | 
| network_info.request_completed_time_us | int64 | Микросекунды после event_timestamp, когда отправка сетевого запроса завершенаЕдиница измерения: микросекунда | 
| network_info.response_initiated_time_us | int64 | Микросекунды после event_timestampпри инициировании сетевого ответаЕдиница измерения: микросекунда | 
| network_info.response_completed_time_us | int64 | Микросекунды после event_timestamp, когда сетевой ответ завершенЕдиница измерения: микросекунда | 
Что можно сделать с экспортированными данными?
В следующих разделах приведены примеры запросов, которые можно выполнить в BigQuery по отношению к экспортированным данным Performance Monitoring .
Сопоставьте данные, отображаемые на консоли.
 Панель управления Firebase агрегирует ежедневные данные в часовом поясе America/Los_Angeles . Чтобы соответствовать тому, что отображается в консоли, функции даты должны явно указывать часовой пояс America/Los_Angeles , иначе функция даты по умолчанию будет использовать UTC .
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;
Посмотреть среднюю задержку запуска приложения по странам
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;
Проверьте соотношение замороженных кадров при различных условиях
Например, вы можете проверить соотношение зависших кадров и количество времени, которое пользователи проводят на каждом экране вашего приложения при использовании разных типов радиосвязи (Wi-Fi, 4G и т. д.).
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;
Вычислить частоту попаданий в кэш при загрузке определенных типов файлов с диска
 В этом анализе предполагается, что вы настроили пользовательскую трассировку кода для загрузки с диска с пользовательским атрибутом с именем file-extension и пользовательской метрикой ( TRACE_METRIC ) с именем cache-hit , которая устанавливается в 1 при попадании в кэш и 0 при промахе кэша.
Например, можно вычислить частоту попаданий в кэш при загрузке PNG-файлов с диска:
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);
Проверьте время суток, когда пользователи отправляют сетевые запросы.
Например, вы можете проверить, в какое время суток пользователи из США отправляют сетевые запросы из вашего приложения:
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;
Берите данные Performance Monitoring с собой куда угодно
Иногда вам нужно получить доступ к данным Performance Monitoring на стороне сервера или передать их стороннему решению. В настоящее время экспорт данных бесплатный.
Вы можете экспортировать свои данные следующими способами:
- Использование веб-интерфейса BigQuery 
- Выполнение команды CLI - bq extract
- Отправка задания на извлечение через API или клиентские библиотеки. 
Ценообразование
Экспорт данных из Performance Monitoring бесплатен, а BigQuery предоставляет щедрые бесплатные лимиты использования. Подробную информацию см. на странице цен BigQuery или в песочнице BigQuery .