SQL Data Explorer(SQL 数据资源管理器)
使用 SQL Data Explorer(SQL 数据资源管理器)可以编写和执行针对数据的只读 SQL 查询,将结果绘制成不同类型的视图,并将这些结果添加到后台中。您可以获得其他 Analytics 产品可能无法提供的见解信息。请参阅 [SQL 说明书](<https://github.com/Unity-Technologies/UGS-SQL-Cookbook/tree/main/SQL Data Explorer 查询>)中的“配方”集合。查询是针对 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 EVENTS
where EVENT_DATE > CURRENT_DATE-7
group by EVENT_DATE
order 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 EVENTS
WHERE 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 efficiency
GROUP BY missionID
ORDER BY missionID
请注意,我们在此处使用了日期过滤器 event_date>current_date-30
来限制查询,否则该查询将基于 SQL Data Explorer(SQL 数据资源管理器)中默认可查询的 365 天数据运行。
使用得到的结果绘制图形:

请注意,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 EVENTS
WHERE 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 EVENTS
WHERE event_date>current_date-7
AND 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 EVENTS
WHERE 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 overallFailRate
FROM FACT_EVENT_TYPE_USERS_DAY
WHERE event_name in ('missionStarted','missionFailed')
AND event_date>current_date-30
GROUP BY event_date
ORDER BY event_date
透视数据
使用新向导来透视、编辑和取消透视数据:
事件流
使用此查询可查看满足特定条件的玩家的事件流。这对 QA 和调试很有用,因为使用上面提到的 USERS 表,每次运行时都会得到不同的用户。
例如,如果您怀疑未正确记录装有特定游戏版本的玩家的事件,可以运行以下命令:
SELECT event_timestamp
, event_name
, EVENT_JSON:sessionID::STRING
FROM EVENTS
WHERE client_version LIKE '0.0%'
AND user_id IN (
SELECT user_id
FROM USERS
WHERE 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 数据资源管理器)说明书](<https://github.com/Unity-Technologies/UGS-SQL-Cookbook/tree/main/SQL Data Explorer 查询#查询>)。