Firebase 데이터를 BigQuery로 가져오기

본 가이드는 데이터의 심층 분석을 위해 Google Analytics for Firebase와 Firebase Crashlytics의 이벤트 로그를 Google BigQuery로 내보내는 방법에 대해 설명합니다.

Firebase는 데이터 및 파일 저장, 실시간 동기화, 인증 등과 같은 기능이 포함된 모바일 앱을 구축하기 위한 플랫폼입니다. Google Analytics for Firebase는 사용자의 Firebase 기능 사용 상황을 추적하고 앱 사용 및 사용자 참여에 대한 통찰력을 제공하며, Firebase Crashlytics는 앱의 비정상 종료 내용을 로깅하여 사용자가 경험하는 문제의 종류와 그 발생 빈도에 관한 통찰력을 제공합니다.

BigQuery는 방대한 양의 데이터에 관하여 거의 실시간으로 SQL과 같은 쿼리를 실행할 때 사용할 수 있는 페타바이트 규모의 데이터 웨어하우스입니다.

Firebase 데이터를 BigQuery로 가져올 경우 다음과 같은 이점이 있습니다.

  • 여러 소스의 데이터 집계—Google Analytics for Firebase, Firebase Crashlytics, Google Analytics 360, 그리고 모바일 백엔드 서비스에서 수집한 커스텀 분석과 같이 여러 곳에서 사용자 이벤트를 추적한다면, 이 모든 소스의 데이터를 BigQuery로 가져와서 이벤트 데이터에 관한 전체적인 그림을 제시하는 분석을 수행할 수 있습니다.

  • 원시 데이터에 액세스—데이터를 BigQuery로 가져오면, 원시 데이터 값에 액세스할 수 있고 이벤트를 분석하는 방식에 있어서 유연성을 확보할 수 있습니다.

  • 액세스 제어—데이터를 BigQuery로 내보내면 그 데이터를 소유하게 되고 BigQuery ACL을 이용하여 프로젝트 및 데이터세트에 대한 권한을 관리할 수 있으므로 Firebase 앱에 대한 액세스를 제공하지 않고도 데이터를 공유하는 것이 가능해집니다.

  • 사용률이 낮은 데이터 보관—원시 데이터를 보존해야 할 경우, 그 데이터를 BigQuery로 가져온 다음 저렴하게 오랫동안 보관할 수 있는 Google Cloud Storage 또는 다른 저장소 위치에 보관할 수 있습니다.

  • 커스텀 이벤트 매개변수—Google Analytics에서는 추적할 커스텀 이벤트와 매개변수를 정의할 수 있습니다. 데이터를 BigQuery로 가져옴으로써, 기본 이벤트 매개변수와 커스텀 이벤트 매개변수 모두에 대해 풍부한 분석을 수행할 능력을 얻게 됩니다.

목표

본 가이드에서는 다음에 관한 방법을 설명합니다.

  • Firebase 프로젝트를 BigQuery에 연결하여 Firebase Analytics와 Firebase Crashlytics가 이벤트 로그를 매일 BigQuery로 내보내게 합니다.
  • BigQuery에 저장된 데이터를 쿼리합니다.

비용

Firebase 데이터를 BigQuery로 전송하려면 프로젝트를 서비스의 Blaze 수준으로 업그레이드해야 합니다. 자세한 내용은 Firebase 가격 책정을 참조하세요.

또한, BigQuery의 데이터를 저장하고 쿼리하려면 비용이 발생합니다. 자세한 내용은 BigQuery 가격 책정을 참조하세요.

시작하기 전에

  1. Firebase 프로젝트를 만듭니다.

  2. Firebase 이벤트를 전송하는 앱을 빌드합니다. 그 방법을 알아보려면 Firebase Crashlytics 시작하기iOS 또는 Android에서 Google Analytics for Firebase 시작하기를 읽어보세요.

프로젝트 데이터를 BigQuery에 연결

Firebase 프로젝트를 BigQuery에 연결하면 샘플링되지 않은 원시 이벤트 데이터에 액세스할 수 있습니다.

  1. Firebase 콘솔에서 통합 페이지를 방문합니다.

  2. BigQuery 카드에서 연결을 클릭합니다.

  3. 스위치를 사용하여 Analytics 데이터를 내보낼지, Crashlytics 데이터를 내보낼지, 둘 다 내보낼지 결정합니다. Analytics 데이터를 내보낼 경우 광고 식별자를 포함시키도록 선택할 수도 있는데, 이렇게 하면 데이터가 더 풍부해지지만 BigQuery에서 저장 및 쿼리 비용이 추가로 발생합니다.

  4. BigQuery 연결을 클릭하여 작업을 완료합니다.

프로젝트를 연결하고 나면 BigQuery가 해당 데이터세트를 만들어서 이를 프로젝트에 연결합니다. 매일 프로젝트가 연결된 각 앱마다 데이터세트에 새 테이블을 추가합니다. 프로젝트 이벤트의 첫째 날 내보내기 이후에 데이터세트를 사용할 수 있을 것입니다.

BigQuery로 데이터를 전송하는 앱 관리

프로젝트를 BigQuery에 연결하면, Firebase가 프로젝트에 있는 모든 앱의 이벤트를 내보냅니다. 다음과 같이 일일 내보내기에서 앱을 제외함으로써 이를 변경할 수 있습니다.

  1. Firebase 콘솔에서 통합 페이지를 방문합니다.

  2. BigQuery 카드에서 관리를 클릭합니다.

  3. 앱이 BigQuery로 데이터를 전송하지 않게 하려면, 해당 앱의 이름 옆에 있는 스위치를 클릭하고 내보내기 중지를 선택합니다.

  1. Firebase 콘솔에서 통합 페이지를 방문합니다.

  2. BigQuery 카드에서 관리를 클릭합니다.

  3. 페이지 하단의 프로젝트 연결 해제를 선택하고 BigQuery 연결 해제를 클릭하여 확인합니다.

BigQuery로 Firebase 데이터 쿼리하기

데이터가 BigQuery에 로드되고 나면 BigQuery를 사용하여 데이터에 SQL 같은 쿼리를 실행할 수 있습니다. 자세한 내용은 BigQuery 문서의 데이터 쿼리를 참조하세요.

BigQuery는 데이터에 쿼리의 실행을 양식을 작성하고 쿼리 실행을 클릭하는 형식으로 간단하게 만들어주는 웹 UI를 제공합니다. 자세한 내용은 BigQuery 문서의 웹 UI를 사용한 빠른 시작을 참조하세요.

BigQuery에서 Firebase Analytics 데이터로 작업하기

다음은 Analytics 데이터에 실행할 수 있는 쿼리의 예입니다. 이 쿼리는 Google Analytics 대시보드에서 제공하지 않는 보고서를 생성합니다.

커스텀 이벤트 매개변수 쿼리

Google Analytics에서는 이벤트에 커스텀 매개변수 키와 값을 설정할 수 있습니다. 키의 유형은 String으로 지정되고 값은 String, Long, Double의 유형을 지닐 수 있습니다.

다음 쿼리는 비즈니스 통찰력을 제공하는 커스텀 이벤트 값을 집계한 보고서를 어떻게 생성하는지 보여줍니다.

예 1:

한 모바일 게임 개발자가 자신이 개발한 게임의 어느 레벨에서 게임 내 구매 흐름이 가장 많이 트리거되는지 알고 싶습니다. 이를 위해 이 개발자는 플레이어가 게임 내 구매 흐름을 트리거할 때 실행되는 다음과 같은 커스텀 이벤트 호출을 게임에 추가합니다.

이 예에서 커스텀 이벤트의 이름은 trigger_purchase이고, 이 이벤트의 키는 level이며, 이 이벤트는 플레이어가 구매를 트리거할 때 플레이어가 어느 레벨에 있었는지를 나타내는 정수 값을 지정합니다.

iOS - Objective C

[FIRAnalytics logEventWithName:@"trigger_purchase"
                parameters:@{
                              @"level": 3,
}];

iOS - Swift

FIRAnalytics.logEventWithName("trigger_purchase", parameters: [
  "level": 3
])

Android - 자바

Bundle params = new Bundle();
params.putInt("level", 3);
mFirebaseAnalytics.logEvent("trigger_purchase", params);

이 커스텀 이벤트에 따른 BigQuery의 결과 항목은 다음과 같습니다.

필드
event_dim.name trigger_purchase
event_dim.params.key level
event_dim.params.value.int_value 3

레벨당 구매 건수를 확인하기 위해, 이 개발자는 trigger_purchase 이벤트 카운트의 분포를 사용자의 현재 레벨을 기준으로 그룹화하여 보고하는 쿼리를 작성합니다 이 쿼리는 2015년 1월 1일부터 2016년 12월 31일까지 실행됩니다.

SELECT COUNT(event_dim.name) as NumberOfPurchases,
event_dim.params.value.int_value as level
FROM
TABLE_DATE_RANGE(com_game_example_ANDROID.app_events_, TIMESTAMP('2015-01-01'), TIMESTAMP('2016-12-31'))
WHERE event_dim.name = 'trigger_purchase'
GROUP BY level

예 2:

동일한 게임 작업에 참여하고 있는 두 번째 개발자는 어떤 캐릭터 등급에서 가장 많은 적을 물리치는지 확인하고 싶습니다. 이 개발자는 이를 위해 플레이어가 적을 물리칠 때 게임에 로깅하는 다음과 같은 커스텀 이벤트를 추가합니다.

이 예에서 커스텀 이벤트의 이름은 defeat_opponent이고, 이 이벤트의 키는 character이며, 이 이벤트는 적의 이름을 지정하는 문자열 값을 지정합니다.

iOS - Objective C

[FIRAnalytics logEventWithName:@"defeat_opponent"
                parameters:@{
                              @"character": "Hercules"
}];

iOS - Swift

FIRAnalytics.logEventWithName("defeat_opponent", parameters: [
  "character": "Hercules"
])

Android - 자바

Bundle params = new Bundle();
params.putString("character", "Hercules");
mFirebaseAnalytics.logEvent("defeat_opponent", params);

이 커스텀 이벤트에 따른 BigQuery의 결과 항목은 다음과 같을 것입니다.

필드
event_dim.name defeat_opponent
event_dim.params.key character
event_dim.params.value.string_value Hercules

가장 성공적인 캐릭터 등급을 찾기 위해, 개발자는 특정 캐릭터가 defeat-opponent 커스텀 이벤트에 해당되는 횟수를 계산하는 쿼리를 작성합니다.

SELECT COUNT(event_dim.name) as DefeatEvents,
event_dim.params.value.string_value as CharacterClass
FROM
TABLE_DATE_RANGE( com_game_example_ANDROID.app_events_, TIMESTAMP('2015-01-01'), TIMESTAMP('2016-12-31'))
WHERE event_dim.name = 'defeat_opponent'
AND event_dim.params.key = 'character'
GROUP BY CharacterClass
ORDER BY DefeatEvents desc

사용자 이벤트 쿼리

커스텀 이벤트에 관한 쿼리 이외에, 사용자 이벤트 값을 집계하는 보고서를 생성하여 비즈니스 통찰력을 제공할 수도 있습니다.

예 3:

한 앱 개발자가 Firebase 클라우드 메시징을 사용하여 최근에 앱을 사용하지 않은 사용자에게 재참여 푸시 알림을 보내려고 합니다. 알림을 보낼 연락처 목록을 만들기 위해, 이 개발자는 작년부터 사용해오고 있는 사용자 중 지난 2주 동안 앱을 방문하지 않은 사용자를 찾는 다음과 같은 쿼리를 사용합니다. 이 쿼리는 iOS와 Android 사용자를 모두 반환하고 사용자가 앱을 처음으로 연 날짜도 반환합니다.

아래의 쿼리에서 user_dim.user_id 필드는 개발자가 setUserId API를 호출하여 앱에 설정한 사용자 id를 포함합니다. 이 값을 설정하고 나면, Google Analytics는 이 값을 유지하고 향후 해당 사용자와 연결된 모든 행에 이 값을 포함시킵니다. 이 값은 과거의 행에 소급하여 추가되지 않습니다.

개발자가 user_dim.user_id 식별자를 설정하지 않을 경우 user_dim.user_id 대신에 Firebase에서 생성하는 기본 식별자가 포함된 app_info.app_instance_id 필드를 사용해도 됩니다. Firebase는 동일한 기기에서 Firebase 앱이 제거되었다가 다시 설치될 때마다 새 app_info.app_instance_id를 생성합니다.

IOS 앱의 경우 BigQuery로 내보내지는 데이터 테이블은 com_retail_example_IOS.app_events_[DATE]이고 Android의 경우 해당 데이터 테이블은 com_retail_example_ANDROID.app_events_[DATE]이며, 여기서 [DATE]는 현재 날짜입니다.

SELECT
  userId,
  DATE(MIN( firstOpenTime )) firstOpenTime
FROM (
  SELECT
    user_dim.user_id AS userId,
    user_dim.first_open_timestamp_micros AS firstOpenTime
  FROM (TABLE_DATE_RANGE([com_retail_example_IOS.app_events_],
    DATE_ADD(CURRENT_TIMESTAMP(), -1, 'YEAR'), CURRENT_TIMESTAMP())),
    (TABLE_DATE_RANGE([com_retail_example_ANDROID.app_events_],
    DATE_ADD(CURRENT_TIMESTAMP(), -1, 'YEAR'), CURRENT_TIMESTAMP())) )
WHERE
  userId NOT IN (
  SELECT
    user_dim.user_id AS userId
  FROM (TABLE_DATE_RANGE([com_retail_example_IOS.app_events_],
    DATE_ADD(CURRENT_TIMESTAMP(), -14, 'DAY'), CURRENT_TIMESTAMP())),
    (TABLE_DATE_RANGE([com_retail_example_ANDROID.app_events_],
    DATE_ADD(CURRENT_TIMESTAMP(), -14, 'DAY'), CURRENT_TIMESTAMP())) )
GROUP BY
  userId

예 4:

한 앱 개발자가 iOS 플랫폼과 Android 플랫폼 모두에서 가장 활동적인 사용자가 어느 국가에 있는지 확인하려고 합니다. 이를 위해 개발자는 특정일의 국가별 사용자 및 이벤트 수를 나열하는 다음과 같은 쿼리를 사용합니다.

내부 쿼리는 특정 행의 user_idcountry를 반환한 다음 그 행에 있는 모든 이벤트의 수를 반환합니다. 이 쿼리는 RECORDevent_dim으로 WITHIN RECORD 절을 사용하는데, 이는 중첩 레코드의 집계를 처리하는 가장 좋은 방법입니다.

외부 쿼리는 전체 사용자 수의 정확한 수치를 제공하기 위해 userIdEXACT_COUNT_DISTINCT를 사용합니다. 아니면 개발자가 COUNT(DISTINCT user_id)를 사용해도 되지만, 이 경우 정확한 값이 아닌 추정값이 제공됩니다. 데이터세트가 매우 크고 시간에 따른 동향을 알아보려고 할 때는 정확성보다 속도가 더 중요할 것이므로 추정값을 이용하는 것이 더 빠를 것입니다.

SELECT
  country,
  EXACT_COUNT_DISTINCT(user_id) AS users,
  SUM(noOfEvents) AS totalEvents
FROM (
  SELECT
    user_dim.app_info.app_instance_id AS user_id,
    user_dim.geo_info.country AS country,
    COUNT(event_dim.name) WITHIN RECORD noOfEvents
  FROM
    [com_retail_example_IOS.app_events_20160723],
    [com_retail_example_ANDROID.app_events_20160723]
    )
GROUP BY
  1
ORDER BY
  2 DESC

BigQuery의 Google Analytics 스키마 이해하기

Google Analytics for Firebase를 BigQuery에 연결하면 Firebase가 매일 데이터를 BigQuery로 내보냅니다. 이러한 내보내기는 다음과 같은 형식으로 이루어집니다.

데이터세트

Google Analytics for Firebase는 각 Firebase 앱마다 BigQuery에 새 데이터세트를 만듭니다. 데이터세트 이름의 형식은 [app_name]_[PLATFORM]과 같으며, 여기서 app_name은 번들 ID(iOS) 또는 패키지 이름(Android)입니다.

Google Analytics는 BigQuery 이름 지정 규칙에 맞도록 번들 ID 또는 패키지 이름의 마침표를 밑줄로 변환합니다. Analytics는 Firebase 이름 지정 규칙에 맞도록 플랫폼 이름을 대문자로 지정합니다.

예를 들어 번들 ID가 “com.username.myapp”인 iOS 앱에 해당하는 데이터세트는 데이터세트 이름이 com_username_myapp_IOS로 지정될 것입니다.

테이블

Google Analytics는 앱에 해당하는 BigQuery 데이터세트에 매일 새 테이블을 생성합니다. 이 테이블의 이름은 app_events_YYYYMMDD와 같은 패턴으로 지정되며 특정일에 기록된 이벤트가 테이블에 포함됩니다.

테이블의 각 행은 이벤트 번들에 해당합니다. 번들의 크기는 Google Analytics for Firebase SDK 호출을 통해 데이터를 전송하는 앱에 의해 결정됩니다.

Google Analytics는 사용자 이벤트를 열로 내보내며, 이 열에 커스텀 데이터 이벤트가 포함되어 있습니다. BigQuery로 내보내지는 기본 열의 목록에 관해서는 Firebase 도움말 문서의 BigQuery 내보내기 스키마를 참조하세요.

BigQuery에서 Firebase Crashlytics 데이터로 작업하기

다음의 예는 Crashlytics 데이터에서 실행할 수 있는 쿼리를 보여줍니다. 이러한 쿼리는 Crashlytics 대시보드에 제공되지 않는 보고서를 생성합니다.

Crashlytics 쿼리의 예

다음의 예는 비정상 종료 이벤트 데이터를 집계하여 더 이해하기 쉽게 요약한 보고서를 어떻게 생성하는지 보여줍니다.

예 1:

버그를 가능한 한 많이 수정하기 위한 작업을 마친 후, Friendly Pix의 수석 개발자는 드디어 신규 사진 공유 앱을 출시할 준비가 되었다고 생각합니다. 출시 전에 이들은 지난 달의 일일 비정상 종료 횟수를 확인하여, 그 동안 진행한 버그 수정 작업을 통해 시간이 지나면서 앱이 더 안정화되었는지 알아보려고 합니다.

#standardSQL
SELECT
  COUNT(DISTINCT event_id) AS number_of_crashes,
  FORMAT_TIMESTAMP("%F", event_timestamp) AS date_of_crashes
FROM
  `projectId.crashlytics.package_name_ANDROID`
GROUP BY
  date_of_crashes
ORDER BY
  date_of_crashes DESC
LIMIT
  30;

예 2:

PineapplePlusPlus의 프로젝트 관리자는 프로덕션 계획의 우선순위를 적절하게 설정하기 위해, 제품에서 가장 침투성이 높은 비정상 종료가 무엇인지 파악하는 방법에 대해 고민합니다. 이들은 다음과 같이 데이터의 관련 포인트를 제공하는 쿼리를 생성합니다.

#standardSQL
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
  `projectId.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;

예 3:

가을은 신규 스마트폰이 출시되는 시기입니다! Planned Obsolescence, Inc.의 개발자는 이 시기가 기기별로 새로운 문제가 발견되는 시기이기도 하다는 것을 알고 있습니다. 앞으로 발생할 호환성 문제를 성공적으로 해결하기 위해, 이들은 지난 주에 비정상 종료가 가장 많이 발생했던 10개의 기기를 식별하는 다음과 같은 쿼리를 준비했습니다.

#standardSQL
SELECT
  device.model,
  COUNT(DISTINCT event_id) AS number_of_crashes
FROM
  `projectId.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;

예 4:

Mecha Hamster 2: Hammy's Revenge의 게임 개발자는 이 게임의 어느 레벨에서 비정상 종료가 가장 많이 발생하는지 알고 싶습니다. 그 상태를 추적하는 데 도움이 되도록 이들은 커스텀 Crashlytics 키 current_level을 설정한 후 사용자가 새 레벨에 도달할 때마다 이를 업데이트합니다.

iOS - Objective C

[CrashlyticsKit setIntValue:3 forKey:@"current_level"];

iOS - Swift

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

Android - 자바

Crashlytics.setInt("current_level", 3);

이들은 BigQuery 내보내기에 이 키를 포함시키고, 각 비정상 종료 이벤트와 연결된 current_level 값의 분산을 보고하는 쿼리를 다음과 같이 작성합니다.

#standardSQL
SELECT
  COUNT(DISTINCT event_id) AS num_of_crashes,
  value
FROM
  `projectId.crashlytics.package_name_ANDROID`,
  UNNEST(custom_keys)
WHERE
  key = "current_level"
GROUP BY
  key,
  value
ORDER BY
  num_of_crashes DESC

예 5:

Mostly Okay Software의 한 개발자는 사전 체험판 앱이 하나 있습니다. 사용자 대부분은 이 앱을 좋아하지만 일부 소수의 경우에는 이례적으로 비정상 종료가 많이 발생했습니다. 문제의 원인을 파악하기 위해, 이들은 사용자 id를 사용하여 사용자의 모든 비정상 종료 이벤트를 가져오는 쿼리를 작성합니다.

#standardSQL
SELECT
  *
FROM
  `projectId.crashlytics.package_name_ANDROID`
WHERE
  user.id IN ("userid1",
    "userid2",
    "userid3")
ORDER BY
  user.id

BigQuery의 Firebase Crashlytics 스키마 이해하기

Crashlytics를 BigQuery와 연결하면, Firebase는 연결하기 최대 이틀 전의 이벤트를 포함한 최근의 심각한 비정상 종료 이벤트와 심각하지 않은 비정상 종료 이벤트를 내보냅니다. 이 시점부터 연결을 해제할 때까지, Firebase는 매일 Crashlytics 이벤트를 내보냅니다. 각 내보내기 후 BigQuery에서 데이터를 사용할 수 있기까지 몇 분이 소요될 수 있습니다.

데이터세트

Firebase Crashlytics는 Crashlytics 데이터마다 BigQuery에 새 데이터세트를 만듭니다. 이 데이터세트는 전체 프로젝트에 여러 개의 앱이 있더라도 전체 프로젝트를 포함하지만 Analytics 내보내기는 포함하지 않습니다.

테이블

Firebase Crashlytics는 그 앱의 데이터를 내보내는 것을 제외하지 않는 한, 데이터세트에 프로젝트의 각 앱을 위한 테이블을 생성합니다. Firebase는 앱의 번들 식별자에 따라 테이블의 이름을 지정하며 마침표를 밑줄로 변환하고 마지막에 플랫폼 이름을 붙입니다. 예를 들어 ID가 com.google.test인 앱의 데이터는 com_google_test_ANDROID라는 이름의 테이블에 있을 것입니다.

테이블의 각 행은 앱에 발생한 오류를 나타냅니다.

테이블의 열은 심각한 오류나 심각하지 않은 오류나 서로 동일합니다. BigQuery로 내보내지는 열의 목록에 관해서는 Crashlytics BigQuery 내보내기 스키마를 참조하세요.

내보내진 Crashlytics 데이터를 Data Studio로 시각화하기

Google Data Studio는 BigQuery의 Crashlytics 데이터세트를 읽기 쉽고 공유하기 쉬우며 완벽하게 맞춤설정이 가능한 보고서로 바꿔줍니다.

Data Studio의 사용에 관한 자세한 내용은 Data Studio 빠른 시작 가이드, Data Studio에 오신 것을 환영합니다를 참조하세요.

Crashlytics 보고서 템플릿 사용하기

Data Studio는 내보내진 Crashlytics BigQuery 스키마의 포괄적인 측정기준 및 측정항목 세트를 포함하는 Crashlytics 샘플 보고서를 제공합니다. 이 샘플을 템플릿으로 사용하여 자체 앱의 비정상 종료 원시 데이터를 기초로 하여 새 보고서와 시각화 자료를 간편하게 만들 수 있습니다.

  1. Crashlytics Data Studio 대시보드 템플릿을 엽니다.
  2. 오른쪽 상단의 템플릿 사용을 클릭합니다.
  3. 데이터 소스 선택 드롭다운 메뉴에서, 새 데이터 소스 만들기를 선택합니다.
  4. BigQuery 카드에서 선택을 클릭합니다.
  5. 내 프로젝트 > [your-project-name] > crashlytics > [your-table-name]을 선택하여, 내보내진 Crashlytics 데이터를 포함하는 테이블을 선택합니다.
  6. 구성 아래에서, Crashlytics 템플릿 수준기본값으로 설정합니다.
  7. 분할된 표 아래에서, 시간 측정기준으로 _PARTITIONTIME 사용을 지웁니다.
  8. 연결을 클릭하여 새 데이터 소스를 만듭니다.
  9. 보고서에 추가를 클릭하여 Crashlytics 템플릿으로 돌아갑니다.
  10. 마지막으로 보고서 작성을 클릭하여 Crashlytics Data Studio 대시보드 템플릿의 사본을 만듭니다.

삭제

이 가이드에서 사용한 리소스 비용이 Google Cloud Platform 계정에 청구되지 않도록 하는 방법은 다음과 같습니다.

요금이 청구되지 않도록 하는 가장 간단한 방법은 프로젝트를 삭제하는 것입니다. Firebase 프로젝트와 Cloud Platform 프로젝트는 하나로 동일하므로, Firebase 또는 Cloud Platform 콘솔을 사용하여 프로젝트를 삭제할 수 있습니다.

  1. GCP Console에서 프로젝트 페이지로 이동합니다.

    프로젝트 페이지로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 다음 종료를 클릭하여 프로젝트를 삭제합니다.

Cloud Platform 및 Firebase 프로젝트를 삭제하지 않으려면 프로젝트를 BigQuery에서 연결 해제하여 비용을 절감할 수 있습니다.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...