Microsoft Fabric 그래프 데이터 필터링 및 집계

필터링하면 결과가 중요한 행으로 좁혀질 수 있습니다. 집계는 이러한 행을 개수, 합계 및 평균으로 요약합니다. 이 문서에서는 Microsoft Fabric 그래프에 대해 GQL 쿼리에서 두 기술을 모두 적용하는 방법을 보여 줍니다.

예를 들어 소셜 네트워크 샘플 데이터 세트를 사용합니다. GQL 문 및 식에 대한 전체 참조는 GQL 언어 가이드를 참조하세요.

사전 요구 사항

  • 데이터가 로드된 그래프 항목입니다. 그래프를 처음 접하는 경우 먼저 자습서 를 완료합니다.
  • 기본 MATCHRETURN 쿼리에 대해 잘 알고 있습니다. GQL 언어 가이드를 참조하세요.

FILTER를 사용하여 행 필터링

조건을 충족하는 행만 유지하는 데 사용합니다 FILTER . 일치하는 결과를 좁히려면 FILTER 뒤에 MATCH을 배치합니다.

다음 쿼리는 이름과 생일이 있는 모든 여성을 반환합니다.

MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday

여러 조건을 ANDOR와 같이 결합합니다. 예를 들어 다음 쿼리는 1990년 이전에 태어난 모든 여성의 이름을 반환합니다.

MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName

Tip

성능을 향상시키려면 패턴 일치 시 별도의 WHERE 문이 아닌 인라인 FILTER 절을 사용하여 필터링합니다. 패턴 일치 중에 필터를 참조하세요.

패턴 일치 중 필터링

WHERE 인라인 절은 MATCH 패턴 내에서 결과가 생성되기 전에 일치하는 노드와 가장자리를 제한합니다. 이 방법은 쿼리 엔진이 이전 행을 정리하기 때문에 경기 FILTER 후 절보다 더 효율적입니다.

예를 들어 1994년 이전에 태어난 사람을 근무하는 회사와 함께 찾으려면 이름이 'A'로 시작하는 회사로 결과를 제한합니다.

MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name

같은 방식으로 에지 속성을 필터링합니다. 예를 들어 2000년 이상 회사에서 일하기 시작한 사용자만 반환하려면 다음을 수행합니다.

MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom

인라인 필터링과 경기 후 필터링 간의 성능 차이에 대한 자세한 내용은 GQL 쿼리 성능 최적화를 참조하세요.

필터에서 null 값 처리

GQL은 세 값 논리를 사용하며, 조건자는 TRUE, FALSE, 또는 UNKNOWN로 평가됩니다. 속성 값이 null이면, 비교 결과로 UNKNOWN가 반환됩니다. FILTERUNKNOWN 일치하지 않으므로 행은 제외됩니다.

IS NULLIS NOT NULL를 사용하여 null 값을 명시적으로 테스트합니다.

-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname

속성이 null일 수 있는 경우 기본값을 대체하는 데 사용합니다 coalesce() .

MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName

Caution

NULL = NULLUNKNOWN가 아니라 TRUE로 계산됩니다. 항상 null 값을 테스트할 때는 IS NULL을(를) 사용하고, 같음을 테스트하지 마십시오.

RETURN을 사용하여 결과 집계

집계 함수를 RETURN 사용하여 결과를 요약합니다. GQL은 , count(), sum()avg()min()를 지원합니다max().

예를 들어 그래프의 모든 사람을 계산하려면 다음을 수행합니다.

MATCH (p:Person)
RETURN count(*) AS totalPeople

직원을 고용하는 고유 회사 수와 같은 고유 값을 계산하려면 다음을 수행합니다.

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount

GROUP BY를 사용하여 결과 그룹화

GROUP BY 공유 값별로 행을 그룹화하고 각 그룹 내의 집계를 계산하는 데 사용합니다RETURN. 이 그룹화는 SQL GROUP BY에 해당하는 GQL입니다.

예를 들어 회사당 직원 수를 계산하려면 다음을 수행합니다.

MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC

여러 열을 그룹화하고 여러 집계를 한 번에 계산합니다. 예를 들어 성별 및 브라우저별로 사람 수와 생일 범위를 세분화하여 가장 일반적인 10가지 조합을 반환합니다.

MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
       browser,
       count(*) AS personCount,
       min(p.birthday) AS earliestBirthday,
       max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10

메모

모든 비 집계 식은 RETURN에 있는 경우에 GROUP BY에서도 나타나야 합니다. GROUP BY에 포함되지 않는 식은 집계 함수를 사용해야 합니다.

집계된 결과 정렬 및 제한

ORDER BYLIMITGROUP BY와 함께 사용하여 상위 N개 결과를 찾습니다.

예를 들어 주민 수별로 상위 5개 도시를 찾으려면 다음을 수행합니다.

MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5

중요합니다

ORDER BY 전에 LIMIT 놓습니다. LIMIT 는 이미 정렬된 결과 집합에 항상 적용됩니다.

결과에서 조건부 값에 CASE 사용

조건부 값을 계산하는 데 사용합니다CASE./WHEN/THEN/ELSERETURNLET

예를 들어 출생 연도에 따라 사람들을 연대로 분류하려면 다음을 수행합니다.

MATCH (p:Person)
RETURN p.firstName,
       CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
            WHEN p.birthday < 20000101 THEN '1980–1999'
            ELSE '2000 or later'
       END AS era