Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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ů
MATCHaRETURN. 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.