Psaní běžných dotazů GQL v Microsoft Fabric

Tento článek obsahuje praktické vzory dotazů GQL pro běžné úlohy grafů v Microsoft Fabric: hledání sousedů, procházení vícehopových připojení, identifikace sdílených připojení, počítání relací a hledání entit bez připojení.

Příklady používají ukázkovou datovou sadu sociální sítě. Úplné referenční informace k jazyku najdete v průvodci jazykem GQL.

Předpoklady

  • Položka grafu s načtenými daty Pokud s grafem teprve začínáte, nejprve dokončete kurz .
  • Znalost základních dotazů MATCH a RETURN. Viz průvodce jazykem GQL.

Vyhledání přímých sousedů

Vrátí všechny uzly připojené k počátečnímu uzlu jedním skokem.

Najít všechny osoby, které konkrétní člověk zná.

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

Najděte všechny společnosti, na které osoba pracovala:

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

Najít přátele přátel (multi-hop)

K procházení více než jednoho skoku použijte vzory {min,max} s proměnlivou délkou.

Najděte lidi dvě úrovně vzdálené – přátele přátel Alice, které Alice přímo nezná.

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

Najděte všechny dosažitelné do tří stupňů:

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

Tip

Vždy nastavte horní mez pro průchod s proměnlivou délkou. Nevázané vzory ve velkých nebo hustých grafech můžou narazit na limity časového limitu dotazu. Viz Aktuální omezení.

Počet relací na entitu

Použijte GROUP BY s count(*) ke spočítání, kolik relací má každá entita.

Spočítejte, kolik přátel má každý člověk, seřazený od nejvíce po nejmenší:

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

Spočítejte, kolik zaměstnanců pracuje v každé společnosti:

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

Vyhledání sdílených připojení

Opětovné použití proměnné ve dvou částech vzoru vytvoří implicitní omezení stejného uzlu. Toto omezení použijte k vyhledání entit propojených prostřednictvím sdílené třetí entity.

Najděte páry lidí, kteří znají stejnou osobu:

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

Vyhledání párů lidí, kteří pracují ve stejné společnosti:

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

Podmínka WHERE a.id < b.id zabraňuje zobrazení duplicitních párů (Alice–Bob a Bob–Alice) ve výsledcích.

Vyhledání entit bez relací

Pomocí OPTIONAL MATCH kontroly null vyhledejte uzly, které nemají odpovídající vztah.

Najděte lidi, kteří nepracují v žádné společnosti:

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

Vyhledání příspěvků bez komentářů:

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

Vyhledání entit s mnoha připojeními

Zkombinujte GROUP BY a FILTER k identifikaci silně propojených uzlů. Tato metoda je užitečná při hledání centrálních uzlů nebo odlehlých hodnot.

Najděte lidi s více než 10 přáteli:

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

Note

FILTER po GROUP BY funguje jako HAVING v SQL. Filtruje agregovaný výsledek, nikoli jednotlivé řádky.