NRQL을 사용하면 다른 쿼리 내부에 중첩된 쿼리인 하위 쿼리 를 실행할 수 있습니다.
하위 쿼리 기본
하위 쿼리는 다른 쿼리 내부에 중첩된 쿼리입니다. 하위 쿼리를 사용하면 한 쿼리의 결과를 다른 쿼리에서 사용할 수 있습니다.하위 쿼리로 수행할 수 있는 작업의 예:
- 상위 엔티티의 하위 엔티티에 대한 계산 수행
- 인프라 에이전트의 CPU 사용률을 기반으로 CPU 로드가 높은 호스트에 대한 오류 로그 보기
NRQL에서 하위 쿼리는 SELECT
문과 WHERE
절에 나타날 수 있습니다.
예제 하위 쿼리
다음은 평균 이상의 기간을 가진 트랜잭션 수를 가져오는 쿼리의 예입니다.
SELECT count(*) FROM Transaction WHERE duration > (SELECT average(duration) FROM Transaction)
하위 쿼리의 결과는 컨텍스트에서 의미가 있어야 합니다. 위의 예에서 WHERE
절의 보다 큼 조건에는 단일 값을 반환하는 하위 쿼리가 필요합니다. 값 집합을 반환하는 하위 쿼리(예: uniques()
하위 쿼리)는 실패합니다.
하위 쿼리는 다른 하위 쿼리 안에 중첩될 수 있습니다.한 쿼리에는 최대 세 개의 하위 쿼리(중첩 또는 비중첩)가 허용됩니다.
하위 쿼리의 시간 범위는 SINCE
/ UNTIL
로 명시적으로 지정하지 않는 한 외부 쿼리의 시간 범위와 동일합니다. 대시보드의 시간 선택기 에서 기간을 선택하면 하위 쿼리의 시간 범위가 외부 쿼리의 시간 범위와 정렬됩니다. 해당 차트에 대해 Ignore Time Picker 를 설정한 경우 하위 쿼리의 시간 범위와 외부 쿼리의 시간 범위는 동일하지 않습니다.
하위 쿼리 실행
쿼리 실행 중에 각 하위 쿼리는 독립적으로 실행되고 그 결과는 외부 쿼리에서 상수 값 또는 값 집합으로 사용됩니다.이 실행 모델로 인해 하위 쿼리는 외부 쿼리의 속성과 값을 참조하지 않을 수 있습니다.
쿼리 기간 제한 은 하위 쿼리가 있는 쿼리에 적용됩니다.즉, 모든 하위 쿼리와 외부 쿼리는 기간 제한 내에서 실행을 완료해야 합니다.
하위 쿼리가 반환할 수 있는 최대 결과 수는 LIMIT MAX
값 과 동일합니다(2,000). 해당 제한을 초과하면 불완전한 결과가 발생할 수 있으며 "하위 쿼리가 최대 결과 구성원 제한에 도달하여 불완전한 결과를 초래할 수 있습니다."라는 오류 메시지가 표시될 수 있습니다.
하위 쿼리 대 중첩 집계
비슷해 보이지만 하위 쿼리를 중첩된 집계 와 혼동해서는 안 됩니다. 중첩된 쿼리의 결과 집계를 허용합니다. 중첩 집계는 FROM
절에서 사용되는 반면 하위 쿼리는 SELECT
문과 WHERE
절에서 사용됩니다.
제한 사항
- 하위 쿼리는 NRQL 경고 조건에서 지원되지 않습니다.하위 쿼리가 있는 쿼리는 데이터를 여러 번 통과해야 하므로 하위 쿼리는 스트리밍 경고와 호환되지 않습니다.
- 쿼리가 여러 결과 집합을 반환하도록 하는
TIMESERIES
및COMPARE WITH
절은 하위 쿼리에서 지원되지 않습니다. - 하위 쿼리는
FACET
절에 나타날 수 없지만FACET CASES
에서 사용되는WHERE
절에는 나타날 수 있습니다. - 결과 수에 제한 이 있습니다.
예제 하위 쿼리
다음은 몇 가지 예제 하위 쿼리입니다.