Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Note
Deze functie is momenteel beschikbaar als openbare preview-versie. Deze preview wordt geleverd zonder een service level agreement en wordt niet aanbevolen voor productieworkloads. Bepaalde functies worden mogelijk niet ondersteund of hebben mogelijk beperkte mogelijkheden. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure Previews voor meer informatie.
Met grafiekpatronen kunt u de structuur beschrijven van de gegevens die u wilt vinden met behulp van intuïtieve, visuele syntaxis. In plaats van tabellen samen te voegen, schrijft u patronen die eruitzien als de relaties zelf: knooppunten die zijn verbonden door randen. In dit artikel leest u hoe u GQL-patroonquery's schrijft voor veelvoorkomende scenario's in de grafiek in Microsoft Fabric.
In de voorbeelden wordt de voorbeeldgegevensset van het sociale netwerk gebruikt. Zie GQL-grafiekpatronen voor een volledig overzicht van de syntaxis van het patroon.
Prerequisites
- Een grafiekitem met gegevens geladen. Als u nog niet eerder met grafieken werkt, voltooit u eerst de zelfstudie .
- Bekendheid met basis
MATCH- enRETURN-queries. Zie de GQL-taalhandleiding.
Directe relaties vergelijken
Een basispatroon komt overeen met een knooppunttype, een specifiek edge-type en een ander knooppunttype. De syntaxis ziet eruit als een diagram van de relatie.
Als u bijvoorbeeld maximaal 100 personen wilt vinden die zijn gekoppeld aan het bedrijf waar ze werken:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
LIMIT 100
Gebruik een niet-gericht randpatroon als u het niet weet of niet om richting geeft. Als u bijvoorbeeld maximaal 100 wederzijdse kennissen wilt vinden, ongeacht wie de verbinding heeft geïnitieerd:
MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100
Note
graph biedt momenteel geen ondersteuning voor het maken van niet-gerichte randen, maar u kunt randen in elke richting opvragen met behulp van -[:label]- de syntaxis.
Patronen filteren met inline WHERE
Plaats WHERE in het patroon om knooppunten en randen te filteren wanneer ze worden gematcht. Deze aanpak is efficiënter dan filteren na het feit.
Als u bijvoorbeeld personen wilt vinden die zijn geboren vóór 1990 die bij een bedrijf werken waarvan de naam begint met 'A':
MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filter op randeigenschappen om te beperken welke relaties overeenkomen. Als u bijvoorbeeld alleen personen wilt filteren die in 2010 of later aan een bedrijf begonnen te werken:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom
Vinden van multihop-relaties
Gebruik patronen met een variabele lengte om meerdere hops in één expressie te doorlopen. Geef het minimum- en maximum aantal hops op met {min,max} syntaxis.
Als u bijvoorbeeld maximaal 100 mensen wilt vinden die bereikbaar zijn binnen twee tot vier graden vriendschap van Alice:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{2,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Om maximaal 100 directe en tweedegraads verbindingen (een of twee hops) van Alice te vinden:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,2}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Navigatie beheren met padenmodi
GQL maakt standaard gebruik TRAIL van de modus, waardoor dezelfde rand niet meer dan één keer wordt doorkruist. Gebruik padmodi expliciet wanneer u verschillende garanties nodig hebt.
| Padmodus | Gedrag | Gebruiken wanneer... |
|---|---|---|
WALK |
Staat herhaalde knooppunten en randen toe | Je wilt ongefilterde doorkruising zonder beperkingen. Zelden nodig; vooral nuttig voor verkennende query's. |
TRAIL |
Geen herhaalde randen (standaard) | U wilt voorkomen dat u dezelfde relatie opnieuw navolgt, maar hetzelfde knooppunt kan via verschillende relaties verschijnen. Werkt goed voor de meeste traversal queries. |
SIMPLE |
Geen herhaalde knooppunten behalve begin en einde | U wilt dat er geen knooppunt meer dan één keer in het midden van een pad wordt weergegeven, maar dat paden die zich weer bij het begin sluiten, toestaan. Handig voor het detecteren van lussen. |
ACYCLIC |
Helemaal geen herhaalde knooppunten | U moet garanderen dat er geen knooppunt meer dan één keer in het pad wordt weergegeven. Gebruik voor strikte hiërarchieën, afstamming, of elke doorkruising waarbij het opnieuw bezoeken van een knooppunt onjuiste resultaten zou opleveren. |
WALK is de meest permissieve modus en ACYCLIC is de meest beperkende.
TRAIL is de standaardinstelling en werkt goed voor de meeste query's. Gebruik alleen een meer beperkende modus wanneer uw use-case dit vereist.
Als u het verschil wilt illustreren, bekijkt u het pad alice → Bob → Carol → Bob:
- WALK : staat dit pad toe. Knooppunten en randen kunnen vrijelijk worden herhaald.
- TRAIL : staat dit pad toe. Bob wordt twee keer weergegeven, maar elke gebruikte rand is een andere relatie (Alice→Bob en Carol→Bob zijn afzonderlijke randen), dus er wordt geen rand herhaald.
- SIMPLE : blokkeert dit pad. Bob wordt meerdere keren weergegeven en MET SIMPLE kan een knooppunt alleen worden herhaald als het zowel het begin als het einde van het pad (een gesloten cyclus) is. Hier is Alice het begin en Bob is het einde, dus er is geen uitzondering van toepassing.
- ACYCLIC : blokkeert dit pad. Bob verschijnt meer dan één keer ergens in het pad.
In het volgende voorbeeld ziet u hoe u TRAIL kunt gebruiken om te tellen hoeveel afzonderlijke paden leiden tot elk van de eerste 100 personen die bereikbaar zijn in het netwerk van Alice binnen vier sprongen.
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, count(*) AS pathCount
LIMIT 100
Gebruik ACYCLIC om maximaal 100 personen te retourneren die bereikbaar zijn vanuit Alice binnen vier hops, waarbij elke persoon in het pad uniek is:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Tip
Voor grote grafieken stelt u altijd een bovengrens in voor patronen met variabele lengte ({1,4} in plaats {1,}van ). Onbegrensde doorkruising in dichte grafen kan time-outlimieten voor queries bereiken. Zie Huidige beperkingen.
Variabele hergebruik gebruiken om gedeelde entiteiten uit te drukken
Als u dezelfde variabele in twee delen van een patroon opnieuw gebruikt, wordt een impliciete gelijkheidsbeperking gemaakt. Beide verwijzingen moeten overeenkomen met hetzelfde knooppunt. Met deze techniek kunt u 'entiteiten zoeken die zijn verbonden via een gedeelde derde entiteit'.
Als u bijvoorbeeld maximaal 100 paren personen wilt vinden die elkaar kennen en bij hetzelfde bedrijf werken:
MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100
De variabele c wordt opnieuw gebruikt voor beide workAt doelen, dus de query retourneert alleen paren waarbij beide personen elkaar kennen en bij hetzelfde bedrijf werken.
Als u maximaal 100 paren personen wilt vinden die beide hetzelfde bericht leuk vonden:
MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100
Tip
De WHERE a.id < b.id voorwaarde voorkomt dat dubbele paren (Alice + Bob en Bob + Alice) worden weergegeven in de resultaten.
Meerdere patronen combineren
Maak een lijst met meerdere patronen in één MATCH, gescheiden door komma's. Alle patronen moeten ten minste één variabele delen, zodat ze correct worden samengevoegd.
Als u bijvoorbeeld maximaal 100 personen wilt vinden, samen met zowel hun werkplek als de stad waarin ze wonen:
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100
De gedeelde variabele p verbindt de twee patronen. Elke resultaatrij vertegenwoordigt één persoon met zijn bedrijf en plaats.
Optionele relaties vergelijken
Gebruik OPTIONAL MATCH deze functie wanneer er mogelijk geen relatie bestaat voor elk knooppunt. Rijen zonder overeenkomst worden behouden met NULL waarden, vergelijkbaar met een SQL LEFT JOIN.
Retourneer bijvoorbeeld maximaal 100 personen met hun bedrijfsnaam, inclusief personen zonder werkgever (dat wil zeggen, die een NULL hebben voor de bedrijfskolom):
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100
Gebruik IS NULL wel na OPTIONAL MATCH om maximaal 100 mensen te vinden die niet bij een bedrijf werken.
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100