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 天数据运行。

使用得到的结果绘制图形:

![](<../images/Copy of SQLBarChart.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 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 查询#查询>)。