NRQL을 사용하면 다른 쿼리 내부에 중첩된 쿼리인 하위 쿼리 를 실행할 수 있습니다.
하위 쿼리 기본
하위 쿼리는 다른 쿼리 내부에 중첩된 쿼리입니다. 하위 쿼리를 사용하면 한 쿼리의 결과를 다른 쿼리에서 사용할 수 있습니다.하위 쿼리로 수행할 수 있는 작업의 예:
- 상위 엔티티의 하위 엔티티에 대한 계산 수행
- 인프라 에이전트의 CPU 사용률을 기반으로 CPU 로드가 높은 호스트에 대한 오류 로그 보기
NRQL에서 하위 쿼리는 SELECT 문과 WHERE 절에 나타날 수 있습니다.
예제 하위 쿼리
다음은 평균 이상의 기간을 가진 트랜잭션 수를 가져오는 쿼리의 예입니다.
SELECT count(*) FROM Transaction WHERE duration > (SELECT average(duration) FROM Transaction)
하위 쿼리의 결과는 컨텍스트에서 의미가 있어야 합니다.위의 예에서 WHERE
절의 보다 큼 조건에는 단일 값을 반환하는 하위 쿼리가 필요합니다.값 집합을 반환하는 하위 쿼리(예: uniques() 하위 쿼리)는 실패합니다.
하위 쿼리는 다른 하위 쿼리 안에 중첩될 수 있습니다.한 쿼리에는 최대 세 개의 하위 쿼리(중첩 또는 비중첩)가 허용됩니다.
SINCE / UNTIL 로 명시적으로 지정하지 않는 한 하위 쿼리의 시간 범위는 외부 쿼리의 시간 범위와 동일합니다.
하위 쿼리 실행
쿼리 실행 중에 각 하위 쿼리는 독립적으로 실행되고 그 결과는 외부 쿼리에서 상수 값 또는 값 집합으로 사용됩니다.이 실행 모델로 인해 하위 쿼리는 외부 쿼리의 속성과 값을 참조하지 않을 수 있습니다.
쿼리 기간 제한 은 하위 쿼리가 있는 쿼리에 적용됩니다.즉, 모든 하위 쿼리와 외부 쿼리는 기간 제한 내에서 실행을 완료해야 합니다.
하위 쿼리가 반환할 수 있는 최대 결과 수는 LIMIT 최대 값인 2,000과 같습니다.
하위 쿼리 대 중첩 집계
비슷해 보이지만 하위 쿼리를 중첩된 집계 와 혼동해서는 안 됩니다. 중첩된 쿼리의 결과 집계를 허용합니다.중첩 집계는 FROM
절에서 사용되는 반면 하위 쿼리는 SELECT
문과 WHERE
절에서 사용됩니다.
제한 사항
- 하위 쿼리는 NRQL 경고 조건에서 지원되지 않습니다.하위 쿼리가 있는 쿼리는 데이터를 여러 번 통과해야 하므로 하위 쿼리는 스트리밍 경고와 호환되지 않습니다.
- 쿼리가 여러 결과 집합을 반환하도록 하는
TIMESERIES
및 COMPARE WITH
절은 하위 쿼리에서 지원되지 않습니다. - 하위 쿼리는
FACET
절에 나타날 수 없지만 FACET CASES
에서 사용되는 WHERE
절에는 나타날 수 있습니다.
예제 하위 쿼리
다음은 몇 가지 예제 하위 쿼리입니다.
집계자 average()
, count()
, uniqueCount()
또는 latest()
를 사용하는 쿼리와 같이 단일 숫자 값을 반환하는 쿼리는 숫자 조건에서 사용할 수 있습니다.
기간이 평균보다 긴 트랜잭션 수를 찾습니다.
FROM Transaction SELECT count(*)
WHERE duration > (FROM Transaction SELECT average(duration))
uniques()
을 사용하는 값을 포함하여 값 집합을 반환하는 모든 쿼리는 IN
조건에서 사용할 수 있습니다.
특정 엔터티의 자식인 트랜잭션의 평균 기간을 계산합니다.
FROM Transaction SELECT average(duration) WHERE entityGuid IN
(FROM Relationship SELECT targetEntityGuid
WHERE sourceEntityGuid = 'MjUyMDUyOHxOUjF8V09SS0xPQUR8NzYzMDQ'
AND relationshipType = 'CONTAINS') SINCE 1 day ago
패싯 하위 쿼리와 함께 비교 연산자( =
, !=
, <
등)를 사용할 때 결과를 단일 값으로 제한하려면 LIMIT 1
을 지정해야 합니다.
평균 거래 기간이 가장 긴 계정에 대한 최신 거래와 관련된 거래 오류를 찾습니다.
FROM TransactionError SELECT * WHERE guid = (FROM Transaction SELECT latest(guid) FACET accountId ORDER BY average(duration) LIMIT 1)
하위 쿼리 결과는 SELECT
문의 계산에 사용될 수 있습니다.하위 쿼리는 외부 쿼리와 다른 시간 범위를 지정할 수 있습니다.
현재 평균 거래 기간과 지난 주의 평균 기간 간의 차이를 차트로 표시하십시오.
FROM Transaction SELECT average(duration) -
(FROM Transaction SELECT average(duration)
SINCE 7 days ago) TIMESERIES
단일 쿼리에 최대 3개의 하위 쿼리가 나타날 수 있습니다.
기간이 99번째 백분위수보다 긴 트랜잭션을 담당하는 고유 계정을 찾습니다.
FROM Transaction SELECT uniques(accountId) WHERE guid IN
(FROM Transaction SELECT uniques(guid) WHERE duration >
(FROM Transaction SELECT percentile(duration, 99)))
많은 NRQL 함수는 하위 쿼리를 인수로 사용할 수 있습니다.
평균과 비교하여 개별 트랜잭션 기간을 보여주는 문자열을 작성하십시오.
SELECT concat('This transaction duration: ', duration, '; average transaction duration: ',
(SELECT average(duration) FROM Transaction), precision: 4) FROM Transaction