Możesz eksportować Performance Monitoring dane z aplikacji na Androida i iOS do BigQuery, aby przeprowadzić dalszą analizę. BigQuery umożliwia analizowanie danych za pomocą BigQuerySQL, eksportowanie ich do innego dostawcy usług w chmurze, a nawet używanie ich w niestandardowych modelach uczenia maszynowego.
Włącz eksportowanie BigQuery
- Otwórz stronę Integracje w konsoli Firebase, a potem kliknij Połącz na karcie BigQuery. 
- Aby włączyć BigQuery, postępuj zgodnie z instrukcjami wyświetlanymi na ekranie. - Gdy włączysz eksportowanie BigQuery na potrzeby Performance Monitoring, nastąpią te zmiany: - Firebase eksportuje kopię Twoich dotychczasowych danych do BigQuery. Początkowe rozpowszechnianie danych na potrzeby eksportu może potrwać do 48 godzin. - Możesz ręcznie zaplanować uzupełnianie danych z okresu do 30 dni wstecz lub z najnowszej daty, w której włączono eksport BigQuery (w zależności od tego, która z tych dat jest późniejsza).
 
- Gdy zbiór danych zostanie utworzony, jego lokalizacji nie można już zmienić. Możesz natomiast skopiować zbiór danych do innej lokalizacji lub go ręcznie przenieść przez ponowne utworzenie tego zbioru w innej lokalizacji. Więcej informacji znajdziesz w artykule Zmiana lokalizacji zbioru danych. 
- Firebase konfiguruje regularne synchronizacje danych z projektu Firebase z BigQuery. Codzienne operacje eksportu zwykle kończą się w ciągu 24 godzin od zaplanowania. 
- Domyślnie wszystkie aplikacje w projekcie są połączone z BigQuery. Wszystkie aplikacje, które dodasz do projektu później, zostaną automatycznie połączone z BigQuery. Możesz określić, które aplikacje mają wysyłać dane. 
 
Aby dezaktywować eksportowanie BigQuery, odłącz projekt w konsoli Firebase.
Jakie dane są eksportowane do BigQuery?
W przypadku każdej aplikacji w projekcie eksport tworzy tabelę zawierającą wszystkie zarejestrowane zdarzenia związane z wydajnością. Każdy wiersz w tabeli to pojedyncze zdarzenie związane ze skutecznością, które może być jednym z tych typów:
- Log czasu trwania – logi, które domyślnie zbierają dane o „czasie trwania”, w tym o uruchamianiu aplikacji, działaniu aplikacji na pierwszym planie i w tle, a także wszelkie logi czasu z niestandardowego kodu, które zostały zaimplementowane przez dewelopera. - event_typeto- DURATION_TRACE
- event_namejest taka sama jak nazwa śledzenia
 
- Dane logów czasu – dane niestandardowe powiązane z logami czasu niestandardowego kodu dodanymi przez programistę. - event_typeto- TRACE_METRIC
- event_nameto nazwa rodzaju danych
- parent_trace_nameto nazwa logu czasu, który zawiera ten wskaźnik.
 
- Ślad ekranu – ślady obejmujące cały okres istnienia ekranu (ślady renderowania ekranu). - event_typeto- SCREEN_TRACE
- event_nameto prefiks- _st_plus rzeczywista nazwa ekranu.
 
- Żądanie sieciowe – logi czasu obejmujące cały okres żądania sieciowego (logi czasu żądań sieciowych HTTP). - event_typeto- NETWORK_REQUEST
- event_nameto skategoryzowany wzorzec adresu URL żądania sieciowego.
 
Każde zdarzenie związane z wydajnością zawiera atrybuty zdarzenia (np. kraj i operator urządzenia klienta), a także informacje specyficzne dla zdarzenia:
- Logi czasu trwania, dane logu czasu i logi ekranu zawierają trace_info
- Dane śledzenia zawierają trace_info.metric_info
- Logi ekranu zawierają trace_info.screen_info
- Logi sieci zawierają network_info
Szczegółowy schemat danych
| Nazwa pola | Typ | Opis | 
|---|---|---|
| event_timestamp | sygnatura czasowa | Sygnatura czasowa od początku epoki, kiedy zdarzenie rozpoczęło się na urządzeniu klienta (początek śledzenia, początek sieci itp.). | 
| app_display_version | ciąg znaków | Wyświetl wersję aplikacji (np. „4.1.7”). 
 | 
| app_build_version | ciąg znaków | Wersja kompilacji aplikacji (np. „1523456”). 
 | 
| os_version | ciąg znaków | Wersja systemu operacyjnego urządzenia klienta 
 | 
| device_name | ciąg znaków | Nazwa urządzenia klienta (np. „Google Pixel”). | 
| kraj | ciąg znaków | Dwuliterowy kod kraju, z którego pochodzi zdarzenie (np. „US” lub „ZZ” w przypadku nieznanego kraju). | 
| przewoźnik | ciąg znaków | Operator urządzenia klienta | 
| radio_type | ciąg znaków | Aktywny typ radia w momencie wystąpienia zdarzenia (np. „WIFI”). | 
| custom_attributes | ARRAY<RECORD> | Wszystkie atrybuty niestandardowe dołączone do tego wydarzenia | 
| custom_attributes.key | ciąg znaków | Klucz atrybutu niestandardowego | 
| custom_attributes.value | ciąg znaków | Wartość atrybutu niestandardowego | 
| event_type | ciąg znaków | Typ zdarzenia. Możliwe wartości: 
 | 
| event_name | ciąg znaków | Nazwa zdarzenia 
 | 
| parent_trace_name | ciąg znaków | Nazwa śladu nadrzędnego, który zawiera dane śladu. Występuje tylko w przypadku TRACE_METRIC | 
| trace_info | REKORD | Występuje tylko w przypadku DURATION_TRACE,SCREEN_TRACEiTRACE_METRIC | 
| trace_info.duration_us | int64 | 
 | 
| trace_info.screen_info | REKORD | Występuje tylko w przypadku parametru SCREEN_TRACE | 
| trace_info.screen_info.slow_frame_ratio | float64 | Odsetek wolnych klatek w tym śladzie ekranu (wartość od 0 do 1). Na przykład wartość 0, 05 oznacza, że wyrenderowanie 5% klatek w tym przypadku ekranu trwało ponad 16 ms. | 
| trace_info.screen_info.frozen_frame_ratio | float64 | Odsetek zablokowanych klatek w tym śladzie ekranu (wartość od 0 do 1). Przykład: wartość 0, 05 oznacza, że renderowanie 5% klatek w tym przypadku ekranu trwało ponad 700 ms. | 
| trace_info.metric_info | REKORD | Występuje tylko w przypadku parametru TRACE_METRIC | 
| trace_info.metric_info.metric_value | int64 | Wartość danych śledzenia | 
| network_info | REKORD | Występuje tylko w przypadku parametru NETWORK_REQUEST | 
| network_info.response_code | int64 | Kod odpowiedzi HTTP dla odpowiedzi sieciowej (np. 200, 404). | 
| network_info.response_mime_type | ciąg znaków | Typ MIME odpowiedzi sieci (np. „text/html”). | 
| network_info.request_http_method | ciąg znaków | Metoda HTTP żądania sieciowego (np. „GET” lub „POST”). | 
| network_info.request_payload_bytes | int64 | Rozmiar ładunku żądania sieciowego Jednostka: bajt | 
| network_info.response_payload_bytes | int64 | Rozmiar ładunku odpowiedzi sieciowej Jednostka: bajt | 
| network_info.request_completed_time_us | int64 | Mikrosekundy po event_timestamp, gdy wysyłanie żądania sieciowego zostało zakończoneJednostka: mikrosekunda | 
| network_info.response_initiated_time_us | int64 | Mikrosekundy po event_timestamp, gdy zainicjowana zostanie odpowiedź sieciJednostka: mikrosekunda | 
| network_info.response_completed_time_us | int64 | Mikrosekundy po event_timestampzakończeniu odpowiedzi sieciJednostka: mikrosekunda | 
Co można zrobić z wyeksportowanymi danymi?
W sekcjach poniżej znajdziesz przykłady zapytań, które możesz uruchomić w BigQuery na wyeksportowanych danych Performance Monitoring.
Dopasowywanie danych widocznych w konsoli
Panel Firebase agreguje dane dzienne w strefie czasowej America/Los_Angeles.
Aby dopasować wyniki do tych wyświetlanych w konsoli, funkcje daty powinny jawnie ustawiać strefę czasową America/Los_Angeles. W przeciwnym razie domyślnie będą używać strefy 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;
Wyświetlanie średniego czasu oczekiwania na uruchomienie aplikacji z podziałem na kraje
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;
Sprawdzanie stosunku zamrożonych klatek w różnych warunkach
Możesz na przykład sprawdzić odsetek zamrożonych klatek oraz czas, jaki użytkownicy spędzają na poszczególnych ekranach aplikacji, gdy korzystają z różnych rodzajów połączeń radiowych (Wi-Fi, 4G itp.).
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;
Obliczanie współczynnika trafień w pamięci podręcznej podczas wczytywania określonych typów plików z dysku
Ta analiza zakłada, że masz instrumentowany niestandardowy log czasu kodu wczytywania z dysku z atrybutem niestandardowym o nazwie file-extension i danymi niestandardowymi (TRACE_METRIC) o nazwie cache-hit, które mają wartość 1 w przypadku trafienia w pamięci podręcznej i 0 w przypadku nietrafienia w pamięci podręcznej.
Możesz na przykład obliczyć współczynnik trafień w pamięci podręcznej podczas wczytywania plików PNG z dysku:
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);
Sprawdzanie, o której porze dnia użytkownicy wysyłają żądania sieciowe
Możesz na przykład sprawdzić, o której godzinie użytkownicy z Polski wysyłają żądania sieciowe z Twojej aplikacji:
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;
Zabierz swoje dane z Performance Monitoring wszędzie
Czasami chcesz uzyskać dostęp do danych Performance Monitoring po stronie serwera lub przesłać je do innego rozwiązania innej firmy. Obecnie eksportowanie danych jest bezpłatne.
Dane możesz wyeksportować:
- Korzystanie z interfejsu internetowego BigQuery 
- Uruchamianie polecenia interfejsu wiersza poleceń - bq extract
- Przesyłanie zadania wyodrębniania za pomocą interfejsu API lub bibliotek klienta. 
Ceny
Eksportowanie danych z Performance Monitoring jest bezpłatne, a BigQuery zapewnia duże bezpłatne limity wykorzystania. Szczegółowe informacje znajdziesz w cenniku lub w BigQuerypiaskownicy.BigQuery