appendcol 명령
appendcol 명령
appendcol 명령은 하위 검색(subsearch)의 결과를 입력 검색 결과(메인 검색)에 추가 열로 추가해요. 하위 검색은 메인 검색 결과의 source 절에 지정된 데이터를 입력으로 사용해요.
출처: 문서
본문
구문(Syntax)
appendcol 명령은 다음과 같은 구문을 가져요.
appendcol [override=<boolean>] <subsearch>
매개변수(Parameters)
appendcol 명령은 다음 매개변수를 지원해요.
| Parameter | Required/Optional | Description |
|---|---|---|
<subsearch> |
Required | 보조 검색으로 PPL 명령을 실행해요. subsearch는 메인 검색 결과의 source 절에 지정된 데이터를 입력으로 사용해요. |
override |
Optional | 열 이름이 충돌할 때 메인 검색 결과를 덮어쓸지 여부를 지정해요. 기본값은 false예요. |
예시 1: 기존 결과 옆에 다른 집계 추가하기
이 예시는 서비스별 로그 수와 함께 서비스별 오류 수를 보여줘요. 두 쿼리 모두 서비스 이름으로 같은 정렬 순서로 그룹화하므로 행이 올바르게 정렬돼요.
source=otellogs
| stats count() as total_logs by `resource.attributes.service.name`
| sort `resource.attributes.service.name`
| appendcol [ where severityText = 'ERROR' | stats count() as error_count by `resource.attributes.service.name` | sort `resource.attributes.service.name` ]
| fields `resource.attributes.service.name`, total_logs, error_count
이 쿼리는 다음과 같은 결과를 반환해요.
| resource.attributes.service.name | total_logs | error_count |
|---|---|---|
| cart | 3 | 2 |
| checkout | 3 | 1 |
| frontend | 4 | 2 |
| frontend-proxy | 3 | 1 |
| payment | 2 | 1 |
| product-catalog | 4 | null |
| recommendation | 1 | null |
예시 2: 여러 하위 검색 결과 추가하기
다음 쿼리는 여러 appendcol 명령을 연결하여 상세 행 옆에 요약 통계를 추가해요. 첫 번째 appendcol은 총 오류 수를 추가하고, 두 번째는 영향을 받은 서비스 수를 추가해요.
source=otellogs
| where severityText = 'ERROR'
| fields `resource.attributes.service.name`, severityText, body
| sort `resource.attributes.service.name`
| appendcol [ where severityText = 'ERROR' | stats count() as total_errors ]
| appendcol [ where severityText = 'ERROR' | stats distinct_count(`resource.attributes.service.name`) as services_affected ]
| head 4
이 쿼리는 다음과 같은 결과를 반환해요.
| resource.attributes.service.name | severityText | body | total_errors | services_affected |
|---|---|---|---|---|
| checkout | ERROR | NullPointerException in CheckoutService.placeOrder at line 142 | 7 | 5 |
| checkout | ERROR | Kafka producer delivery failed: message too large for topic order-events (max 1048576 bytes) | null | null |
| frontend-proxy | ERROR | [2024-02-01T09:20:00.456Z] “POST /api/checkout HTTP/1.1” 503 - 0 30000 checkout-8d4f7b-mk2p9 | null | null |
| payment | ERROR | Payment failed: connection timeout to payment gateway after 30000ms | null | null |
예시 3: override 매개변수로 열 이름 충돌 해결하기
메인 검색과 하위 검색이 열 이름을 공유할 때 override=true는 메인 검색 값을 하위 검색 값으로 대체해요. 이 예시에서 둘 다 agg라는 열을 생성하는데, 메인 검색은 총 로그 수에, 하위 검색은 오류 전용 수에 사용해요. override를 사용하면 오류 수가 합계를 대체해요.
source=otellogs
| stats count() as agg by severityText
| sort severityText
| appendcol override=true [ where severityText IN ('ERROR', 'WARN') | stats count() as agg by severityText | sort severityText ]
이 쿼리는 다음과 같은 결과를 반환해요.
| agg | severityText |
|---|---|
| 7 | ERROR |
| 4 | WARN |
| 6 | INFO |
| 4 | WARN |
제한 사항(Limitations)
appendcol 명령에는 다음과 같은 제한 사항이 있어요.
- 행 정렬(Row alignment): 하위 검색 결과는 위치적으로(행별로) 추가돼요. 메인 검색과 하위 검색이 서로 다른 수의 행을 반환하면 더 짧은 결과 집합에
NULL값이 채워져요. - 스키마 호환성(Schema compatibility): 메인 검색과 하위 검색 양쪽에 같은 이름의 필드가 존재하지만 타입이 호환되지 않으면 쿼리가 오류로 실패해요.