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