FLATTEN 명령어
FLATTEN 명령어
flatten 명령어는 struct 또는 object 필드를 문서 내의 개별 필드로 변환해요.
출처: 문서
본문
flatten 명령어는 struct 또는 object 필드를 문서 내의 개별 필드로 변환해요.
결과로 생성된 평탄화된 필드는 원본 키 이름 기준 사전순(lexicographical order)으로 정렬돼요. 예를 들어 struct에 키 b, c, Z가 있다면 평탄화된 필드는 Z, b, c 순서로 정렬돼요.
flatten은 배열에 적용하면 안 돼요. 배열 필드를 여러 행으로 확장하려면 expand 명령어를 사용해요. OpenSearch에서는 배열이 배열이 아닌 필드에 저장될 수 있는데, 중첩 배열을 포함한 필드를 평탄화하면 배열의 첫 번째 요소만 평탄화돼요.
구문 (Syntax)
flatten 명령어의 구문은 다음과 같아요:
flatten <field> [as (<alias-list>)]
매개변수 (Parameters)
flatten 명령어는 다음 매개변수를 지원해요.
| 매개변수 | 필수/선택 | 설명 |
|---|---|---|
<field> |
필수 | 평탄화할 필드예요. object와 nested 필드만 지원해요. |
<alias-list> |
선택 | 원본 키 이름 대신 사용할 이름 목록으로, 쉼표로 구분돼요. 별칭(alias)을 두 개 이상 지정하면 목록을 괄호로 묶어요. 별칭 수는 struct의 키 수와 일치해야 하고, 별칭은 해당하는 원본 키의 사전순을 따라야 해요. |
예제: instrumentation scope object 평탄화하기
다음 쿼리는 instrumentationScope 중첩 객체를 개별 필드로 평탄화해요. 어떤 OTel SDK 버전이 사용 중인지 분석하는 데 유용해요:
source=otellogs
| where NOT ISNULL(instrumentationScope.name)
| flatten instrumentationScope
| fields severityText, name, version
쿼리는 다음과 같은 결과를 반환해요:
| severityText | name | version |
|---|---|---|
| INFO | @opentelemetry/instrumentation-http | 0.57.0 |
| INFO | Microsoft.Extensions.Hosting | 9.0.0 |
| WARN | go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc | 0.49.0 |
| ERROR | @opentelemetry/instrumentation-http | 0.57.0 |
제한 사항 (Limitations)
flatten 명령어는 다음과 같은 제한 사항이 있어요:
- 평탄화할 필드가 보이지 않으면
flatten명령어가 예상대로 동작하지 않을 수 있어요. 예를 들어 쿼리source=my-index | fields message | flatten message에서message.info,message.author같은 일부 평탄화된 필드가fields message명령어로 인해 숨겨져서flatten message명령어가 예상대로 실행되지 않아요. 대안으로source=my-index | flatten message를 사용해요.