Skriva vanliga GQL-frågor i Microsoft Fabric

Note

Den här funktionen är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och rekommenderas inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Den här artikeln innehåller praktiska GQL-frågemönster för vanliga grafuppgifter i Microsoft Fabric: hitta grannar, bläddra i multihop-anslutningar, identifiera delade anslutningar, räkna relationer och hitta entiteter utan anslutningar.

Exempel använder exempeldatauppsättningen för sociala nätverk. Fullständig språkreferens finns i GQL-språkguiden.

Förutsättningar

  • Ett diagramobjekt med data inlästa. Om du är ny inom grafteknologi, slutför först självstudien.
  • Kunskaper om grundläggande MATCH- och RETURN-sökfrågor. Se språkguiden för GQL.

Hitta direkta grannar

Returnera alla noder som är anslutna till en startnod med ett hopp.

Hitta alla som en specifik person känner:

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

Hitta alla företag som en person arbetade på:

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

Hitta vänner till vänner (flera steg)

Använd mönster med variabel längd med {min,max} för att navigera flera hopp.

Hitta människor två hopp bort - vänner till Alices vänner som Alice inte direkt känner.

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

Hitta alla som kan nås inom tre grader:

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

Tips/Råd

Ange alltid en övre gräns för bläddering med variabel längd. Obundna mönster i stora eller täta grafer kan överskrida tidsgränser för frågor. Se Aktuella begränsningar.

Räkna relationer per entitet

Använd GROUP BY med count(*) för att räkna hur många relationer varje entitet har.

Räkna hur många vänner varje person har, ordnade från flest till färst.

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

Räkna hur många anställda som arbetar på varje företag:

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

Hitta delade anslutningar

Om du återanvänder en variabel i två delar av ett mönster skapas en implicit "samma nod"-begränsning. Använd den här begränsningen för att hitta entiteter som är anslutna via en delad tredje entitet.

Hitta par med personer som båda känner samma person:

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

Hitta par med personer som arbetar på samma företag:

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

Tips/Råd

Villkoret WHERE a.id < b.id förhindrar att duplicerade par (Alice–Bob och Bob–Alice) visas i resultat.

Hitta entiteter utan relationer

Använd OPTIONAL MATCH följt av en null-kontroll för att hitta noder som inte har någon matchande relation.

Hitta personer som inte arbetar på något företag:

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

Hitta inlägg utan kommentarer:

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

Hitta entiteter med många anslutningar

Kombinera GROUP BY och FILTER identifiera höganslutna noder. Den här metoden är användbar för att hitta hubbar eller extremvärden.

Hitta personer med fler än 10 vänner:

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 efter GROUP BY fungerar som HAVING i SQL. Det filtrerar på det aggregerade resultatet, inte de enskilda raderna.