> ## 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 고급 모드 시작하기

> 더 심층적인 분석을 위해 events.all 테이블에 대해 Kusto Query Language를 사용하여 고급 모드에서 사용자 지정 PlayFab Data Explorer 쿼리를 작성하는 방법을 알아보세요.

<Info>
  Data Explorer 기능은 공개 미리 보기입니다. 피드백을 계속 수집하고
</Info>

고객 사용을 위해 최적화하는 과정에서 지속적으로 변경될 것으로 예상됩니다.

Data Explorer 고급 모드는 임시 데이터 탐색에 최적화된 SQL 유사 언어인 [Azure Data Explorer 쿼리 언어](https://learn.microsoft.com/en-us/azure/data-explorer/write-queries)를 사용하여 더 복잡한 쿼리와 심층적인 인사이트를 얻도록 설계되었습니다. 비기술적 쿼리를 작성하는 방법을 알아보려면 [Data Explorer 기본 모드 시작하기](/services/playfab/data-analytics/learn-data/data-explorer/getting-started-with-data-explorer-basic) 자습서를 참조하세요.

## 사용자 지정 쿼리 작성

고급 모드에서 자체 쿼리를 작성하려면, 액세스하는 데이터의 형태를 먼저 이해하는 것이 중요합니다.

### events.all 테이블

`events.all` 테이블은 들어오는 모든 이벤트의 기본 대상입니다. 시간과 이벤트 이름 등 공통 값에 대한 열이 있는 단일 반구조화 테이블입니다. 원본 JSON 페이로드 전체를 포함하고 거의 모든 쿼리에서 유용한 EventData 열에 곧 익숙해질 것입니다. [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" />

쿼리 창에는 여러 쿼리를 포함할 수 있습니다. 이렇게 하면 간단한 식으로 시작하여 실행되는지 확인하고 그 위에 구축하기 쉽습니다.

빈 줄로 쿼리를 서로 구분합니다. "Run" 버튼을 누르면 커서 위치에 따라 어떤 쿼리가 실행될지 결정됩니다. 해당 식만 실행하도록 쿼리의 일부를 강조 표시할 수도 있습니다.

<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" />

### 첫 번째 쿼리 작성

이제 처음부터 첫 번째 쿼리를 작성해 봅시다. 쿼리 창에 테이블 이름을 입력할 수 있습니다. 하지만 약간의 지름길을 사용해봅시다. Resources 창에서 `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="Event Data 열" 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 계층 구조를 참조할 수 있습니다.

이제 지역별로 플레이어 로그인을 그룹화하는 두 번째 쿼리를 만들어 봅시다. 작성한 내용을 삭제하지 않고 return을 두 번 누릅니다. "//"를 사용하여 다음 쿼리에 주석을 추가해 봅시다. 주석은 실행되지 않으며 각 쿼리의 의도를 추적하는 데 도움이 됩니다.

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

다시 한 번, Resources 창에서 events.all 테이블을 두 번 클릭합니다. 이번에는 지난 3일간만 쿼리 범위를 지정하기 위해 식에 시간 구분자를 추가해봅시다.

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

이 쿼리를 실행하여 지난 3일 동안의 모든 로그인 이벤트 전체 목록을 가져옵니다. 그러나 우리는 얼마나 많은 고유한 플레이어가 로그인했는지 알고 싶으며, 이벤트 수는 아닙니다. 이를 위해 Entity ID로 distinct 연산자를 사용합니다.

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

이 쿼리는 지난 3일 동안 로그인한 Entity 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 속성으로 그룹화된 Entity ID의 distinct 수가 필요합니다. 이를 위해서는 `summarize` 연산자가 필요합니다. `summarize`는 dynamic 유형을 지원하지 않으므로 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분 간격이든 총 누적 실행 시간 3분이 허용됩니다. 이 제한을 초과하면 오류 메시지가 표시되고, 추가 쿼리를 실행하기 전에 기다려야 합니다.

## 데이터 보존

기본적으로 Data Explorer 쿼리는 hot 스토리지에서 실행되며, 이는 관리 도구에서 구성할 수 있습니다. hot 스토리지에 저장된 데이터를 넘어서 검색하는 쿼리는 실행 시간이 훨씬 길어지고 시간 초과될 수 있습니다.


## Related topics

- [Data Explorer 빠른 시작](/ko/services/playfab/data-analytics/learn-data/data-explorer/quickstart.md)
- [Data Explorer 기본 모드 시작하기](/ko/services/playfab/data-analytics/learn-data/data-explorer/getting-started-with-data-explorer-basic.md)
- [Data Explorer](/ko/services/playfab/data-analytics/learn-data/data-explorer/index.md)
- [터치 시작하기](/ko/build/core-features/common/game-streaming/game-streaming-getting-started-with-touch.md)
- [PC용 MSIXVC2 패키징 시작하기](/ko/build/core-features/common/packaging/overviews/packaging-getting-started-for-PC-msixvc2.md)
