BigQuery'deki dışa aktarılan veriler üzerinde SQL sorguları çalıştırma

Crashlytics ve (isteğe bağlı olarak) Firebase oturum verilerinizi BigQuery'ya aktardıktan sonra verilerle çalışmaya başlayabilirsiniz:

  • SQL sorgularını kullanarak verileri analiz etme
    Özel raporlar ve özetler oluşturmak için Crashlytics verilerinizde sorgular çalıştırabilirsiniz. Bu tür özel raporlar Firebase Console'un Crashlytics kontrol panelinde bulunmadığından kilitlenme verilerini analiz etmenize ve anlamanıza yardımcı olabilir. Bu sayfanın ilerleyen bölümlerinde yer alan örnek sorgular koleksiyonuna bakın.

  • Farklı veri kümelerindeki verileri birleştirme
    Örneğin, Crashlytics veri dışa aktarma işlemini ayarlarken Firebase oturum verilerini dışa aktarmayı seçerseniz kilitlenme sorunu yaşamayan kullanıcılar ve kilitlenme sorunu yaşanmayan oturum sayısı hakkında daha fazla bilgi edinebilirsiniz (örnek sorguya bakın). Ayrıca, çeşitli Firebase ürünlerinden (ör. Performance Monitoring) veya Google Analytics'ten veri aktarabilir, ardından bu verileri BigQuery'te Crashlytics verilerinizle birleştirip analiz edebilirsiniz.

  • Görünüm oluşturma
    BigQuery kullanıcı arayüzünü kullanarak SQL sorgusuyla tanımlanan sanal bir tablo olan görünüm oluşturabilirsiniz. Farklı görünüm türleri ve bunların nasıl oluşturulacağı hakkında ayrıntılı talimatlar için BigQuery belgelerine bakın.

Veri kümesi şeması hakkında ayrıntılı bilgi için BigQuery'te dışa aktarılan veriler için veri kümesi şeması başlıklı makaleyi inceleyin.

BigQuery SQL hakkında bilgi edinin

Crashlytics verileri için örnek sorgular

Bu bölümde, dışa aktarılan Crashlytics verileriniz ve Firebase oturum verilerinizle BigQuery SQL'i nasıl kullanabileceğinizi gösteren bazı örnek durumlar ve örnek sorgular verilmiştir.

1. örnek: Firebase oturum verilerini kullanarak kilitlenme içermeyen metrikleri hesaplama

En yeni sürümünüzde, kritik kullanıcı yolculuğundaki (CUJ) kilitlenmeleri gidermek için uygulamanızda önemli bir yenileme yaptınız. Kullanıcılardan çok iyi yorumlar aldınız ancak uygulamanızın eskisinden daha kararlı olduğuna dair nicel kanıtlar istiyorsunuz.

Kilitlenme yaşanmayan oturum metrikleri bu bilgileri sağlamaya yardımcı olabilir. Bu metrikler, uygulamanızın genel durumunu anlamanıza yardımcı olan önemli ölçümlerdir. Firebase oturum verileri ve Crashlytics etkinlikleriyle bu metrikleri temel bir sorgu kullanarak hesaplayabilirsiniz.

Aşağıda bir Android uygulaması için örnek sorgular verilmiştir. iOS uygulaması için paket kimliğini ve IOS değerini (paket adı ve ANDROID yerine) kullanın.

Belirli bir sürüm için kilitlenme sorunu yaşamayan kullanıcılar:

SELECT
  TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date,
  (1 - (COUNT (DISTINCT installation_uuid) / COUNT (DISTINCT instance_id))) AS CFU
FROM
  `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions
LEFT JOIN
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics
ON
  TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY)
WHERE
  crashlytics.error_type="FATAL"
  AND crashlytics.application.display_version="APP_VERSION"
  AND sessions.application.display_version = "APP_VERSION"
GROUP BY
  event_date
ORDER BY
  event_date

Geçen hafta (son 168 saat) içinde kilitlenme sorunu yaşanmayan oturum sayısı:

SELECT
  TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY) AS event_date,
  (1 - (COUNT (DISTINCT crashlytics.firebase_session_id) / COUNT (DISTINCT sessions.session_id))) AS CFS
FROM
  `PROJECT_ID.firebase_sessions.PACKAGE_NAME_ANDROID` AS sessions
LEFT JOIN
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` AS crashlytics
ON
  TIMESTAMP_TRUNC(sessions.event_timestamp,DAY) = TIMESTAMP_TRUNC(crashlytics.event_timestamp,DAY)
WHERE
  crashlytics.error_type="FATAL" AND _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND _PARTITIONTIME < CURRENT_TIMESTAMP()
GROUP BY
  event_date
ORDER BY
  event_date

2. örnek: Günlük kilitlenme sayısı

Mümkün olduğunca çok sayıda hatayı düzeltmek için çalıştıktan sonra ekibinizin yeni fotoğraf paylaşım uygulamanızı kullanıma sunmaya hazır olduğunu düşünüyorsunuz. Ancak bunu yapmadan önce, hata avının uygulamayı zaman içinde daha kararlı hale getirdiğinden emin olmak için son bir ayda günlük kilitlenme sayısını kontrol etmek istiyorsunuz.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
 `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT 30;

3. örnek: En yaygın kilitlenmeleri bulma

Üretim planlarına doğru şekilde öncelik vermek için uygulamanızda en yaygın görülen 10 kilitlenmeyi bulmak istiyorsunuz. İlgili veri noktalarını sağlayan bir sorgu oluşturuyorsunuz.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT
  DISTINCT issue_id,
  COUNT(DISTINCT event_id) AS number_of_crashes,
  COUNT(DISTINCT installation_uuid) AS number_of_impacted_user,
  blame_frame.file,
  blame_frame.line
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(),INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  issue_id,
  blame_frame.file,
  blame_frame.line
ORDER BY
  number_of_crashes DESC
LIMIT 10;

4. örnek: En çok kilitlenen 10 cihaz

Sonbahar, yeni telefon sezonu. Şirketiniz, bu durumun özellikle Android için yeni cihazlara özgü sorunların ortaya çıkacağı bir dönemin başlangıcı olduğunu biliyor. Olası uyumluluk sorunlarının önüne geçmek için geçen hafta (168 saat) en çok kilitlenen 10 cihazı belirleyen bir sorgu oluşturuyorsunuz.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT
  device.model,
COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  event_timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 168 HOUR)
  AND event_timestamp < CURRENT_TIMESTAMP()
GROUP BY
  device.model
ORDER BY
  number_of_crashes DESC
LIMIT 10;

5. örnek: Özel anahtara göre filtreleme

Oyununuzun en çok hangi seviyesinde kilitlenme yaşandığını öğrenmek isteyen bir oyun geliştiricisi olduğunuzu varsayalım.

Bu istatistiği izlemek için current_level adında özel bir Crashlytics anahtarı (iOS+ | Android | Flutter | Unity ) ayarlayıp kullanıcı her yeni seviyeye ulaştığında bu anahtarı güncellersiniz.

Swift

Crashlytics.sharedInstance().setIntValue(3, forKey: "current_level");

Objective-C

CrashlyticsKit setIntValue:3 forKey:@"current_level";

Java

Crashlytics.setInt("current_level", 3);

BigQuery hizmetine aktardığınız verilerdeki bu anahtarı kullanarak her kilitlenme etkinliğiyle ilişkili current_level değerlerinin dağılımını raporlayan bir sorgu yazabilirsiniz.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT
COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

6. örnek: Kullanıcı kimliklerini ayıklama

Erken erişim kapsamında bir Android uygulamanız var. Kullanıcılarınızın çoğu uygulamayı beğeniyor ancak üç kullanıcı, normalden fazla kilitlenme sorunu yaşadı. Sorunun kaynağını bulmak için kullanıcı kimliklerini kullanarak bu kullanıcıların tüm kilitlenme etkinliklerini çeken bir sorgu yazarsınız.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT *
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  user.id IN ("USER_ID_1", "USER_ID_2", "USER_ID_3")
ORDER BY
  user.id
 

7. örnek: Belirli bir kilitlenme sorunu yaşayan tüm kullanıcıları bulma

Ekibiniz yanlışlıkla bir grup beta test kullanıcısına kritik bir hata içeren sürüm yayınladı. Ekibiniz, yukarıdaki "En yaygın kilitlenmeleri bulma" örneğindeki sorguyu kullanarak belirli kilitlenme sorunu kimliğini belirleyebildi. Ekibiniz, bu kilitlenmeden etkilenen uygulama kullanıcılarının listesini çıkarmak için bir sorgu çalıştırmak istiyor.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT user.id as user_id
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`
WHERE
  issue_id = "ISSUE_ID"
  AND application.display_version = "APP_VERSION"
  AND user.id != ""
ORDER BY
  user.id;

8. örnek: Kilitlenme sorunundan etkilenen kullanıcı sayısının ülkeye göre dökümü

Ekibiniz, yeni bir sürümün kullanıma sunulması sırasında kritik bir hata tespit etti. Belirli kilitlenme sorunu kimliğini belirlemek için yukarıdaki "En yaygın kilitlenmeleri bulma" örneğindeki sorguyu kullanabildiniz. Ekibiniz, bu kilitlenmenin dünyanın farklı ülkelerindeki kullanıcıları da etkileyip etkilemediğini görmek istiyor.

Bu sorguyu yazmak için ekibinizin aşağıdakileri yapması gerekir:

  1. Google Analytics verilerinin BigQuery ürününe aktarılmasını etkinleştirin. Proje verilerini BigQuery'ye aktarma başlıklı makaleyi inceleyin.

  2. Uygulamanızı hem Google Analytics SDK'sına hem de Crashlytics SDK'sına kullanıcı kimliği iletecek şekilde güncelleyin.

    Swift

    Crashlytics.sharedInstance().setUserIdentifier("123456789");
    Analytics.setUserID("123456789");
    

    Objective-C

    CrashlyticsKit setUserIdentifier:@"123456789";
    FIRAnalytics setUserID:@"12345678 9";
    

    Java

    Crashlytics.setUserIdentifier("123456789");
    mFirebaseAnalytics.setUserId("123456789");
    
  3. Google Analytics veri kümesindeki etkinlikleri Crashlytics veri kümesindeki kilitlenmelerle birleştirmek için kullanıcı kimliği alanını kullanan bir sorgu yazın.

    Android uygulaması için örnek bir sorguyu aşağıda bulabilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini (paket adı ve ANDROID yerine) kullanın.

    SELECT DISTINCT c.issue_id, a.geo.country, COUNT(DISTINCT c.user.id) as num_users_impacted
    FROM `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID` c
    INNER JOIN  `PROJECT_ID.analytics_TABLE_NAME.events_*` a on c.user.id = a.user_id
    WHERE
      c.issue_id = "ISSUE_ID"
      AND a._TABLE_SUFFIX BETWEEN '20190101'
      AND '20200101'
    GROUP BY
      c.issue_id,
      a.geo.country,
      c.user.id

9. örnek: Bugün şu ana kadar en çok karşılaşılan 5 sorun

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM
  `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME`
WHERE
  DATE(event_timestamp) = CURRENT_DATE()
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Örnek 10: BUGÜN dahil olmak üzere TARİH'ten bu yana en önemli 5 sorun

Güvenilir toplu verilere gerçek zamanlı bilgiler eklemek için toplu ve gerçek zamanlı tabloları birleştirme sorgusuyla birleştirebilirsiniz. event_id birincil anahtar olduğundan iki tablodaki ortak etkinlikleri tekilleştirmek için DISTINCT event_id kullanabilirsiniz.

Android uygulaması için örnek bir sorguyu aşağıda görebilirsiniz. iOS uygulaması için paket kimliğini ve IOS değerini kullanın (paket adı ve ANDROID yerine).

SELECT
  issue_id,
  COUNT(DISTINCT event_id) AS events
FROM (
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID_REALTIME`
  UNION ALL
  SELECT
    issue_id,
    event_id,
    event_timestamp
  FROM
    `PROJECT_ID.firebase_crashlytics.PACKAGE_NAME_ANDROID`)
WHERE
  event_timestamp >= PARSE_TIMESTAMP("%Y_%m_%d", "YYYY_MM_DD")
GROUP BY
  issue_id
ORDER BY
  events DESC
LIMIT
  5;

Sırada ne var?