Naslaginformatie over Graph Query Language (GQL) voor Microsoft Sentinel graph (preview)

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 verwijzen

  • Anonieme knooppunten: (:Person) komt overeen met knooppunten zonder een variabele te maken

  • Labelfiltering: :Person hiermee worden overeenkomsten beperkt tot knooppunten met het label Persoon

  • Labelcombinaties: 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 richting

  • Edge-typen: gebruik labels zoals :works_at om te filteren op relatietype

  • Meerdere typen: knows|likes komt overeen met een relatietype

Labelexpressies

Labels geven semantische betekenis aan knooppunten en randen. GQL ondersteunt complexe labelexpressies:

:Person&amp;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 analyse

  • Toegang 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, bijvoorbeeld n.id <> n2.id

  • Tijd 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