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.
Van toepassing op: Microsoft Sentinel Graph
Opmerking
GQL-ondersteuning is in preview. Functies en syntaxis kunnen veranderen op basis van feedback en doorlopende ontwikkeling.
In deze verwijzing worden de basisconcepten, functies en operators van Graph Query Language (GQL) behandeld. Graph Query Language (GQL) is gebaseerd op wiskundige grafiektheorieconcepten die een solide basis bieden voor het uitvoeren van query's op grafiekgegevens. Als u deze basisprincipes begrijpt, kunt u effectievere query's schrijven en beter begrijpen hoe GQL uw gegevens verwerkt. GQL biedt ook een uitgebreide set functies en operators om te werken met grafiekpatronen, knooppunten, randen en eigenschappen.
Basisconcepten
In deze sectie worden de kernconcepten behandeld die de basis vormen van grafiekgegevensanalyse met GQL.
Grafiekpatronen
Grafiekpatronen zijn de belangrijkste bouwstenen van GQL-query's. Ze beschrijven de structuur die u in uw grafiekgegevens wilt vinden met behulp van een declaratieve syntaxis die de visuele weergave van grafieken weerspiegelt.
Knooppuntpatronen
Knooppuntpatronen geven aan hoe afzonderlijke knooppunten in uw grafiek moeten worden vergeleken:
(n) -- Any node
(n:Person) -- Node with Person label
(n:Person&City) -- Node with Person AND City label
(:Person) -- Person node, don't bind variable
Sleutelbegrippen:
Variabelebinding:
(n)maakt een variabele n waarnaar u later in de query kunt verwijzenAnonieme knooppunten:
(:Person)komt overeen met knooppunten zonder een variabele te makenLabelfiltering:
:Personhiermee worden overeenkomsten beperkt tot knooppunten met het label PersoonLabelcombinaties: gebruiken
&voor EN,|voor OF-bewerkingen
Edge-patronen
Edge-patronen definiëren hoe knooppunten verbinding met elkaar maken:
-[e]-> -- Directed outgoing edge, any label
-[e:works_at]-> -- Directed edge, works_at label
-[e:knows|likes]--> -- knows OR likes edge
<-[e]- -- Directed incoming edge
-[e]- -- Undirected (any direction)
Sleutelbegrippen:
Richting:
->voor uitgaand,<-voor binnenkomend,-voor elke richtingEdge-typen: gebruik labels zoals
:works_atom te filteren op relatietypeMeerdere typen:
knows|likeskomt overeen met een relatietype
Labelexpressies
Labels geven semantische betekenis aan knooppunten en randen. GQL ondersteunt complexe labelexpressies:
:Person&Company -- Both Person AND Company labels
:Person|Company -- Person OR Company labels
:!Company -- NOT Company label
:(Person|!Company)&City -- Complex expressions with parentheses
Exploitanten
&(AND): Knooppunt moet alle opgegeven labels hebben|(OF): Knooppunt moet ten minste één opgegeven label hebben!(NOT): Knooppunt mag niet het opgegeven label hebben(): Haakjes voor het groeperen van complexe expressies
Padpatronen
Padpatronen beschrijven relaties met meerdere hops in uw grafiek:
(a)-[e1]->;(b)-[e2]->(c) -- 2-hop path
(a)-[e]->;{2,4}(b) -- 2 to 4 hops
(a)-[e]->{1,}(b) -- 1 to maximum of 8 hops
(a)-[:knows|likes]->;{1,3}(b) -- 1-3 hops via knows/likes
p=()-[:works_at]->() -- Binding a path variable
Paden met variabele lengte:
{2,4}: Precies 2 tot 4 hops{1,}: 1 of meer hops (niet-gebonden). Niet-afhankelijke padquery's zijn beperkt tot 8 hops.{,5}: Maximaal 5 hops{5}: Precies 5 hops
Padvariabelen
p=()->(): Legt het volledige pad vast voor latere analyseToegang met
NODES(p),RELATIONSHIPS(p)PATH_LENGTH(p)
Meerdere patronen
GQL ondersteunt complexe, niet-lineaire grafiekstructuren:
(a)->(b), (a)->(c) -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d) -- Non-linear structures
Patroonsamenstelling:
- Komma's
,gebruiken om meerdere patronen te scheiden - Alle patronen moeten tegelijkertijd overeenkomen
- Variabelen kunnen worden gedeeld tussen patronen
Overeenkomstmodi
GQL ondersteunt verschillende padkoppelingsmodi die bepalen hoe patronen worden vergeleken met grafiekgegevens. Deze modi zijn van invloed op de prestaties, de volledigheid van het resultaat en de typen paden die worden geretourneerd.
Overeenkomstmodi bepalen hoe grafiekelementen opnieuw kunnen worden gebruikt in patroonvariabelen binnen één MATCH-component.
VERSCHILLENDE RANDEN (standaard)
De standaardmodus. Een overeenkomende rand kan niet worden gekoppeld aan meer dan één randvariabele, maar knooppunten kunnen vrij worden hergebruikt.
MATCH (a)-[r1]->(b)-[r2]->(c)
-- r1 and r2 must be different edges
-- a, b, c can be the same or different nodes
HERHAALBARE ELEMENTEN
Hiermee kunnen zowel randen als knooppunten zonder beperkingen opnieuw worden gebruikt in patroonvariabelen.
MATCH REPEATABLE ELEMENTS (a)-[r1]->(b)-[r2]->(c)
-- r1 and r2 can be the same edge
-- a, b, c can be the same or different nodes
Padmodi
Padmodi bepalen welke typen paden worden opgenomen in de resultaten op basis van herhalingsbeperkingen.
TRAIL
Filtert paden met herhalende randen uit. Knooppunten kunnen worden herhaald, maar elke rand kan slechts eenmaal per pad worden weergegeven.
MATCH TRAIL (a)-[]->{1,3}(b)
-- No edge can appear twice in the same path
-- Nodes may repeat
Naslaginformatie over functies en operators
Graph Query Language (GQL) biedt een uitgebreide set functies en operators om te werken met grafiekpatronen, knooppunten, randen en eigenschappen.
Kern-GQL-functies en -operators
De volgende tabel bevat de belangrijkste GQL-functies en -operators, en voorbeelden.
| GQL-functie/operator | Beschrijving | GQL-voorbeeld |
|---|---|---|
| OVEREENKOMST | Grafiekpatronen zoeken | VERGELIJKEN (a)-[r]->(b) |
| OPTIONELE OVEREENKOMST | Patronen zoeken die mogelijk niet bestaan | OPTIONELE OVEREENKOMST (p)->(c:Plaats) |
| WAAR | Filterpatronen en eigenschappen | WHERE person.age > 25 |
| FILTER | Gelijk aan WHERE, maar gebruikt zonder MATCH-componenten | FILTER p.name = 'Carol' OF c.name = 'Seattle' |
| IS NULL | Controleren op null-waarden | WHERE person.age IS NULL |
| IS NIET NULL | Controleren op niet-null-waarden | WHERE person.age IS NOT NULL |
| TERUG | Projectresultaten | RETURN person.name, person.age |
| VERSCHILLENDE | Unieke waarden retourneren | DISTINCT person.name RETOURNEREN |
| COUNT(*) | Alle rijen tellen | AANTAL RETOUREN(*) |
| COUNT() | Niet-null-waarden tellen | AANTAL RETOUREN (person.name) |
| SOM() | Numerieke waarden optellen | RETOURSOM(persoon.leeftijd) |
| MIN() | Minimumwaarde | RETURN MIN(person.age) |
| MAX() | Maximumwaarde | RETOUR MAX(person.age) |
| AVG() | Gemiddelde waarde | RETURN AVG(person.age) |
| COLLECT_LIST() | Waarden verzamelen in matrix | RETURN COLLECT_LIST(person.name) |
| SIZE() | Matrixlengte | RETOURGROOTTE(COLLECT_LIST(n.firstName)) |
| labels() | Labels voor een knooppunt of edge weergeven | RETURN-labels(entiteit) |
| UPPER() | Converteren naar hoofdletters | RETURN UPPER(person.name) |
| LOWER() | Converteren naar kleine letters | RETURN LOWER(person.name) |
| BEGINT MET | Tekenreeks begint met patroon | WAAR person.name BEGINT MET 'Tom' |
| EINDIGT MET | Tekenreeks eindigt met patroon | WAAR person.name EINDIGT MET 'Hanks' |
| BEVAT | Tekenreeks bevat patroon | WAAR person.name 'Tom' bevat |
| || | Tekenreekssamenvoeging | RETURN n.firstName || ' ' || n.lastName |
| TRIM() | Witruimte van beide uiteinden verwijderen | RETURN TRIM(' abc ') |
| STRING_JOIN() | Matrixelementen samenvoegen met scheidingsteken | RETURN STRING_JOIN(["a", "b" || "c"], "-") |
| CAST() | Gegevenstypen converteren | CAST(person.age AS STRING) |
| ZONED_DATETIME() | Datum/tijd maken van tekenreeks | ZONED_DATETIME('01-2024') |
| PATH_LENGTH() | De lengte van een pad ophalen | RETURN PATH_LENGTH(path_variable) |
| ORDER BY | Resultaten sorteren | ORDER BY person.age DESC |
| BEPERKEN | Aantal resultaten beperken | LIMIET 10 |
| & (AND) | Label snijpunt | MATCH (p:Persoon & Man) |
| | (OF) | Label-samenvoeging | VERGELIJKEN (n:Persoon | Film) |
| ! (NIET) | Labelneernatie | OVEREENKOMST (p:! Vrouw) |
Aanbevolen procedures
- GQL definieert niet duidelijk hoe dynamische typen moeten worden verwerkt. Als u runtimefouten wilt voorkomen, moet u geneste velden expliciet naar het verwachte type casten (zie CAST).
Prestatieoptimalisatie
Gebruik deze strategieën om de prestaties van GQL-query's in productieomgevingen te optimaliseren:
Tip
Begin met eenvoudige patronen en verhoog de complexiteit indien nodig. Bewaak queryprestaties en pas padlengten en filters aan om de resultaten te verbeteren.
Bereik voor padkoppeling beperken:
Gebruik specifieke labelfilters om de zoekruimte te verkleinen: MATCH (start:SpecificType) in plaats van MATCH (start)
Paden met variabele lengte met redelijke grenzen beperken: OVEREENKOMST (a)-[]->{1,3}(b) in plaats van niet-afhankelijke paden
Pas WHERE-componenten vroeg toe om resultaten te filteren vóór dure bewerkingen.
Gebruik COUNT(*) voor bestaanscontroles:
Als u alleen hoeft te controleren of er een patroon bestaat, gebruikt u AANTAL(*) in plaats van volledige resultaten te retourneren.
MATCH (user:User)-[:SUSPICIOUS_ACTIVITY]->(target)
WHERE user.id = 'user123'
RETURN COUNT(*) > 0 AS HasSuspiciousActivity
Beperkingen
Querystructuur: alle GQL-query's moeten beginnen met een MATCH-instructie.
Gereserveerde trefwoorden: sommige GQL-trefwoorden kunnen niet worden gebruikt als id's in query's. Sommige gereserveerde trefwoorden zijn niet direct duidelijk (datum is bijvoorbeeld een gereserveerd trefwoord). Als uw grafiekgegevens eigenschapsnamen hebben die conflicteren met gereserveerde GQL-trefwoorden, gebruikt u verschillende eigenschapsnamen in uw grafiekschema of wijzigt u de naam ervan om parseringsconflicten te voorkomen.
Belangrijk
Wanneer u uw grafiekschema ontwerpt, kunnen sommige algemene eigenschapsnamen conflict maken met gereserveerde GQL-trefwoorden. Vermijd of wijzig de naam van deze eigenschapsnamen.
Geen ONDERSTEUNING voor INSERT/CREATE: Bewerkingen voor het wijzigen van grafiekstructuren worden niet ondersteund.
Optionele overeenkomsten: alleen ondersteund voor knooppuntpatronen (niet voor randen).
Equivalentiecontroles voor entiteiten worden niet ondersteund: GQL's
(MATCH (n)-[]-(n2) WHERE n1 <> n2)worden niet ondersteund. Gebruik in plaats daarvan expliciete veldvergelijkingen, bijvoorbeeldn.id <> n2.idTijd en tijdzone: De engine werkt in UTC. Letterlijke datum/tijd moet datum/tijd in zone gebruiken; alleen de UTC-zone wordt ondersteund via
ZONED_DATETIME("2011-12-31 23:59:59.9").Duurgranulariteit: Duur ondersteunt maximaal dagen en kleinere eenheden tot nanoseconden. Eenheden van meer dan dagen (bijvoorbeeld weken, maanden, jaren) worden niet ondersteund.
Aangepaste GQL-functie Labels()
De labels() functie toont de labels voor een knooppunt of rand als een matrix.
Syntaxis:
labels(entity)
Parameters:entity: een knooppunt- of randvariabele van een overeenkomend patroon.
Retourneert:
Retourneert een matrix met tekenreeksen met alle labels voor de opgegeven entiteit.
Voorbeelden:
Labels voor overeenkomende knooppunten weergeven:
MATCH (entity)
RETURN entity.name, labels(entity)
Uitvoer
Deze query toont de naam en alle labels voor elk knooppunt in de grafiek.
| entity.name | labels(entiteit) |
|---|---|
| john.doe | ["Gebruiker"] |
| admin.user | ["Gebruiker"] |
| webserver | ["Systeem"] |
| Database | ["Systeem"] |
| domeincontroller | ["Systeem"] |
Labels weergeven in projecties met aliassen:
MATCH (n)-[e]->(target)
RETURN n.name, labels(n) AS n_labels, labels(e) AS edge_labels, target.name
Deze query toont knooppuntnamen, hun labels en de labels van verbindingsranden.
| n.name | n_labels | edge_labels | target.name |
|---|---|---|---|
| john.doe | ["Gebruiker"] | ["CAN_ACCESS"] | webserver |
| admin.user | ["Gebruiker"] | ["CAN_ACCESS"] | domeincontroller |
| webserver | ["Systeem"] | ["CAN_ACCESS"] | Database |
| domeincontroller | ["Systeem"] | ["CAN_ACCESS"] | Database |