Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
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ørringenAnonyme noder:
(:Person)samsvarer med noder uten å opprette en variabelEtikettfiltrering:
:Personbegrenser treff til noder med personetikettenEtikettkombinasjoner: 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 retningerKanttyper: Bruk etiketter som
:works_atå filtrere etter relasjonstypeFlere typer:
knows|likessamsvarer med én av relasjonstypene
Etikettuttrykk
Etiketter gir semantisk betydning for noder og kanter. GQL støtter komplekse etikettuttrykk:
:Person&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 analyseAccess 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 eksempeln.id <> n2.idTid 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 |