数据资源管理器高级模式入门
重要
数据资源管理器功能以公共预览版提供。 随着我们继续收集反馈并优化客户使用,我们预计将对其进行持续的更改。
数据资源管理器高级模式专为使用 Azure 数据资源管理器查询语言 (一种针对即席数据浏览而优化的类似 SQL 的语言)的更复杂的查询和更深入的见解而设计。 要了解如何编写非技术查询,请参阅数据资源管理器入门基本模式教程。
创作自定义查询
若要开始在高级模式下创作自己的查询,请务必首先了解要访问的数据的形状。
events.all 表
events.all
表是所有传入事件的默认目标。 它是一个半结构化表,其中的列包含常见值(如时间和事件名称)。 你将快速熟悉 EventData 列,该列包含完整的原始 JSON 有效负载,并且在几乎所有查询中都很有用。 可以阅读有关 events.all 表的以下文档。
查询的解析
查询表达式最常以表的名称开头。 后跟管道分隔符(|)。 接下来是一个或多个运算符。 每个运算符由管道分隔符分隔。
根据首选项,可以在单行上表示查询,也可以在每个管道分隔符之前使用行返回。 它对查询本身没有影响。
"查询"窗格可以包含多个查询。 这样就可以轻松地从简单的表达式开始,验证它是否运行,并基于它进行构建。
空白行将一个查询与另一个查询分开。 光标位置确定按“运行”按钮时运行的查询。 还可以突出显示查询的一部分以仅运行该表达式。
生成第一个查询
现在,让我们从头开始创作第一个查询。 可以在"查询"窗格中键入表名。 但我们将使用一些快捷方式。 在"资源"窗格中查找 events.all
表。 可能需要通过单击箭头来扩展游戏 ID 数据库。
找到 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
示例查询
我们仅对可在资源管理器中创作的查询类型的图面进行了划定。 可以通过按"这是什么"从"资源管理器"页加载更多示例查询。 选择每个示例查询以演示一些可用的各种运算符,以及如何将它们应用于实际问题。
注意
由于数据的形状可能不同于我们的演示数据集,因此可能需要修改示例查询以针对方案运行。
限制
管理资源管理器查询使用情况有两个限制:
最大查询运行时:不允许单个查询运行超过 30 秒。 如果超出此限制,查询将终止,你将收到错误消息。
间隔用法:每个给定的 10 分钟间隔允许每个游戏累积总运行时 3 分钟。 如果超出此限制,你将收到错误消息,并且在运行其他查询之前需要等待。
数据保留
默认情况下,数据资源管理器查询在热存储上运行,可以在管理工具中进行配置。 搜索超过存储在热存储中的数据的查询的运行时间明显延长,并且可能会超时。