您想找什么?
Hero background image
如何使用 SQL Data Explorer 来分析游戏数据

开始探索你的数据

使用 Unity Gaming Services (UGS) 数据浏览器根据指标或事件过滤和使用数据,并按平台、国家/地区或版本对数据进行分组。

凭借 SQL(结构化查询语言)的基本知识,您可以使用UGS内的 SQL 数据资源管理器提升分析水平并深入挖掘数据。使用此功能可以构建和执行查询,将结果绘制成不同类型的可视化效果,将可视化效果添加到自定义仪表板,以及导出数据以供其他分析工具使用。在 Unity Dashboard的UGS Analytics面板中找到 SQL Data Explorer。

Unity 的Analytics顾问之一 Russell Young 为您提供了一些建议和想法,帮助您开始 SQL 数据探索之旅。

开始你的使命

请参阅 SQL Cookbook 中的食谱集合,探索UGS中的丰富数据。请注意, UGS使用了 Snowflake 风格的 SQL。

其中一个食谱查询查看任务统计数据。让我们调整该代码来快速查看我们模拟游戏中的任务失败率。这使用我们创建的自定义事件来跟踪玩家对任务的参与度,以及我们的 missionID 参数。

使用默认的 EVENTS 表
使用默认的 EVENTS 表

对于此查询,我们将使用默认的 EVENTS 表。该表包含我们游戏中记录的每个事件的详细信息。

限制查询以提高效率
限制查询以提高效率

请注意,我们在这里使用日期过滤器来限制查询并保持其高效。如果没有此限制,查询将会覆盖 SQL 数据资源管理器中默认可查询的全部 365 天的数据。此外,指定您感兴趣的列总是比使用 SELECT * 更有效。

EVENT_JSON:missionID::INTEGER 等短语看起来令人生畏,但如果您输入“missionID”并使用自动完成功能,SQL 数据资源管理器就会为您生成 JSON 语法 - 假设您已在自己的游戏中设置了该参数。

绘制结果
绘制结果

运行查询后,我们可以绘制结果来查看数据中的故事。图表目前最多支持两个 Y 轴和一个 X 轴。可以使用 SQL 查询中的“as”表达式轻松重命名轴标签;在本例中,我们的 Y 轴采用了我们定义的名称:“玩家失败 %”。

我们发现超过三分之一的玩家在我们的第一次任务(任务ID 0)中失败了,因此我们可以微调任务难度,为用户提供更积极的首次体验。

提示:如果您的数据中有一些 NULL 值,并且发现这导致轴看起来很奇怪,请使用 coalesce(yourParameter, 0) 来填充空白。

使用枢轴工具
使用枢轴工具

当我们运行查询时,我们会得到结果表。将 PLATFORM 添加到我们的查询中;在上图中,您将看到表格现在的样子。注意右侧的‘枢轴’按钮。这对于重塑我们的数据很有用,而无需重写我们的查询。

调整数据
调整数据

在我们的示例中,我们可以使用数据透视工具来调整我们的数据,以在行中获取 PLATFORM 并以 MISSIONID 作为列。

看到结果
看到结果

调整表格后我们发现,不同平台之间的任务失败率差别不大。

提高查询速度

随着您的游戏变得越来越成功并且玩家群不断增长,您可能会发现即使是简单的查询也需要花费相当长的时间才能运行。

假设您想针对数据运行以下基本查询:

数据抽样

您可能期望它运行得相当快,但对于大型数据集来说情况并非总是如此。利用我们仓库的形状以及user_ids以哈希形式存储的事实,使用快速的方法减少包含的用户数量,以提高查询速度。

在这里,我们将用户分成 100 个伪随机分配和编号的存储桶,并查看存储桶编号 63。

将此代码添加到简单查询中不会产生太大区别,但随着计算复杂性的增加,以这种方式过滤数据变得越来越重要。即使在我们的假装游戏中,我们也发现这个修改版本的查询比原始版本运行速度快 75%。这节省了时间和金钱,无需处理整个数据集即可了解用户的样本子集。

使用 precise_count_distinct

在上述查询中,我们使用 count(distinct…) 来计算个人玩家和事件组合的数量。如果我们不需要 100% 准确的结果,那么提高查询速度的一种方法是使用 approximate_count_distinct。我们之前的查询变成:

打开词汇表面板
打开词汇表面板

到目前为止,我们仅使用主 EVENTS 表。由于该表保存了我们游戏中每个事件的详细信息,因此它是最全面的表。为了改进我们的查询,我们可以使用更小的对象来更有效地运行我们的查询。

让我们看一下词汇表面板,探索可供查询的表格。

UGS中的聚合表

除了事件之外,我们在这里还可以找到所有可供查询的聚合表。这些都是通过UGS开箱即用的。

  • USERS 表为每个玩家保留一行,并记录他们在游戏中的终身指标,例如事件计数、总游戏时间、总花费等。
  • FACT_USER_SESSIONS_DAY 包含每个玩家每次会话的数据。
  • FACT_EVENT_TYPE_USERS_DAY 包含玩家每天发送的每个事件的一行以及总数。
  • FACT_WAU_USERS 和 FACT_MAU_USERS 包含前一周或前一个月某一天玩过游戏的用户的个人资料数据。

在 FACT_EVENT_TYPE_USERS_DAY 和 FACT_USER_SESSIONS_DAY 之间,您大概可以回答针对较小对象的大多数查询的 80% 以上。

使用 FACT_EVENT_TYPE_USERS_DAY

例如,在我们的第一个查询中,我们正在查看任务失败率。我们还可以使用 FACT_EVENT_TYPE_USERS_DAY 来计算每天的总体故障率,并将 NUMBER_OF_EVENTS 计数存储在此表中。

我们还将在下一个查询中使用其中一个表:

根据特定标准识别球员
根据特定标准识别球员

使用此查询查看符合特定条件的玩家的事件流。它对于 QA 和调试很有用,因为 - 通过使用上面提到的 USERS 表 - 您每次运行时都会获得不同的用户。

例如,如果您怀疑安装了特定版本游戏的玩家的事件没有被正确记录,您可以运行以下查询。返回的是随机玩家运行似乎遇到问题的游戏版本的事件流。重复几次,您就可以快速开始发现数据中的模式。

提示:如果要注释掉多行,请使用键盘快捷键 CTRL+/

使用新定义的变量

您可能习惯使用 Snowflake 以外的语言编写 SQL 查询 - 例如,如果您使用以前的 deltaDNA 数据挖掘工具,则很可能在 Vertica 中编写查询。

您现在可以引用新定义的变量,而无需先将它们包含在通用表表达式 (CTE) 中。例如,此查询在 SQL 数据资源管理器中成功运行 - 但在原始 deltaDNA 中,它会引发“列‘rice’不存在”错误:

从数据中获取更多信息

SQL Explorer 具有很大的潜力。UGS Analytics中还有更多内容有待发现,包括饼图和堆积条形图等许多图表选项。直接访问使您可以通过 Snowflake 直接访问您的Analytics数据。

为了快速获得您的见解并获得构建查询和仪表板的支持, 请联系我们

进一步阅读

您喜欢本文吗?
是的!
还行。