发送反馈
将Google Analytics for Firebase数据导入BigQuery
本教程介绍了如何将Google Analytics for Firebase中的事件日志导出到Google BigQuery中,以便深入分析数据。
Firebase 是一个构建移动应用程序的平台,其中包括数据和文件存储,实时同步,身份验证等功能。 Google Analytics for Firebase会 跟踪您的Firebase功能的使用情况,并提供关于应用使用情况和用户参与度的信息。
BigQuery 是一个PB级分析数据仓库,您可以使用它近乎实时地在大量数据上运行类似SQL的查询。
将您的Google Analytics数据导入BigQuery有以下几个优点:
-
自定义事件参数 - 在Google Analytics中,您可以定义要跟踪的自定义事件和参数。通过将数据导入BigQuery,您可以通过标准和自定义事件参数进行丰富的分析。
-
来自多个来源的汇总数据 -如果您在多个位置(例如Google Analytics 360,Google Analytics for Firebase和由移动后端服务收集的自定义分析)跟踪用户事件,则可以将来自所有这些来源的数据导入到BigQuery中以执行分析,提供您的事件数据的完整图片。
-
访问原始数据 - Google Analytics仪表板提供了事件数据的汇总视图。如果您将数据导入BigQuery,则可以访问原始数据值,并且在分析事件的方式方面具有更大的灵活性。您可以访问所有25个事件参数和用户属性。
-
访问控制 - 当您将数据导出到BigQuery时,您拥有该数据,并且您可以使用BigQuery ACL来管理项目和数据集的权限,从而可以在无需访问Firebase应用程序的情况下共享数据。
-
归档冷数据 -如果您需要保留原始分析数据,则可以将数据提取到BigQuery中,然后将其归档到Google云存储或另一个存储位置,以获得廉价的长期存储。
目标
本教程介绍如何:
- 将Google Analytics for Firebase链接到BigQuery。这会导致Google Analytics每天将事件日志导出到BigQuery。
- 将代码添加到将事件日志发送到Google Analytics的iOS或Android应用程序。
- 查询存储在BigQuery中的分析数据。
成本
要将Google Analytics数据传输到BigQuery,您必须将Firebase项目升级到Blaze服务级别。有关更多信息,请参阅Firebase定价。
另外,在BigQuery中存储和查询数据会产生费用。有关更多信息,请参阅 BigQuery定价。
在你开始之前
-
在Cloud Platform控制台中,选择您的Firebase项目。启用BigQuery API。
将Google Analytics数据链接到BigQuery
将您的Firebase应用连接到BigQuery可让您访问您的原始非抽样事件数据以及您的所有参数和用户属性。在将Firebase应用连接到BigQuery项目后,Google Analytics每天将您的事件数据导出到相应的BigQuery数据集。
此外,还会为当天收到的事件导入表格。该表被命名app_events_intraday_YYYYMMDD
。某些字段未在日内表中填充,有关更多信息,请参阅 BigQuery导出架构。
您可以查询,导出或加入包含外部数据的数据集,以执行自定义分析。
将您的Firebase项目链接到BigQuery
要将您的Firebase项目链接到BigQuery,请执行以下操作:
-
打开 Firebase控制台 ,然后选择该项目。
-
点击设置齿轮,然后选择项目设置。
-
选择集成选项卡,然后单击BigQuery 卡上的链接。
-
在BigQuery对话框中,验证是否已启用Google Analytics。
-
选择是否将广告标识符作为BigQuery导出的一部分。这样做可以提供更丰富的数据,但会在BigQuery中产生额外的存储和查询成本。
-
点击链接到BigQuery。
注意:将Google Analytics数据导出到BigQuery需要您的项目使用Blaze定价计划。如果您的项目使用Spark或Flame定价计划,请选择升级项目和链接。Firebase控制台引导您完成项目升级。
将项目链接到BigQuery后,首次每天导出事件时,会在关联的BigQuery项目中创建相应的数据集。每天,每个链接应用程序的原始事件数据将填充相关数据集中的新表格。
注意:随着日常表格的积累,您可能希望将旧表格迁移到云端存储,或者如果不再需要这些数据,请将其从BigQuery中删除。这可以降低您的数据存储成本。
管理哪些应用向BigQuery发送数据
默认情况下,当您将Firebase项目链接到BigQuery时,该项目中的所有应用都会链接到BigQuery以及稍后添加到项目中的任何应用。
要配置哪些应用向BigQuery发送数据,请执行以下操作:
-
打开 Firebase控制台 ,然后选择该项目。
-
点击设置齿轮,然后选择项目设置。
-
选择集成选项卡,然后单击BigQuery 卡上的管理。
-
要让应用停止向BigQuery发送数据,请关闭该应用旁边的开关。
-
点击停止导出确认。
注意:暂停应用程序会阻止发送新数据。然而,之前发送的任何数据仍然存在于BigQuery和存储中,并且该数据的查询费用仍然适用。
从BigQuery中取消关联Firebase项目
从BigQuery中取消项目链接:
-
打开 Firebase控制台 ,然后选择该项目。
-
点击设置齿轮,然后选择项目设置。
-
选择集成选项卡,然后单击BigQuery 卡上的管理。
-
在BigQuery详细信息下,单击取消链接项目。
-
点击取消链接BigQuery进行确认。
注意:从BigQuery中取消项目链接可防止发送新数据。然而,之前发送的任何数据仍然存在于BigQuery和存储中,并且查询费用仍然适用。
使用BigQuery查询Google Analytics的Firebase数据
将数据加载到BigQuery后,您可以使用BigQuery在其上运行类似SQL的查询。有关更多信息,请参阅 BigQuery文档中的查询数据。
BigQuery提供了一个Web UI,它可以使您的数据运行查询与填写表单并单击运行查询一样简单。有关更多信息,请参阅BigQuery文档中的使用Web UI快速入门。
以下是您可以在Google Analytics数据上运行的查询示例。这些查询会生成Google Analytics仪表板中不可用的报告。
查询自定义事件参数
在Google Analytics中,您可以为事件设置自定义参数键和值。密钥被分类为String
和值能够具有的类型 String
,Long
或Double
。
以下查询演示如何生成汇总自定义事件值以提供业务洞察力的报告。
例1:
一位手机游戏开发人员想知道她的游戏的哪个级别触发了游戏中最多的购买流程。为此,她将以下自定义事件调用添加到当玩家触发游戏内购买流程时运行的游戏。
在此示例中,自定义事件的名称(trigger_purchase
其中包含一个键)level
指定一个整数值,该整数值表示玩家触发购买时所处的级别。
IOS - OBJECTIVE C
IOS - SWIFT
ANDROID - JAVA
[FIRAnalytics logEventWithName:@"trigger_purchase"
parameters:@{
@"level": 3,
}];
BigQuery中为此自定义事件生成的条目如下:
领域 | 值 |
---|---|
event_dim.name | trigger_purchase |
event_dim.params.key | 水平 |
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
IOS - SWIFT
ANDROID - JAVA
[FIRAnalytics logEventWithName:@"defeat_opponent"
parameters:@{
@"character": "Hercules"
}];
BigQuery中为此自定义事件生成的条目如下所示:
领域 | 值 |
---|---|
event_dim.name | defeat_opponent |
event_dim.params.key | 字符 |
event_dim.params.value.string_value | 大力神 |
为了找到最成功的角色类,他编写了一个查询,该角色计算角色类参与失败对手自定义事件的次数。
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云消息传递 向最近未使用该应用程序的用户发送重新参与推送通知。要构建通知的联系人列表,开发人员使用以下查询来查找过去一年中未在前两周访问过该应用的用户。此查询返回iOS和Android用户以及用户最初打开应用程序的日期。
在下面的查询中,该user_dim.user_id
字段包含开发人员通过调用setUserId API 在应用程序中设置的用户标识 。设置此值后,Google Analytics会将其保留并将其包括在与该用户关联的所有未来行中。该值不会追溯添加到过去的行。
如果开发者没有设置user_dim.user_id
标识符,他们可以使用app_info.app_instance_id
包含由Firebase生成的默认标识符的字段来代替 user_dim.user_id
。请注意,app_info.app_instance_id
每次将Firebase应用程序卸载并重新安装在同一设备上时,Firebase都会生成一个新 的应用程序。
导出到BigQuery的iOS应用程序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_id
和country
一排,然后再执行该行内的所有事件的计数。该查询使用 WITHIN RECORD 子句event_dim
中RECORD
,是处理聚合嵌套记录的最佳途径。
外部查询利用了EXACT_COUNT_DISTINCT
的userId
,为用户的总数量提供精确的数。另外,开发人员可以使用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架构
将Firebase的Google Analytics(分析)连接到BigQuery时,Firebase每天都会将数据导出到BigQuery。它的格式如下:
数据集
Google Analytics for Firebase为每个Firebase应用在BigQuery中创建一个新的数据集。数据集名称格式为:[app_name]_[PLATFORM]
,其中 app_name
是捆绑包ID(iOS)或包名称(Android)。
Google Analytics将句点转换为包ID或包名称中的下划线以匹配BigQuery命名约定。Google 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 Export模式。
打扫干净
为避免向您的Google Cloud Platform帐户收取本教程中使用的资源的费用:
停止结算费用的最简单方法是删除项目。由于Firebase项目和Cloud Platform项目是一样的,您可以使用Firebase或Cloud Platform控制台将其删除。
警告:删除项目会导致以下后果:
- 如果您使用的是现有项目,则还会删除您在项目中完成的其他任何工作。
- 您不能重复使用已删除项目的项目ID。如果您创建了计划在将来使用的自定义项目ID,请改为删除项目内部的资源。此步骤可确保使用项目ID的
appspot.com
URL(例如URL)保持可用。
如果您正在探索多个教程和快速入门,重复使用项目而不是删除它们可以防止您超出项目配额限制。
在GCP控制台中,转到“项目”页面。
在项目列表中,选择要删除的项目并单击删除项目。在对话框中输入项目ID,然后单击 关闭以删除该项目。
如果您不想删除云平台和Firebase项目,可以通过从BigQuery中删除数据集来降低成本。
-
转到BigQuery Web UI。
-
在导航中,将鼠标悬停在您的应用的数据集上。
-
点击
导航中数据集名称旁边的向下箭头图标,然后点击删除数据集。
-
在删除数据集对话框中,通过输入数据集的名称并单击确定来确认删除命令。