Graph Query Language (GQL)-referanse for Microsoft Sentinel graf (forhåndsversjon)

Gjelder for: Microsoft Sentinel Graph

Obs!

GQL-støtte er i forhåndsversjon. Funksjoner og syntaks kan endres basert på tilbakemeldinger og kontinuerlig utvikling.

Denne referansen dekker de grunnleggende begrepene, funksjonene og operatorene i Graph Query Language (GQL). Graph Query Language (GQL) er bygd på matematiske grafteorikonsepter som gir et solid grunnlag for spørring av grafdata. Ved å forstå dette grunnleggende kan du skrive mer effektive spørringer og bedre forstå hvordan GQL behandler dataene dine. GQL tilbyr også et rikt sett med funksjoner og operatorer for å arbeide med grafmønstre, noder, kanter og egenskaper.

Grunnleggende konsepter

Denne delen dekker kjernekonseptene som danner grunnlaget for grafdataanalyse med GQL.

Grafmønstre

Grafmønstre er kjernebyggesteinene i GQL-spørringer. De beskriver strukturen du vil finne i grafdataene ved hjelp av en deklarativ syntaks som gjenspeiler den visuelle representasjonen av grafer.

Nodemønstre

Nodemønstre angir hvordan enkeltnoder skal samsvare med enkeltnoder i grafen:

(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

Nøkkelkonsepter:

  • Variabel binding: (n) oppretter en variabel n som du kan referere til senere i spørringen

  • Anonyme noder: (:Person) samsvarer med noder uten å opprette en variabel

  • Etikettfiltrering: :Person begrenser treff til noder med personetiketten

  • Etikettkombinasjoner: Bruk & for OG, | for ELLER-operasjoner

Edge-mønstre

Edge-mønstre definerer hvordan noder kobles til hverandre:

-[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) 

Nøkkelkonsepter:

  • Retning: -> for utgående, <- for innkommende, - for alle retninger

  • Kanttyper: Bruk etiketter som :works_at å filtrere etter relasjonstype

  • Flere typer: knows|likes samsvarer med én av relasjonstypene

Etikettuttrykk

Etiketter gir semantisk betydning for noder og kanter. GQL støtter komplekse etikettuttrykk:

: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 

Operatører

  • & (OG): Noden må ha alle angitte etiketter

  • | (ELLER): Noden må ha minst én angitt etikett

  • ! (IKKE): Noden kan ikke ha den angitte etiketten

  • () : Parenteser for gruppering av komplekse uttrykk

Banemønstre

Banemønstre beskriver flerhopprelasjoner i grafen:

(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 

Baner med variabel lengde:

  • {2,4}: Nøyaktig 2 til 4 humle

  • {1,}: 1 eller flere hopp (ubundet). Ubundne banespørringer er begrenset til åtte hopp.

  • {,5}: Opptil 5 hopp

  • {5}: Nøyaktig 5 humle

Banevariabler

  • p=()->(): Registrerer hele banen for senere analyse

  • Access med NODES(p), , RELATIONSHIPS(p)PATH_LENGTH(p)

Flere mønstre

GQL støtter komplekse, ikke-lineære grafstrukturer:

(a)->(b), (a)->(c)          -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d)     -- Non-linear structures

Mønstersammensetning:

  • Bruke komma til , å skille flere mønstre
  • Alle mønstre må samsvare samtidig
  • Variabler kan deles på tvers av mønstre

Samsvarsmoduser

GQL støtter ulike banesamsvarsmoduser som styrer hvordan mønstre samsvarer med grafdata. Disse modusene påvirker ytelsen, resultatfullheten og banetypene som returneres.

Samsvarsmoduser kontrollerer hvordan grafelementer kan brukes på nytt på tvers av mønstervariabler i én enkelt SAMMENLIGNE-setningsdel.

ULIKE KANTER (standard)

Standardmodus. En samsvarende kant kan ikke bindes til mer enn én kantvariabel, men noder kan brukes fritt på nytt.

MATCH (a)-[r1]->(b)-[r2]->(c) 
-- r1 and r2 must be different edges
-- a, b, c can be the same or different nodes 

GJENTAKENDE ELEMENTER

Gjør at både kanter og noder kan brukes på nytt på tvers av mønstervariabler uten begrensninger.

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

Banemoduser

Banemoduser kontrollerer hvilke banetyper som inkluderes i resultater basert på repetisjonsbetingelser.

TRAIL

Filtrerer ut baner som har gjentatte kanter. Noder kan gjentas, men hver kant kan bare vises én gang per bane.

MATCH TRAIL (a)-[]->{1,3}(b)
-- No edge can appear twice in the same path
-- Nodes may repeat

Referanse for funksjoner og operatorer

Graph Query Language (GQL) gir et omfattende sett med funksjoner og operatorer for å arbeide med grafmønstre, noder, kanter og egenskaper.

Core GQL-funksjoner og -operatorer

Tabellen nedenfor viser kjernefunksjonene og -operatorene og -operatorene for GQL.

GQL,funksjon/operator Beskrivelse EKSEMPEL PÅ GQL
SAMMENLIGNE Finn grafmønstre SAMMENLIGNE (a)-[r]->(b)
VALGFRITT SAMSVAR Finn mønstre som kanskje ikke finnes VALGFRITT SAMSVAR (p)->(c:City)
HVOR Filtrer mønstre og egenskaper HVOR person.alder > 25
FILTER Tilsvarer WHERE, men brukes uten SAMMENLIGNE-setninger FILTER p.name = 'Carol' ELLER c.name = 'Seattle'
ER NULL Se etter nullverdier WHERE person.age IS NULL
ER IKKE NULL Se etter verdier som ikke er null WHERE person.age IS NOT NULL
RETURNERE Prosjektresultater RETURNer person.name, person.alder
DISTINKTE Returner unike verdier RETURNER DISTINKT person.name
COUNT(*) Tell alle rader RETURANTALL(*)
COUNT() Telle verdier som ikke er null RETURANTALL(person.name)
SUM() Summer numeriske verdier RETURSUM(person.alder)
MIN() Minimumsverdi RETURNER MIN(person.alder)
MAKS() Maksimumsverdi MAKS.AVKASTNING(person.alder)
GJSN() Gjennomsnittsverdi RETURN AVG(person.age)
COLLECT_LIST() Samle inn verdier i matrise RETURNer COLLECT_LIST(person.name)
STØRRELSE() Matriselengde RETURN SIZE(COLLECT_LIST(n.firstName))
etiketter() Vis etiketter for en node eller kant RETURN-etiketter(enhet)
UPPER() Konverter til store bokstaver ENTER UPPER(person.name)
LOWER() Konverter til små bokstaver RETURNER LAVERE(person.name)
BEGYNNER MED Strengen starter med mønster HVOR person.name STARTER MED "Tom"
SLUTTER MED Streng slutter med mønster HVOR person.name SLUTTER MED 'Hanks'
INNEHOLDER Streng inneholder mønster WHERE person.name CONTAINS 'Tom'
|| Strengsammenkjeding RETURN n.firstName || ' ' || n.lastName
TRIM() Fjern mellomrom fra begge ender RETURN TRIM(' abc ')
STRING_JOIN() Koble sammen matriseelementer med skilletegn RETURN STRING_JOIN(["a", "b" || "c"], "-")
CAST() Konverter datatyper CAST(person.age AS STRING)
ZONED_DATETIME() Opprett datetime fra streng ZONED_DATETIME('2024-01-01')
PATH_LENGTH() Få lengden på en bane RETURNer PATH_LENGTH(path_variable)
BESTILL ETTER Sortere resultater ORDER BY person.age DESC
GRENSE Begrens resultatantall GRENSE 10
& (AND) Etikettskjæringspunkt SAMMENLIGNE (p:Person & Mann)
| (ELLER) Etikettunion SAMMENLIGNE (n:Person | Film)
! (IKKE) Etikett-negasjon SAMMENLIGNE (p:! Kvinne)

Anbefalte fremgangsmåter

  • GQL definerer ikke tydelig hvordan dynamiske typer skal håndteres. Hvis du vil unngå kjøretidsfeil, kan du eksplisitt angi nestede felt til forventet type (se CAST).

Ytelsesoptimalisering

Bruk disse strategiene til å optimalisere GQL-spørringsytelsen i produksjonsmiljøer:

Tips

Start med enkle mønstre, og øk deretter kompleksiteten om nødvendig. Overvåk spørringsytelse og juster banelengder og filtre for å forbedre resultatene.

Begrens banesamsvarsomfang:

  • Bruk bestemte etikettfiltre for å redusere søkeområdet: SAMMENLIGNE (start:SpecificType) i stedet for SAMMENLIGNE (start)

  • Begrens baner med variabel lengde med rimelige grenser: SAMMENLIGNE (a)-[]->{1,3}(b) i stedet for ubundne baner

  • Bruk WHERE-setninger tidlig for å filtrere resultater før dyre operasjoner.

Bruk ANTALL(*) for kontroll av eksistens:

Hvis du bare trenger å kontrollere om det finnes et mønster, bruker du ANTALL(*) i stedet for å returnere fullstendige resultater.

MATCH (user:User)-[:SUSPICIOUS_ACTIVITY]->(target)
WHERE user.id = 'user123'
RETURN COUNT(*) > 0 AS HasSuspiciousActivity

Begrensninger

  • Spørringsstruktur: Alle GQL-spørringer må starte med en SAMMENLIGNE-setning.

  • Reserverte nøkkelord: Noen GQL-nøkkelord kan ikke brukes som identifikatorer i spørringer. Noen reserverte nøkkelord er ikke umiddelbart åpenbare (dato er for eksempel et reservert nøkkelord). Hvis grafdataene har egenskapsnavn som er i konflikt med MEDEGSL reserverte nøkkelord, kan du bruke forskjellige egenskapsnavn i grafskjemaet eller gi dem nytt navn for å unngå analysering av konflikter.

Viktig

Når du utformer grafskjemaet, kan det hende at noen vanlige egenskapsnavn kommer i konflikt med reserverte nøkkelord for GQL. Unngå eller gi nytt navn til disse egenskapsnavnene.

  • Ingen INSERT/CREATE-støtte: Operasjoner for å endre grafstrukturer støttes ikke.

  • Valgfrie treff: Støttes bare for nodemønstre (ikke kanter).

  • Enhetsekvivalenskontroller støttes ikke: GQL-er støttes (MATCH (n)-[]-(n2) WHERE n1 <> n2) ikke. Bruk eksplisitte feltsammenligninger i stedet, for eksempel n.id <> n2.id

  • Tid og tidssone: Motoren opererer i UTC. Datetime-litteraler må bruke zoned datetime. bare UTC-sonen støttes via ZONED_DATETIME("2011-12-31 23:59:59.9").

  • Varighetstetthet: Varigheter støtter opptil dager og mindre enheter ned til nanosekunder. Enheter som er større enn dagen (for eksempel uker, måneder, år), støttes ikke.

Labels() custom GQL -funksjon

Funksjonen labels() viser etikettene for en node eller kant som en matrise.

Syntaks:

labels(entity)

Parametere:entity: En node- eller kantvariabel fra et samsvarende mønster.

Returnerer:

Returnerer en matrise med strenger med alle etiketter for den angitte enheten.

Eksempler:

Vis etiketter for samsvarende noder:

MATCH (entity)
RETURN entity.name, labels(entity)

Utgang

Denne spørringen viser navnet og alle etikettene for hver node i grafen.

entity.name etiketter(enhet)
john.doe ["Bruker"]
admin.user ["Bruker"]
web-server ["System"]
Database ["System"]
domenekontroller ["System"]

Vis etiketter i projeksjoner med aliaser:

MATCH (n)-[e]->(target)
RETURN n.name, labels(n) AS n_labels, labels(e) AS edge_labels, target.name

Denne spørringen viser nodenavnene, etikettene og etikettene til koblingskantene.

n.name n_labels edge_labels target.name
john.doe ["Bruker"] ["CAN_ACCESS"] web-server
admin.user ["Bruker"] ["CAN_ACCESS"] domenekontroller
web-server ["System"] ["CAN_ACCESS"] Database
domenekontroller ["System"] ["CAN_ACCESS"] Database