文档

支持

Analytics

Analytics

SQL Data Explorer(SQL 数据资源管理器)

Write custom SQL queries to analyze your Analytics data and create visualizations.
阅读时间9 分钟最后更新于 3 天前

使用 SQL Data Explorer(SQL 数据资源管理器)可以编写和执行针对数据的只读 SQL 查询,将结果绘制成不同类型的视图,并将这些结果添加到后台中。您可以获得其他 Analytics 产品可能无法提供的见解信息。请参阅 SQL 说明书 中的“配方”集合。Snowflake 运行的,因此使用 Snowflake SQL 方言。请注意,非 SELECT 语句和 $SYSTEM 命令在功能上受到限制。
注意
SQL Data Explorer(SQL 数据资源管理器)查询按查询秒数计费。如需更多信息,请参阅 Analytics 计费
您可以在条形图、折线图、面积图、饼图和堆积条形图之间切换。 SQL 是一种用于与数据库通信的编程语言。要使用 SQL Data Explorer(SQL 数据资源管理器),需对编写 SQL 查询有基本的了解。 以下代码显示了使用 SQL Data Explorer(SQL 数据资源管理器)时的默认 SQL 查询(但您可以提供自己的查询):
select EVENT_DATE, count(distinct USER_ID) from EVENTSwhere EVENT_DATE > CURRENT_DATE-7group by EVENT_DATEorder by EVENT_DATE desc
此查询计算过去七天内玩过您的游戏的不同用户数。 运行查询后,应设置图表。目前支持两个 Y 轴和一个 X 轴。为每个轴选择所需的列和单位。要重命名轴的标签,请在 SQL 查询中使用 as 表达式,这将重新标记轴的名称。
设置图表的 X 轴和 Y 轴。 从三种图表样式中进行选择:折线图、条形图和面积图。
折线图。
切换图表样式:条形图。
面积图。 如果运行查询时未指定任何数据排序,则图表可能由于未排序而无法准确表示数据。这种情况下将显示一条警告,建议使用“order by”(排序依据)关键字对查询进行排序。 图表下方有一个结果表显示查询的列和结果。
结果表。 术语面板提供了可在查询中使用的参数列表。使用剪贴板来复制参数。这些术语有两个来源:数据库列名(如 EVENT_DATE)以及从事件 json 解析的自定义参数(请参阅 Snowflake 文档了解如何查询 JSON 数据)。您可以根据发送的事件来定义自定义参数。某些参数是特定于 Snowflake 的字段,可用于更改 SQL 中的语法。 与从 JSON 分析的参数相比,数据库列名的查询性能更高,应尽可能作为首选。 如果参数由列(如 USER_COUNTRY)表示,则在查询中的使用形式为: USER_COUNTRY 另一方面,如果参数来自事件本身(例如,名为“missionName”的参数),则可通过以下方式访问该参数: EVENT_JSON:missionName::STRING 使用 Event Manager(事件管理器)创建自定义事件以在查询中用作列。
术语面板。 使用报告保存查询。报告中列出所有查询,以便您可以重新加载并在以后使用这些查询。
使用环境选择器在 Unity 环境之间切换。

任务统计信息

在此示例中,我们使用自定义事件通过 missonID 参数来跟踪玩家对任务的参与度,从而查看任务失败率。
对于此查询,我们将使用默认的 EVENTS 表。此表包含我们游戏中记录的每个事件的粒度数据。
SELECT EVENT_JSON:missionID::INTEGER AS missionID, count(distinct case when event_name = 'missionStarted' then user_id else null end) AS starts, round((count(distinct case when event_name = 'missionFailed' then user_id else null end) /starts)*100) AS "Players failed %"FROM EVENTSWHERE missionID <=10 -- Focus on the first few levels AND event_name in ('missionStarted','missionFailed') AND event_date>current_date-30 -- Use a date filter for efficiencyGROUP BY missionIDORDER BY missionID
请注意,我们在此处使用了日期过滤器
event_date>current_date-30
来限制查询,否则该查询将基于 SQL Data Explorer(SQL 数据资源管理器)中默认可查询的 365 天数据运行。
使用得到的结果绘制图形: \
![](/analytics/media/images/copy-of-sql-bar-chart.png)

\

请注意,Y 轴是我们定义的名称: “Players failed %”(玩家失败率)。

(mod)hash

随着游戏越来越成功,玩家群不断壮大,您可能会发现简单的查询也可能需要很长的运行时间。 请查看以下基本查询:
SELECT count(distinct event_name, user_id)/count(distinct user_id) as "avg number of event types per user"FROM EVENTSWHERE event_date>current_date-7
对于大型数据集,此查询可能需要较长的运行时间。通过将 user_id 存储为哈希,您可以将代码重写为如下所示:
SELECT count(distinct event_name, user_id)/count(distinct user_id) as "avg number of event types per user"FROM EVENTSWHERE event_date>current_date-7AND mod(hash(user_id),100) = 63
在此处,我们将用户拆分为 100 个伪随机分配并编号的存储桶,查看存储桶编号 63。随着计算复杂性的增加,以这种方式过滤数据变得更加有用,从而节省时间。

四舍五入处理数据

在没有 100% 准确率的情况下提高查询速度的一种简单方法是使用
approximate_count_distinct
。前面的查询将变为:
SELECT approximate_count_distinct(event_name, user_id)/ approximate_count_distinct(user_id) as "avg number of event types per user"FROM EVENTSWHERE mod(hash(user_id),100) = 63
我们可以通过使用较小的对象来改进此查询。 请查看“术语”以了解哪些表可供查询。以下是可在 UGS 中直接使用的表:
  • EVENTS
  • 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 来计算每天的总体失败率,并将 NUMBER_OF_EVENTS 计数存储在此表中。
SELECT event_date, round((SUM(case when event_name='missionFailed' then number_of_events else null end) / SUM(case when event_name='missionStarted' then number_of_events else null end))*100) as overallFailRateFROM FACT_EVENT_TYPE_USERS_DAYWHERE event_name in ('missionStarted','missionFailed')AND event_date>current_date-30GROUP BY event_dateORDER BY event_date

透视数据

使用新向导来透视、编辑和取消透视数据:

事件流

使用此查询可查看满足特定条件的玩家的事件流。这对 QA 和调试很有用,因为使用上面提到的 USERS 表,每次运行时都会得到不同的用户。 例如,如果您怀疑未正确记录装有特定游戏版本的玩家的事件,可以运行以下命令:
SELECT event_timestamp, event_name, EVENT_JSON:sessionID::STRINGFROM EVENTSWHERE client_version LIKE '0.0%'AND user_id IN (SELECT user_idFROM USERSWHERE start_date BETWEEN '2022-07-01' AND '2022-07-08'LIMIT 1 —- pull out just one user)ORDER BY event_timestamp

SQL Data Explorer(SQL 数据资源管理器)可查询的表

通过 SQL Data Explorer(SQL 数据资源管理器)可以访问许多表。

EVENTS:

此表列出从应用程序发送的所有事件。特定于事件的参数可以作为 JSON 对象在 EVENT_JSON 列中找到。由于参数存储为 JSON 对象,因此需要解析内容才能对其进行查询。解析参数的示例可在此代码仓库中包含的示例中看到。您还可以通过输入参数名称并按 Tab 键自动补全语法来获取语法以分析参数。此表每 1-2 小时更新一次。 列: UNITY_ENVIRONMENT_NAME (TEXT) UNITY_APPLICATION_NAME (TEXT) EVENT_ID (NUMBER) EVENT_JSON (VARIANT) AGE_GROUP (TEXT) ACQUSITION_CHANNEL (TEXT) MAIN_EVENT_ID (NUMBER) PLATFORM (TEXT) EVENT_DATE (DATE) EVENT_LEVEL (NUMBER) CLIENT_VERSION (TEXT) USER_ID (TEXT) USER_COUNTRY (TEXT) EVENT_TIMESTAMP (TIMESTAMP) PLAYER_START_DATE (DATE) EVENT_NAME (TEXT) GENDER (TEXT)

USERS:

此表列出过去发送过事件的所有用户。对于每个用户,这些列包含各种有用的指标。具体而言,在指标列下,有一些使用 SQL Analytics 函数计算的指标。此表每 3-4 小时更新一次。 列: UNITY_ENVIRONMENT_NAME (TEXT) UNITY_APPLICATION_NAME (TEXT) ACQUISITION_CHANNEL (TEXT) BIRTH_YEAR (INTEGER) MESSAGE_COUNTS (VARIANT) COUNTRY (TEXT) LAST_LOCALE (TEXT) LAST_SESSION_ID (TEXT) START_DATE (DATE) DDNA_CROSS_GAME_USER_ID (TEXT) IS_SDK_NATIVE (INTEGER) CREATED_TIMESTAMP (TIMESTAMP) LAST_PLATFORM (TEXT) LAST_UPDATED_TIMESTAMP (TIMESTAMP) COHORTS (TEXT) LAST_ANDROID_REGISTRATION_ID (TEXT) LAST_PUSH_NOTIFICATION_TOKEN (TEXT) METRICS (VARIANT) GENDER (TEXT) USER_ID (TEXT) CUSTOM_VALUES (VARIANT) UNITY_CAMPAIGNS (VARIANT) LAST_EVENT_TIMESTAMP (TIMESTAMP) LAST_TIMEZONE_OFFSET (TEXT) LAST_SEEN_TIMESTAMP (TIMESTAMP)

FACT_USER_SESSIONS_DAY

此表包含每个用户会话的记录。每条记录都包含该会话的各种用户级聚合 KPI。如果此表中记录的任何维度(不包括聚合维度)在会话期间发生更改(例如,AGE_GROUP 或 GENDER),则将为该会话创建新记录。此表每 1-2 小时更新一次。 列: UNITY_ENVIRONMENT_NAME (TEXT) UNITY_APPLICATION_NAME (TEXT) MISSION_ABORTED (INTEGER) CLIENT_VERSION (TEXT) AGE_GROUP (TEXT) MISSIONS_FAILED (INTEGER) INVITES_ACCEPTED (INTEGER) PLAYER_START_DATE (DATE) MISSIONS_COMPLETED (INTEGER) NUMBER_OF_EVENTS (INTEGER) USER_COUNTRY (TEXT) INVITES_SENT (INTEGER)

FACT_EVENT_TYPE_USERS_DAY:#

此表列出用户在一天内记录的所有事件,以及他们发送每个事件的次数。此表每 1-2 小时更新一次。 列: UNITY_ENVIRONMENT_NAME (TEXT) UNITY_APPLICATION_NAME (TEXT) GENDER (TEXT) CLIENT_VERSION (TEXT) EVENT_DATE (DATE) NUMBER_OF_EVENTS (INTEGER) PLATFORM (TEXT) ACQUISITION_CHANNEL (TEXT) INSERTED_TIMESTAMP (TIMESTAMP) USER_ID (TEXT) AGE_GROUP (TEXT) EVENT_NAME (TEXT) PLAYER_START_DATE (DATE) USER_COUNTRY (TEXT)

FACT_WAU_USERS:

此表列出过去七天发送过事件的所有用户。此表每 1-2 小时更新一次。 列: UNITY_ENVIRONMENT_NAME (TEXT) UNITY_APPLICATION_NAME (TEXT) PLAYER_START_DATE (DATE) USER_ID (TEXT) INSERTED_TIMESTAMP (TIMESTAMP) EVENT_DATE (DATE) USER_COUNTRY (TEXT) PLATFORM (TEXT) GENDER (TEXT) ACQUISITION_CHANNEL (TEXT) CLIENT_VERSION (TEXT) AGE_GROUP (TEXT)

FACT_MAU_USERS

此表列出过去 30 天发送过事件的所有用户。此表每 1-2 小时更新一次。 列: UNITY_ENVIRONMENT_NAME (TEXT) UNITY_APPLICATION_NAME (TEXT) PLAYER_START_DATE (DATE) USER_ID (TEXT) INSERTED_TIMESTAMP (TIMESTAMP) EVENT_DATE (DATE) USER_COUNTRY (TEXT) PLATFORM (TEXT) GENDER (TEXT) ACQUISITION_CHANNEL (TEXT) CLIENT_VERSION (TEXT) AGE_GROUP (TEXT) 如需了解可用于通过上述表访问数据的 SQL 查询示例,请参阅 SQL Data Explorer(SQL 数据资源管理器)说明书