> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Explorer 高级模式入门

> 学习在高级模式下使用 Kusto 查询语言针对 events.all 表编写自定义 PlayFab Data Explorer 查询，以获得更深入的分析。

<Info>
  Data Explorer 功能处于公共预览阶段。我们预计在持续收集反馈
</Info>

并针对客户使用情况进行优化的过程中，会对其进行持续变更。

Data Explorer 高级模式旨在使用 [Azure Data Explorer 查询语言](https://learn.microsoft.com/en-us/azure/data-explorer/write-queries)（一种针对即席数据探索进行优化的类 SQL 语言）进行更复杂的查询和更深入的洞察。要学习如何编写非技术性查询，请参阅 [Data Explorer 基本模式入门](/services/playfab/data-analytics/learn-data/data-explorer/getting-started-with-data-explorer-basic)教程。

## 编写自定义查询

要开始在高级模式下编写自己的查询，首先了解你所访问数据的形态非常重要。

### events.all 表

`events.all` 表是所有传入事件的默认目标。它是一个单一的半结构化表，包含时间、事件名称等常见值的列。你会很快熟悉 EventData 列，它包含完整的原始 JSON 负载，几乎在所有查询中都很有用。你可以阅读关于 [events.all 表](/services/playfab/data-analytics/acting-data/schemas-events-all)的以下文档。

### 查询的结构

一个查询表达式通常以表名开头，后跟管道分隔符 (|)。
接下来是一个或多个运算符。每个运算符之间用管道分隔符分隔。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer4-02.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=d5e7d0ee878b379a5394c91503848ae5" alt="表达式" width="1893" height="530" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer4-02.png" />

出于偏好，查询可以写在一行中，也可以在每个管道分隔符之前使用换行符。对查询本身没有影响。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer5-02.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=35e6290c6672fcc5d4213851e8bb77a0" alt="查询窗格" width="1893" height="530" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer5-02.png" />

查询窗格可以包含多个查询。这样便于从一个简单的表达式开始，验证它可以运行，然后再进行扩展。

一个空行将一个查询与另一个查询分开。你的光标位置决定按下"运行"按钮时运行哪个查询。你也可以突出显示查询的一部分，仅运行该部分表达式。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer6-02.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=8dc281806663ec24ce18194a630a6f6a" alt="运行" width="1893" height="530" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer6-02.png" />

### 构建你的第一个查询

现在让我们从头开始编写你的第一个查询。你可以在查询窗格中输入表名。但我们要使用一个小捷径。在资源窗格中找到 `events.all` 表。你可能需要通过点击箭头来展开你的标题 ID 数据库。

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer7-01.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=402ea5610105562cc10521a401070380" alt="Events.all 表" width="3000" height="1673" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer7-01.png" />

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

<Note>
  在预览版中，你需要手动添加表名周围的方括号和单引号。此不便之处的修复正在进行中。
</Note>

```json theme={null}
['events.all']
| 
```

请注意名称周围的方括号和单引号。当表或列名包含 "." 时都需要它们。你的光标现在处于编写第一个运算符的正确位置。让我们开始使用 take 运算符。

```json theme={null}
['events.all']
| take 100
```

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

在结果窗格中，选择顶行。使用右箭头，导航到 FullName\_Name 列。这是事件的名称。向下按箭头，直到你找到一个 `player_logged_in` 事件。找到后，向右按箭头到 EventData 列并双击。你现在应该看到：

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer8-01.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=c8ace0436fb553607c012902fdeb7a79" alt="事件数据列" width="3000" height="1673" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer8-01.png" />

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

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

```json theme={null}
['events.all']
| where FullName_Name == 'player_logged_in'
| where Entity_Id == 'paste from clipboard here'
```

<Tip>
  双等号用于评估字符串等价性。字符串开头和结尾的单引号用于分隔字符串。
</Tip>

运行查询，你会看到结果窗格仅显示所选玩家的 player\_logged\_in 事件。你可以使用点表示法通过在每层之间添加一个点来引用 JSON 层次结构的多个嵌套层。

现在让我们创建第二个查询来按区域对玩家登录进行分组。在不删除你已经编写的内容的情况下，按两次回车。让我们使用 "//" 为下一个查询添加注释。注释不会被执行，有助于跟踪每个查询背后的意图。

```json theme={null}
//Player logins by platform
```

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

```json theme={null}
//Player logins by platform
['events.all']
| where Timestamp > ago(30d)
| where FullName_Name == 'player_logged_in'
```

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

```json theme={null}
['events.all']
| where Timestamp > ago(3d)
| where FullName_Name == 'player_logged_in'
| distinct Entity_Id
```

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

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer9-03.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=4b92787156e8ca61006503aa4edeb049" alt="记录" width="1888" height="509" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer9-03.png" />

现在让我们获取每个平台登录的玩家计数。为此，我们需要按 EventData JSON 中的 platform 属性对实体 ID 进行不同计数分组。这需要 `summarize` 运算符。因为 `summarize` 不支持动态类型，我们还需要将 platform 转换为字符串。

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

让我们以一个精彩的收尾结束。只需再添加一个表达式，我们就可以将结果渲染为柱状图。

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

<img src="https://mintcdn.com/microsoft-4404708b/MjJ0-cTsb1bpaMcX/images/playfab/data-analytics/learn-data/data-explorer/Explorer10-01.png?fit=max&auto=format&n=MjJ0-cTsb1bpaMcX&q=85&s=3d0e560318ada4b6f18f158aeff7d5f6" alt="查询" width="3000" height="1673" data-path="images/playfab/data-analytics/learn-data/data-explorer/Explorer10-01.png" />

## 示例查询

我们只是初步了解了 Explorer 中可以编写的查询类型。可以通过在 Explorer 页面上按"What's This"加载更多示例查询。每个示例查询都是为了演示一些可用的各种运算符以及如何将它们应用于现实世界的问题。

<Note>
  因为你的数据形态可能与我们的演示数据集不同，你可能需要修改示例查询以适应你的场景。
</Note>

## 限制

有两个限制管理 Explorer 查询的使用：

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

2. 时段用量：每个标题在任何给定的 10 分钟时段内允许累计运行三分钟。如果超过此限制，你将收到错误消息，并且需要等待才能运行其他查询。

## 数据保留

默认情况下，Data Explorer 查询运行在热存储上，可以在管理工具中进行配置。搜索超出热存储中所存数据的查询运行时间要长得多，并可能超时。


## Related topics

- [Data Explorer 快速入门](/zh-CN/services/playfab/data-analytics/learn-data/data-explorer/quickstart.md)
- [Data Explorer 基本模式入门](/zh-CN/services/playfab/data-analytics/learn-data/data-explorer/getting-started-with-data-explorer-basic.md)
- [Data Explorer](/zh-CN/services/playfab/data-analytics/learn-data/data-explorer/index.md)
- [连接到 Azure Data Explorer](/zh-CN/services/playfab/data-analytics/export-data/data-connection-adx.md)
- [操作和规则快速入门](/zh-CN/services/playfab/data-analytics/acting-data/action-rules-quickstart.md)
