> For the complete documentation index, see [llms.txt](https://docs.panther.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.panther.com/ko/search/data-explorer.md).

# 데이터 탐색기

## 개요

Panther Console의 Data Explorer에서 정규화된 Panther 데이터를 보고 자동 완성 기능이 있는 SQL 쿼리를 실행할 수 있습니다.

Data Explorer에서 다음을 할 수 있습니다:

* 수집된 로그 데이터, 룰 일치 항목을 탐색하고 모든 데이터에서 표준 필드를 검색합니다
* 자연어 설명에서 AI를 사용해 SQL 쿼리를 생성합니다
* [검색을 저장하고, 필요에 따라 예약할 수 있습니다](#how-to-manage-saved-searches-in-data-explorer)
  * [예약된 검색](/ko/search/scheduled-searches.md) 룰 엔진을 통해 실행할 수 있습니다
* 생성 [템플릿 검색과 매크로](/ko/search/scheduled-searches/templated-searches.md)
* 공유 가능한 링크를 통해 팀과 결과를 공유하거나, 결과를 CSV로 다운로드합니다
* JSON의 전체 행을 선택하여 룰 엔진에서 단위 테스트로 사용합니다
* SQL 없이 테이블 데이터를 미리 보고, 결과를 필터링하고, 열을 요약합니다
* 다음을 통해 Data Explorer 접근을 제한합니다 [역할 기반 접근 제어](/ko/system-configuration/rbac.md) (RBAC)

{% hint style="warning" %}
다음을 포함하는 Data Explorer 결과: `빅정수` 32비트 정밀도를 초과하는 데이터는 JSON 렌더링에 대한 브라우저 제한으로 인해 반올림되어 표시됩니다. 이러한 값을 정밀도 손실 없이 표시하려면 SQL 명령에서 문자열로 캐스팅하세요. 데이터 레이크에 저장된 실제 데이터에는 영향을 주지 않습니다.
{% endhint %}

## Data Explorer의 Snowflake 쿼리 구문

Data Explorer에서 실행되는 쿼리는 Snowflake의 다음에 설명된 Snowflake SQL 구문을 사용해야 합니다: [SQL 명령 참조](https://docs.snowflake.com/en/sql-reference-commands) 문서.

다음에 대해서도 알아볼 수 있습니다:

* Data Explorer 검색 모범 사례, 다음에서 [Data Explorer에서 효과적으로 검색하기](#searching-effectively-in-data-explorer)
* 방법 [Data Explorer에서 중첩 필드를 참조하는 방법](#referencing-nested-fields-in-data-explorer)
* 사용 방법 [Data Explorer 매크로](#how-to-use-data-explorer-macros)

### Data Explorer에서 중첩 필드 참조하기

JSON 객체를 탐색할 때 키 이름이 다음을 따르지 않으면 [Snowflake SQL 식별자 룰](https://docs.snowflake.com/en/sql-reference/identifiers-syntax)—예를 들어 마침표나 공백이 포함된 경우—값을 큰따옴표로 묶으세요.

예를 들어, 다음 필드에 액세스하는 쿼리를 실행하려면 `context.ip_address` 다음의 [IPInfo Privacy Enrichment Provider](/ko/enrichment/ipinfo.md), 다음과 같이 작성합니다 `p_enrichment:ipinfo_privacy:\"context.ip_address\"`.

Snowflake의 다음에서 자세히 알아보세요: [반구조화된 데이터 쿼리](https://docs.snowflake.com/en/user-guide/querying-semistructured) 문서.

### Data Explorer에서 효과적으로 검색하기

결과가 최대한 빠르게 반환되도록 다음 모범 사례를 따르는 것이 좋습니다:

* **다음을 사용하세요: `LIMIT` 절**
  * 다음을 사용하세요. `LIMIT` 절을 사용해 쿼리가 반환할 레코드 수를 지정하세요. 쿼리 결과를 제한하면 더 빠르게 결과를 반환할 수 있습니다. Panther는 기본적으로 결과 크기를 100MB로 제한합니다.
* **시간 범위 필터를 사용하세요**
  * Snowflake는 S3의 파일을 다음과 같이 그룹화합니다: [마이크로파티션](https://docs.snowflake.com/en/user-guide/tables-clustering-micropartitions.html). 시간 범위로 필터링하면(예: `p_event_time` 또는 `p_occurs_since()`) 쿼리에서 Snowflake는 특정 파티션만 액세스하면 되므로 결과가 더 빠르게 반환됩니다.
  * 매크로에 대한 자세한 내용은 아래 섹션을 참조하세요:[ Data Explorer 매크로 사용 방법](#how-to-use-data-explorer-macros).
* **p\_any 필드를 사용하세요**
  * 로그 수집 중 Panther는 일반적인 보안 지표를 다음에 추출합니다: `p_any` 필드. 다음 `p_any` 필드는 최적화된 열에 저장됩니다. 이러한 필드는 모든 데이터 소스의 속성 이름을 표준화하여 빠른 데이터 상관 분석을 가능하게 합니다.
  * 자세한 내용은 [표준 필드](/ko/search/panther-fields.md).
* **특정 필드를 쿼리하기**
  * 다음을 사용하면 `SELECT * FROM ...` 모든 열을 가져오므로 쿼리가 느려질 수 있습니다. 가능하면 조사에 필요한 필드만 쿼리하세요. 예를 들어, `SELECT user_name, event_name FROM ...`.
* **요약**
  * 요약은 전체 레코드를 쿼리하는 것보다 더 빠르게 실행됩니다. 이는 특히 긴 기간의 로그를 조사할 때, 또는 조사 중인 기간에 얼마나 많은 데이터가 있는지 확실하지 않을 때 유용합니다.
  * 전체 데이터 세트를 쿼리하는 대신 다음을 사용할 수 있습니다: `count(*)` 및 `GROUP BY` 시간 범위를 사용하면 더 빠르게 실행되며, 이후 더 좁은 시간대를 쿼리하는 데 도움이 됩니다.
  * 예를 들어, 하루를 되돌아보고 `GROUP BY hour`, 데이터에서 조사해야 할 특정 시간을 파악할 수 있습니다. 그런 다음 해당 시간에 대해 쿼리를 실행하여 결과를 더 좁힐 수 있습니다.

위의 모범 사례를 따른 후에도 쿼리가 여전히 느리게 실행되면 다음 단계를 권장합니다:

* 행 수를 계산하여 쿼리 중인 데이터의 양을 확인하세요.
  * 이를 통해 데이터 양이 많아서 시간이 더 걸리는 것이 예상되는 상황인지 판단하는 데 도움이 됩니다.
* 쿼리하는 시간 범위를 줄이세요.
* 추가 도움이 필요하면 Panther Support 팀에 문의하세요.

## **Data Explorer 사용 방법**

### **Data Explorer에 액세스**

* Panther Console의 왼쪽 탐색 모음에서 **검색**, 그런 다음 다음을 선택합니다 **데이터 탐색기** 탭.

<figure><img src="/files/b3eac15b6d981467126bf36b439de253ac97d289" alt="The Data Explorer page has a column on the left labeled Tables. In the middle of the page, there is a text editor labeled New Query. The bottom of the page has tabs labeled Results and Summarize."><figcaption></figcaption></figure>

### 테이블 데이터 미리 보기

SQL을 작성하지 않고 예시 테이블 데이터를 미리 볼 수 있습니다. 해당 로그 소스의 샘플 SQL 쿼리를 생성하려면 테이블 유형 옆의 눈 아이콘을 클릭하세요:

<figure><img src="/files/8f2ee605083a2f546a11615df8bd5c1501350ce9" alt="In Data Explorer, under the Tables column, each log source has an eye icon next to it. The image shows a red circle around the eye icons."><figcaption></figcaption></figure>

### Data Explorer 결과 필터링

SQL을 작성하지 않고 Data Explorer의 결과 집합에서 열을 필터링할 수 있습니다.

결과 테이블의 오른쪽 상단에서 다음을 클릭하세요: **열 필터링** 결과에 표시할 열을 선택합니다:

<figure><img src="/files/6e497a00a3b9fbd784b2600721742eacd8439891" alt="The Results tab of the Data Explorer shows there are 3202 Results. The Query Time was 528 ms, and the Data Scanned was 1.89MB. There is a select dropdown that has &#x22;Filter Columns (3)&#x22; selected, and a &#x22;Download CSV&#x22; button."><figcaption></figcaption></figure>

참고: 이 메커니즘을 통해 적용된 필터는 쿼리의 SQL SELECT 문에는 적용되지 않습니다.

### 열 데이터 요약

SQL을 작성하지 않고 Data Explorer의 결과 집합에서 열의 요약(빈도수)을 생성할 수 있습니다.

요약을 생성하려는 열에서 아래쪽 화살표를 클릭한 다음 **요약** 을 눌러 요약 결과를 별도 탭에 표시합니다.

<figure><img src="/files/65f250db5728d94f5403b902a11c5831a4bf3b2e" alt="The Results tab of the Data Explorer shows there are 3202 Results. The Query Time was 528 ms, and the Data Scanned was 1.89MB. There is a select dropdown that has &#x22;Filter Columns (3)&#x22; selected, and a &#x22;Download CSV&#x22; button. The first result of the query is shown in table format. The following fields are visible: p_timeline, type, timestamp, elb, clientIp, clientPort, targetIp, targetPort, requestProcessingTime, and targetProcessingTime."><figcaption></figcaption></figure>

쿼리 실행 후 처음으로 요약을 생성하려면 다음으로 전환한 다음 **요약** 탭으로 이동하여 드롭다운에서 열을 선택하면 됩니다.

<figure><img src="/files/8d96652f61b7cdee948fd26ebed299a43dd7f0bb" alt="In the Summarize tab, the type-ahead dropdown allows selecting a column to summarize"><figcaption></figcaption></figure>

선택한 열의 요약 결과는 Summary 탭에 표시되며, 결과를 가장 높은 빈도순 또는 가장 낮은 빈도순으로 정렬할 수 있습니다(기본값은 가장 높은 빈도순).

<figure><img src="/files/9eae72f8a467ee6e959333b2ec888dbd6e056980" alt="row_count represents the frequency of each unique clientIp in the result set"><figcaption></figcaption></figure>

다음 외에도 `row_count` 값이, 요약에는 다음도 표시됩니다 `first_seen` 및 `last_seen` 값. 결과 데이터에 다음이 포함되어 있으면 `p_event_time` [표준 필드](/ko/search/panther-fields.md).

## AI 기반 SQL 쿼리 생성

{% hint style="info" %}
이 기능을 사용하려면 다음이 필요합니다: **Panther AI 활성화** 설정이 활성화되어 있어야 합니다. 또한 사용자 역할에 다음 권한이 있어야 합니다: **Panther AI 실행** 권한.
{% endhint %}

Panther AI는 자연어를 사용하여 Data Explorer에서 SQL 쿼리를 생성하는 데 도움을 줄 수 있습니다. Panther AI는 쿼리 권한이 있는 로그 유형과 데이터만 액세스하며 읽기 전용 도구만 사용합니다. 쿼리를 실행하거나 데이터를 수정할 수는 없습니다.

AI 기반 SQL 쿼리 생성을 사용하려면:

1. Panther Console의 왼쪽 탐색 모음에서 **검색**, 그런 다음 다음을 선택합니다 **데이터 탐색기** 탭.
2. Panther AI 프롬프트에 쿼리하려는 내용을 자연어로 설명하세요. 예를 들면:
   * "지난 24시간 동안의 로그인 실패 시도를 보여줘"
   * "특정 사용자로부터의 모든 CloudTrail 이벤트를 찾아줘"
   * "소스 IP 주소별 이벤트 수를 알려줘"
3. 선호하는 추론 수준을 선택하려면 설정 아이콘을 클릭하세요:
   * **기본**: 빠르고 간결한 응답
   * **표준**: 균형 잡힌 분석(권장)
   * **고급**: 자세한 설명이 포함된 심층 분석
4. 다음 타일을 클릭하세요: **쿼리 생성** 아이콘을 클릭하거나 Enter 키를 눌러 SQL 쿼리를 생성합니다.
5. AI가 요청에 따라 SQL 쿼리를 생성합니다. 쿼리를 검토한 다음 다음을 클릭하세요: **쿼리 실행** 를 실행합니다.

<figure><img src="/files/39a657ebaa77afe87feb704249a49c8421e4367e" alt=""><figcaption></figcaption></figure>

#### 효과적인 프롬프트 팁

* **시간 범위를 구체적으로 지정하세요**: "지난 1시간의 이벤트" 또는 "2024-01-01과 2024-01-02 사이의 데이터"
* **특정 필드나 열을 언급하세요** "source\_ip로 group by" 또는 "event\_name에 'login'이 포함된 where"
* **테이블을 지정하세요** 특정 로그 유형을 쿼리하려는 경우: "CloudTrail events where..."
* **요약이나 집계를 요청하세요**: "사용자별 count", "상위 10개 소스 IP", "시간별 분류"

## Data Explorer 매크로 사용 방법

지원되는 백엔드 데이터베이스의 모든 테이블은 이벤트 시간 기준으로 파티셔닝되어 있어, 시간 필터를 사용할 때 더 나은 성능을 제공합니다.

효율성과 사용 편의성을 위해 Panther는 데이터베이스로 전송될 때 전체 표현식으로 확장되는 매크로를 제공합니다:

* [현재 시간: `p_current_timestamp`](#current-time-p_current_timestamp)
* [시간 범위 필터: `p_occurs_between`](#time-range-filter-p_occurs_between)
* [현재 시점으로부터의 시간 오프셋: `p_occurs_since`](#time-offset-from-present-p_occurs_since)
* [특정 시간 주변을 필터링: `p_occurs_around`](#filter-around-a-certain-time-p_occurs_around)

{% hint style="info" %}
이 매크로는 템플릿 매크로와 다릅니다. 템플릿 매크로에 대해 자세히 알아보려면 다음을 참조하세요: [템플릿 검색](/ko/search/scheduled-searches/templated-searches.md).
{% endhint %}

### 매크로 형식 <a href="#time-offset-format" id="time-offset-format"></a>

#### 시간 지속 형식 <a href="#time-offset-format" id="time-offset-format"></a>

일부 매크로는 시간 지속을 매개변수로 사용합니다. 이 지속의 형식은 양의 정수 뒤에 시간 단위를 나타내는 선택적 접미사가 오는 형태입니다. 접미사가 없으면 숫자는 초로 해석됩니다.

지원되는 접미사는 아래와 같습니다:

* `s, sec, second, seconds` — 매크로는 지정된 초를 더합니다
* `m, min, minute, minutes` — 매크로는 오프셋에 지정된 분을 더합니다
* `h, hr, hrs, hour, hours` — 매크로는 오프셋에 지정된 시간을 더합니다
* `d, day, days` — 매크로는 오프셋에 지정된 일을 더합니다
* `w, wk, week, weeks` — 매크로는 오프셋에 지정된 주 수를 더합니다
* 접미사가 감지되지 않으면 기본값은 초입니다

예:

* `'6 d'` - 6일
* `'2 weeks'` - 2주
* `900` - 900초
* `'96 hrs'` - 96시간

#### 타임스탬프 형식

시간 표현식이 팀에서 사용하는 데이터베이스 백엔드에서 파싱될 수 있는지 확인하세요. 기본 안전 시간 형식은 아마 다음과 비슷해야 합니다: `2021-01-02 15:04:05.000` 그리고 UTC 시간대로 간주됩니다.

### Data Explorer 매크로

#### 현재 시간: `p_current_timestamp`

`p_current_timestamp()`

이 매크로는 다음으로 확장됩니다: `current_timestamp` Data Explorer에서는 이렇게 되지만, 다음과 유사하게 [`p_occurs_since`](#time-offset-from-present-p_occurs_since), 예약된 쿼리에서 실행되면 쿼리의 예약 시간으로 확장됩니다(쿼리가 실제로 언제 실행되는지와 무관하게).

#### 시간 범위 필터: `p_occurs_between`

`p_occurs_between(startTime, endTime, [, tableAlias [, column]])`

* `startTime` - 다음 형식의 시간: [타임스탬프 형식](#timestamp-format), 검색 창의 시작을 나타냅니다
* `endTime` - 다음 형식의 시간: [타임스탬프 형식](#timestamp-format), 검색 창의 끝을 나타냅니다
* `tableAlias` - 제공되면 테이블 별칭으로 사용될 선택적 식별자
* `column` - 제공되면 열로 사용될 선택적 식별자
  * 없으면 기본 열은 `p_event_time`.
  * 다른 열을 지정하면(예: `p_parsed_time`)와 함께 `column` 는 쿼리 시간을 크게 늘릴 수 있습니다. 이에 대한 제한이 없으면 `p_event_time`, 전체 테이블이 검색됩니다.

이 매크로는 `p_occurs_between()` 시작 시간과 종료 시간을 다음 형식으로 받습니다: [타임스탬프 형식](#timestamp-format) 그리고 적절한 파티션을 사용하여 해당 시간 범위의 이벤트만 결과 집합에 필터링합니다(I/O를 최소화하고 쿼리를 가속화함).

이 매크로를 올바르게 사용하려면 다음과 같은 필터 안에 있어야 합니다: `WHERE` 절.

다음 Snowflake 명령에는 매크로가 포함되어 있습니다:

```sql
select p_db_name, count(*) as freq from panther_views.public.all_databases
where p_occurs_between(current_date - 1, current_timestamp)
group by p_db_name
limit 1000
```

매크로는 쿼리가 데이터베이스로 전송되기 전에 자동으로 확장됩니다. 확장 형식은 데이터베이스마다 다릅니다. Snowflake에서는 이 확장이 매우 간단합니다:

```sql
select p_db_name, count(*) as freq from panther_views.public.all_databases
where p_event_time between convert_timezone('UTC',current_date - 1)::timestamp_ntz
    and convert_timezone('UTC',current_timestamp)::timestamp_ntz
group by p_db_name
limit 1000
```

이 매크로는 선택적 테이블 별칭도 받습니다. 이는 다음과 같이 여러 테이블을 참조할 때 유용할 수 있습니다: `JOIN`:

```sql
select aws.awsRegion, ata.digestEndTime
from panther_logs.public.aws_cloudtrail as aws
join panther_logs.public.aws_cloudtraildigest as ata ON aws.awsRegion = ata.awsAccountId
where p_occurs_between('2023-01-01', '2023-06-30', aws)
limit 10
```

#### 현재 시점으로부터의 시간 오프셋: `p_occurs_since`

`p_occurs_since(offsetFromPresent [, tableAlias[, column]])`

* `offsetFromPresent` - 다음 형식의 표현식: [시간 지속 형식](#time-offset-format), 현재 시점을 기준으로 해석됩니다. 예를 들면 `'1 hour'`
* `tableAlias` - 제공되면 테이블 별칭으로 사용될 선택적 식별자
* `column` - 제공되면 열로 사용될 선택적 식별자
  * 없으면 기본 열은 `p_event_time`.
  * 다른 열을 지정하면(예: `p_parsed_time`)와 함께 `column` 는 쿼리 시간을 크게 늘릴 수 있습니다. 이에 대한 제한이 없으면 `p_event_time`, 전체 테이블이 검색됩니다.

이 매크로는 `p_occurs_since()` 다음 형식으로 지정된 오프셋 매개변수를 사용합니다: [시간 지속 형식](#time-offset-format) 그리고 적절한 파티션 또는 클러스터 키를 사용하여 현재 시간과 지정된 오프셋 사이의 이벤트만 결과 집합으로 필터링합니다(I/O를 최소화하고 쿼리를 가속화함).

이 매크로는 선택적 테이블 별칭도 받을 수 있으며, 이는 다음과 같이 여러 테이블을 참조할 때 유용할 수 있습니다: `JOIN`.

이 매크로를 올바르게 사용하려면 다음과 같은 필터 안에 있어야 합니다: `WHERE` 절.

#### 예:

```sql
p_occurs_since('6 d')
p_occurs_since('2 weeks')
p_occurs_since(900) // 초로 가정
p_occurs_since('96 hrs')
```

{% hint style="info" %}
만약 `p_occurs_since` 다음에 사용되면 [예약된 검색](/ko/search/scheduled-searches.md), 기준으로 현재 시간을 사용하는 대신 예약 실행 시간이 사용됩니다. 예를 들어, 쿼리가 매시간 시작 시 실행되도록 예약되어 있다면 다음이 `p_occurs_since('1 hour')` 매크로는 매시간 시작 시점부터 1시간의 시간 범위를 사용하여 확장됩니다(쿼리가 실제로 언제 실행되는지와 무관하게). 다음에서 자세히 알아보세요: [다음을 사용하면 `p_occurs_since` 조회 기간을 정의하려면](/ko/search/scheduled-searches.md#using-p_occurs_since-to-define-a-lookback-window).
{% endhint %}

테이블 별칭 매개변수가 있는 매크로의 다음 예시에서는 CloudTrail 로그를 살펴 생성 후 1시간 이내에 생성되고 삭제된 S3 버킷을 식별합니다. 이는 잠재적으로 의심스러운 동작입니다. 이 정보를 얻기 위해 다음에 자체 조인을 수행합니다: `aws_cloudtrail` 다음의 테이블에서 `panther_logs`, 그리고 자체 조인의 두 요소 각각에 대해 이 검색을 지난 24시간으로 제한하기 위해 매크로 확장을 사용합니다(별칭은 `ct1` 및 `ct2` 아래와 같습니다):

```sql
select 
ct1.p_event_time createTime, ct2.p_event_time deleteTime,
timediff('s',createTime, deleteTime) timeExtant,
ct1.requestparameters:"bucketName"::varchar createdBucket,
ct1.useridentity:"arn"::varchar createArn, deleteArn,
ct1.useragent createUserAgent, deleteUserAgent
from panther_logs.public.aws_cloudtrail ct1
join (
select p_event_time, requestparameters:"bucketName"::varchar deletedBucket, errorcode,
  eventname deleteEvent, useridentity:"arn"::varchar deleteArn, useragent deleteUserAgent  from panther_logs.public.aws_cloudtrail) ct2
on (ct1.requestparameters:"bucketName"::varchar = ct2.DeletedBucket
    and ct2.p_event_time > ct1.p_event_Time
    and timediff('s',ct1.p_event_time, ct2.p_event_time) < 3600)
where ct2.deleteEvent = 'DeleteBucket'
and ct1.eventName = 'CreateBucket'
and ct1.errorCode is null and ct2.errorcode is null
and p_occurs_since('1 day',ct2)  -- ct2에 적용
and p_occurs_since('24 hours',ct1)  -- ct1에 적용
order by createdBucket, createTime;
```

다음에 대한 두 개의 별도 호출이 있습니다: `p_occurs_since` 각각은 두 번째 매개변수로 사용된 테이블 별칭에 따라 서로 다른 테이블에 적용됩니다. 이는 다음 Snowflake 쿼리로 확장됩니다:

```sql
select 
ct1.p_event_time createTime, ct2.p_event_time deleteTime,
timediff('s',createTime, deleteTime) timeExtant,
ct1.requestparameters:"bucketName"::varchar createdBucket,
ct1.useridentity:"arn"::varchar createArn, deleteArn,
ct1.useragent createUserAgent, deleteUserAgent
from panther_logs.public.aws_cloudtrail ct1
join (
select p_event_time, requestparameters:"bucketName"::varchar deletedBucket, errorcode,
  eventname deleteEvent, useridentity:"arn"::varchar deleteArn, useragent deleteUserAgent  from panther_logs.public.aws_cloudtrail) ct2
on (ct1.requestparameters:"bucketName"::varchar = ct2.deletedBucket
    and ct2.p_event_time > ct1.p_event_Time
    and timediff('s',ct1.p_event_time, ct2.p_event_time) < 3600)
where ct2.deleteEvent = 'DeleteBucket'
and ct1.eventName = 'CreateBucket'
and ct1.errorCode is null and ct2.errorcode is null
and ct2.p_event_time >= current_timestamp - interval '86400 second'
and ct1.p_event_time >= current_timestamp - interval '86400 second'
order by createdBucket, createTime;
```

#### 특정 시간 주변을 필터링: `p_occurs_around`

`p_occurs_around(timestamp, timeOffset [, tableAlias[, column]])`

* `타임스탬프` - 다음 형식의 시간: [타임스탬프 형식](#timestamp-format), 검색 기준이 되는 시간을 나타냅니다
* `timeOffset` - 다음 형식의 표현식: [시간 지속 형식](#time-offset-format), 주변을 검색할 시간의 양을 나타냅니다 `타임스탬프`, 예를 들면 `'1 hour'`
* `tableAlias` - 제공되면 열 별칭으로 사용될 선택적 식별자
* `column` - 제공되면 열로 사용될 선택적 식별자
  * 없으면 기본 열은 `p_event_time`.
  * 다른 열을 지정하면(예: `p_parsed_time`)와 함께 `column` 는 쿼리 시간을 크게 늘릴 수 있습니다. 이에 대한 제한이 없으면 `p_event_time`, 전체 테이블이 검색됩니다.

**참고**: 시간 표현식이 인스턴스에서 사용하는 데이터베이스 백엔드에서 파싱될 수 있는지 확인하세요. 자세한 내용은 다음을 참조하세요: [타임스탬프 형식](#timestamp-format).

다음 `p_occurs_around()` 매크로를 사용하면 지정된 시간 주변에 발생한 이벤트를 필터링할 수 있습니다. 다음 형식의 타임스탬프를 받습니다: [타임스탬프 형식](#timestamp-format) 검색 기준이 되는 시간과 다음 형식의 오프셋을 나타내며 [시간 지속 형식](#time-offset-format) 검색할 간격을 지정합니다. 검색 범위는 다음부터 다음까지입니다: `timestamp - timeOffset` 에서 `timestamp + timeOffset`.

예를 들어, 다음 매크로는 `p_occurs_around('2022-01-01 10:00:00.000', '10 m')` 2022년 1월 1일 UTC 기준 오전 9:50과 오전 10:10 사이에 발생한 이벤트를 필터링합니다.

이 매크로는 선택적 테이블 별칭도 받을 수 있으며, 이는 다음과 같이 여러 테이블을 참조할 때 유용할 수 있습니다: `JOIN`.

이 매크로를 올바르게 사용하려면 다음과 같은 필터 안에 있어야 합니다: `WHERE` SQL 문장의 절.

#### 예:

```sql
p_occurs_around('2022-01-01 10:00:00.000', '6 d')
p_occurs_around('2022-01-01 10:00:00.000', '2 weeks')
p_occurs_around('2022-01-01 10:00:00.000', 900) // 초로 가정
p_occurs_around('2022-01-01 10:00:00.000', '96 hrs')
```

## Data Explorer에서 저장된 검색을 관리하는 방법

Data Explorer에서 자주 실행하는 검색을 저장해 두면 매번 다시 작성할 필요가 없습니다.

{% hint style="info" %}
Saved Search를 삭제하는 방법은 다음에 설명되어 있습니다: [저장된 쿼리 및 예약된 쿼리](/ko/search/scheduled-searches.md#how-to-delete-or-download-a-saved-search).
{% endhint %}

### Data Explorer에서 저장된 검색 또는 예약된 검색 만들기

아래는 Data Explorer에서 작성한 검색을 저장하는 방법입니다. 또한 다음을 할 수 있습니다: [Search에서 Saved Search를 생성](/ko/search/search-tool.md#creating-a-saved-search).

1. Panther Console의 왼쪽 탐색 모음에서 **검색**, 그런 다음 다음을 선택합니다 **데이터 탐색기** 탭.
2. SQL 편집기에서 SQL을 사용해 검색을 작성하세요.
   * 시스템 전체 설정에서 다음을 활성화한 경우 [LIMIT 절을 필요로 하도록](#use-limits-in-scheduled-queries), 쿼리에 LIMIT가 포함되어 있는지 확인하세요.\
     ![The image shows an example query written in the Scheduled Query text editor in the Panther Console.](/files/ba80cd02c92c0da8f3e1cba0770a0ef26bba0341)
   * SQL 표현식에 변수를 포함하여 템플릿 검색을 만들 수 있습니다. 다음에서 자세히 알아보세요: [템플릿 검색](/ko/search/scheduled-searches/templated-searches.md).
3. SQL 편집기 아래에서 **다른 이름으로 저장**.
4. 다음 **검색 저장** 팝업되는 모달에서 양식을 작성하세요:
   * **검색 이름**: 설명적인 이름을 추가하세요.
   * **태그**: 유사한 검색을 함께 분류하는 데 도움이 되도록 태그를 추가하세요.
   * **설명**: 검색의 목적을 설명하세요.
   * **기본 데이터베이스**: 쿼리를 실행할 데이터베이스를 선택하세요.
   * **스케줄된 검색 생성**: 이 저장된 검색을 일정에 따라 실행하려면(즉, 스케줄된 검색으로 만들려면) 토글을 다음으로 전환하세요 **켜기**. 이 토글을 다음으로 전환하면 **켜기**, 아래 옵션이 나타납니다:
     * **실행 중인가요?**: 이 스케줄된 검색이 선택한 일정에 따라 실행되도록 하려면 토글을 다음으로 전환하세요 **켜기**.
     * 다음 중 하나를 클릭하여 일정을 설정하세요:
       * **주기** (쿼리를 고정된 시간 간격으로 실행하려면 선택):
         * **주기(일)** 및 **주기(분)**: SQL 쿼리를 다시 실행할 일수 및/또는 분 수를 입력하세요. 예를 들어, 주기를 0일 30분으로 설정하면 쿼리가 매일 30분마다 실행된다는 뜻입니다.
         * **시간 초과(분)**: 시간 초과 기간을 분 단위로 입력하세요. 허용되는 최대값은 10분입니다. 쿼리가 허용된 시간 내에 완료되지 않으면 Panther가 자동으로 취소하기 전에 3번 재시도합니다.
       * **Cron 식** (쿼리를 특정 날짜에 반복 실행해야 하는 경우 선택하고, 다음에서 cron 식을 만드는 방법을 자세히 알아보세요 [스케줄된 검색 crontab 사용 방법](/ko/search/scheduled-searches.md#how-to-use-the-scheduled-search-crontab)):
         * **분** 및 **시간**: 쿼리가 실행될 시간을 입력하세요.
         * **일** 및 **월** (월의 일): 이 쿼리를 특정 일과 월에 실행하려면 일과 월을 입력하세요.
         * **일** (요일): 이 쿼리를 특정 요일에 실행하려면 요일을 입력하세요.
         * **시간 초과**: 시간 초과 기간을 분 단위로 입력하세요. 허용되는 최대값은 10분입니다. 쿼리가 허용된 시간 내에 완료되지 않으면 Panther가 자동으로 취소하기 전에 3번 재시도합니다.
     * **스케줄된 검색 결과를 이메일로 보내기**: 검색 결과를 이메일로 보내고 싶다면 이 설정을 전환하세요 **켜기**. 자세한 내용은 다음에서 확인하세요 [스케줄된 검색이 이메일 보고서를 생성하도록 구성하는 방법](/ko/search/scheduled-searches.md#how-to-configure-a-scheduled-search-to-generate-an-email-report).\
       ![The image shows the Search creation screen. There are fields for Search Name, Tags, Description, and Default Database. Next to "Is this a Scheduled Search?" the toggle is set to "on." Next to "Is it active?" the toggle is set to "On." The interval option "Period" is selected.](/files/141d4b3d2ee4adbb908e28a9337e7ba138b8741c)
5. 클릭합니다 **검색 저장**.

{% hint style="info" %}
스케줄된 검색을 만들었다면(토글을 전환하여 **스케줄된 검색 생성** 에서 **켜짐)**, 이제 [스케줄된 룰을 생성하는 지침을 따를 수 있습니다](/ko/detections/rules.md#how-to-write-rules-and-scheduled-rules) 검색에서 반환된 데이터를 디택션을 거치게 하려면.
{% endhint %}

### Data Explorer에서 저장된 검색 또는 스케줄된 검색 업데이트

1. Panther Console의 왼쪽 탐색 모음에서 **검색**, 그런 다음 다음을 선택합니다 **데이터 탐색기** 탭.
2. 오른쪽 상단 모서리에서 다음을 클릭합니다 **저장된 검색 열기**.
   * 하나의 **검색 열기** 모달이 나타납니다.
3. 모달에서 업데이트할 저장된 검색을 선택한 다음, 클릭하세요 **검색 열기**.
   * 저장된 검색이 Data Explorer SQL 편집기에 표시됩니다.
4. SQL 명령을 원하는 대로 변경하세요.
5. 편집기 아래에서 클릭하세요 **업데이트**.\
   ![The bottom of the SQL editor in Data Explorer is shown. Below the editor are two buttons: Run Search and Update. The Update button is circled.](/files/b9c86ee6fe5677877caf7ed4524d5cad52723b08)
   * 하나의 **검색 업데이트** 모달이 나타납니다.
6. 저장된 검색의 메타데이터를 원하는 대로 변경하세요. 여기에는 **검색 이름**, **태그**, **설명**, **기본 데이터베이스**, 및 **스케줄된 검색 생성** (및 관련 필드).
7. 클릭합니다 **검색 업데이트** 변경 사항을 저장합니다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.panther.com/ko/search/data-explorer.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
