数据资源管理器高级模式入门

重要

数据资源管理器功能以公共预览版提供。 随着我们继续收集反馈并优化客户使用,我们预计将对其进行持续的更改。

数据资源管理器高级模式专为使用 Azure 数据资源管理器查询语言 (一种针对即席数据浏览而优化的类似 SQL 的语言)的更复杂的查询和更深入的见解而设计。 要了解如何编写非技术查询,请参阅数据资源管理器入门基本模式教程。

创作自定义查询

若要开始在高级模式下创作自己的查询,请务必首先了解要访问的数据的形状。

events.all 表

events.all表是所有传入事件的默认目标。 它是一个半结构化表,其中的列包含常见值(如时间和事件名称)。 你将快速熟悉 EventData 列,该列包含完整的原始 JSON 有效负载,并且在几乎所有查询中都很有用。 可以阅读有关 events.all 表的以下文档。

查询的解析

查询表达式最常以表的名称开头。 后跟管道分隔符(|)。 接下来是一个或多个运算符。 每个运算符由管道分隔符分隔。

表达

根据首选项,可以在单行上表示查询,也可以在每个管道分隔符之前使用行返回。 它对查询本身没有影响。

查询窗格

"查询"窗格可以包含多个查询。 这样就可以轻松地从简单的表达式开始,验证它是否运行,并基于它进行构建。

空白行将一个查询与另一个查询分开。 光标位置确定按“运行”按钮时运行的查询。 还可以突出显示查询的一部分以仅运行该表达式。

运行

生成第一个查询

现在,让我们从头开始创作第一个查询。 可以在"查询"窗格中键入表名。 但我们将使用一些快捷方式。 在"资源"窗格中查找 events.all 表。 可能需要通过单击箭头来扩展游戏 ID 数据库。

Events.all 表

找到 events.all 表后,双击表名。 你会注意到此表达式已添加到"查询"窗格中。

注意

在预览版中,需要手动添加表格名称周围的方括号和单引号。 正在修复由此造成的不便。

['events.all']
| 

记下名称周围的方括号和单引号。 每当表或列名称包含"."时。 这些是必需的。 光标现在位于创作第一个运算符的正确位置。 让我们开始使用 take 运算符。

['events.all']
| take 100

运行此查询。 请注意,"结果"窗格现在显示 100 行原始数据。

在“结果”窗格中,选择顶部行。 使用向右键导航到FullName_Name列。 这是事件的名称。 向下箭头,直到找到 player_logged_in 事件。 找到一个后,向右箭头指向 EventData 列,然后双击。 现在应看到以下内容:

事件数据列

查询可以使用点表示法 (.) 引用 EventData JSON 中的任何属性。 现在可以通过修改查询来仅返回单个玩家的player_logged_in事件来尝试此操作。 双击 EntityID GUID 并将其复制到剪贴板。

现在按如下所示更新查询,并插入复制的 GUID:

['events.all']
| where FullName_Name == 'player_logged_in'
| where Entity_Id == 'paste from clipboard here'

提示

双等号用于计算字符串等效性。 开头和结尾的单引号将字符串设置为分隔。

运行查询,你将看到"结果"窗格仅显示所选玩家player_logged_in事件。 只需在每个层之间添加一个点,即可使用点表示法引用 JSON 层次结构的多个嵌套层。

现在,让我们创建第二个查询,以便按区域对玩家登录进行分组。 在不删除已写入的内容的情况下,请按两次 return。 让我们使用"//"向下一个查询添加注释。 注释不会执行,并且有助于跟踪每个查询背后的意向。

//Player logins by platform

再次双击资源窗格中的 events.all 表。 这一次,让我们向表达式添加时间分隔符,以便将查询的范围限定到过去三天。

//Player logins by platform
['events.all']
| where Timestamp > ago(30d)
| where FullName_Name == 'player_logged_in'

运行此查询以获取过去三天内所有登录事件的完整列表。 但是,我们希望知道登录了多少个不同的玩家,而不是事件计数。 为此,我们将按实体 ID 使用非重复运算符。

['events.all']
| where Timestamp > ago(3d)
| where FullName_Name == 'player_logged_in'
| distinct Entity_Id

此查询返回在过去三天内登录的实体 ID 的列表。 "结果"窗格显示记录数,以便我们可以查看总计。

记录

现在,让我们获取已从每个平台登录的玩家计数。 为此,我们需要按 EventData JSON 中的平台属性分组的实体 ID 的非重复计数。 这需要 summarize 运算符。 由于 summarize 不支持动态类型,因此我们还需要将平台强制转换为字符串。

['events.all']
| where Timestamp > ago(3d)
| where FullName_Name == 'player_logged_in'
| summarize dcount(Entity_Id) by tostring(EventData.Platform)

让我们一起完成此操作。 通过添加单个附加表达式,我们可以将结果呈现为柱形图。

['events.all']
| where Timestamp > ago(3d)
| where FullName_Name == 'player_logged_in'
| summarize dcount(Entity_Id) by tostring(EventData.Platform)
| render columnchart

查询

示例查询

我们仅对可在资源管理器中创作的查询类型的图面进行了划定。 可以通过按"这是什么"从"资源管理器"页加载更多示例查询。 选择每个示例查询以演示一些可用的各种运算符,以及如何将它们应用于实际问题。

注意

由于数据的形状可能不同于我们的演示数据集,因此可能需要修改示例查询以针对方案运行。

限制

管理资源管理器查询使用情况有两个限制:

  1. 最大查询运行时:不允许单个查询运行超过 30 秒。 如果超出此限制,查询将终止,你将收到错误消息。

  2. 间隔用法:每个给定的 10 分钟间隔允许每个游戏累积总运行时 3 分钟。 如果超出此限制,你将收到错误消息,并且在运行其他查询之前需要等待。

数据保留

默认情况下,数据资源管理器查询在热存储上运行,可以在管理工具中进行配置。 搜索超过存储在热存储中的数据的查询的运行时间明显延长,并且可能会超时。