Unity Analytics SQL Data Explorer(SQL 数据资源管理器) Write custom SQL queries to analyze your Analytics data and create visualizations.
使用 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 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 数据资源管理器)说明书 。