Microsoft Fabric에서 일반 GQL 쿼리 작성하기

이 문서에서는 Microsoft Fabric 일반적인 그래프 작업에 대한 실용적인 GQL 쿼리 패턴을 제공합니다. 인접 항목 찾기, 멀티홉 연결 트래버스, 공유 연결 식별, 관계 계산 및 연결이 없는 엔터티 찾기.

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

사전 요구 사항

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

인접 이웃 찾기

하나의 홉으로 시작 노드에 연결된 모든 노드를 반환합니다.

특정 사용자가 알고 있는 모든 사람을 찾습니다.

MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName

사용자가 근무하는 모든 회사를 찾습니다.

MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url

친구의 친구 찾기(멀티홉)

가변 길이 패턴을 {min,max} 사용하여 둘 이상의 홉을 트래버스합니다.

Alice가 직접 알지 못하는, 즉 두 단계 떨어져 있는 Alice의 친구의 친구를 찾습니다.

MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100

3도 이내에 연결 가능한 모든 사람을 찾습니다.

MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100

Tip

항상 가변 길이 순회에서 상한을 설정합니다. 크거나 조밀한 그래프에서 바인딩되지 않은 패턴은 쿼리 시간 제한에 도달할 수 있습니다. 현재 제한 사항을 참조하세요.

엔터티당 관계 개수 계산

각 엔터티의 관계 수를 계산하기 위해 GROUP BYcount(*)을 함께 사용하세요.

각 사람이 가장 많은 수에서 가장 적은 수로 친구들의 수를 계산합니다.

MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20

각 회사에서 근무하는 직원 수를 계산합니다.

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

공유 연결 찾기

패턴의 두 부분에서 변수를 다시 사용하면 암시적 "동일한 노드" 제약 조건이 만들어집니다. 이 제약 조건을 사용하여 공유된 세 번째 엔터티를 통해 연결된 엔터티를 찾습니다.

둘 다 같은 사람을 아는 사람 쌍을 찾습니다.

MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100

같은 회사에서 일하는 사람들의 쌍을 찾습니다.

MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100

Tip

WHERE a.id < b.id 조건은 중복 쌍(Alice-Bob 및 Bob-Alice)이 결과에 나타나지 않도록 합니다.

관계가 없는 엔터티 찾기

OPTIONAL MATCH을 사용한 후 null 검사를 수행하여 일치하는 관계가 없는 노드를 찾습니다.

회사에서 일하지 않는 사람을 찾습니다.

MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100

댓글이 없는 게시물을 찾습니다.

MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100

많은 연결이 있는 엔터티 찾기

GROUP BYFILTER을 결합하여 연결이 많은 노드를 식별합니다. 이 메서드는 허브 또는 이상값을 찾는 데 유용합니다.

친구가 10명 이상인 사용자를 찾습니다.

MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
FILTER friendCount > 10
ORDER BY friendCount DESC

메모

FILTER 은 SQL에서 GROUP BY 처럼 HAVING 작동합니다. 개별 행이 아닌 집계된 결과를 필터링합니다.