Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Gælder for: Microsoft Sentinel Graph
Bemærk!
Understøttelse af GQL fås som prøveversion. Funktioner og syntaks kan ændres baseret på feedback og løbende udvikling.
Denne reference dækker de grundlæggende begreber, funktioner og operatorer for Graph Query Language (GQL). Graph Query Language (GQL) er baseret på matematiske grafteoribegreber, der giver et solidt grundlag for forespørgsler om grafdata. Hvis du forstår disse grundlæggende funktioner, kan du skrive mere effektive forespørgsler og bedre forstå, hvordan GQL behandler dine data. GQL indeholder også et omfattende sæt funktioner og operatorer til at arbejde med grafmønstre, noder, kanter og egenskaber.
Grundlæggende begreber
I dette afsnit beskrives de kernebegreber, der danner grundlaget for grafdataanalyser med GQL.
Grafmønstre
Grafmønstre er kernekomponenterne i GQL-forespørgsler. De beskriver den struktur, du vil finde i dine grafdata, ved hjælp af en deklarativ syntaks, der afspejler den visuelle repræsentation af grafer.
Nodemønstre
Nodemønstre angiver, hvordan de enkelte noder i grafen skal matche:
(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
Vigtige begreber:
Variabelbinding:
(n)Opretter en variabel n, som du kan referere til senere i forespørgslenAnonyme noder:
(:Person)matcher noder uden at oprette en variabelNavnefiltrering:
:Personbegrænser match til noder med personnavnetNavnekombinationer: Bruges
&til AND-handlinger|til OR-handlinger
Kantmønstre
Edge-mønstre definerer, hvordan noder opretter forbindelse til hinanden:
-[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)
Vigtige begreber:
Retning:
->for udgående,<-for indgående,-for enhver retningKanttyper: Brug navne som
:works_atat filtrere efter relationstypeFlere typer:
knows|likesSvarer til begge relationstyper
Navneudtryk
Mærkater giver semantisk betydning for noder og kanter. GQL understøtter komplekse mærkatudtryk:
: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
&(AND): Noden skal have alle de angivne navne|(OR): Noden skal have mindst én angivet etiket!(NOT): Noden må ikke have den angivne etiket(): Parenteser til gruppering af komplekse udtryk
Stimønstre
Stimønstre beskriver relationer med flere hop 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
Stier med variabel længde:
{2,4}: Præcis 2 til 4 hop{1,}: 1 eller flere hop (ubundet). Ubundne stiforespørgsler er begrænset til 8 hop.{,5}: Op til 5 hop{5}: Præcis 5 hop
Stivariabler
p=()->(): Henter hele stien til senere analyseFå adgang til med
NODES(p), ,RELATIONSHIPS(p)PATH_LENGTH(p)
Flere mønstre
GQL understøtter komplekse, ikke-lineære grafstrukturer:
(a)->(b), (a)->(c) -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d) -- Non-linear structures
Mønstersammensætning:
- Brug kommaer
,til at adskille flere mønstre - Alle mønstre skal matche samtidigt
- Variabler kan deles på tværs af mønstre
Søg efter tilstande
GQL understøtter forskellige tilstande for matchning af stier, der styrer, hvordan mønstre matches i forhold til grafdata. Disse tilstande påvirker ydeevnen, resultatets fuldførelse og de typer stier, der returneres.
Matchtilstande styrer, hvordan grafelementer kan genbruges på tværs af mønstervariabler i en enkelt MATCH-delsætning.
FORSKELLIGE KANTER (standard)
Standardtilstanden. En matchende kant kan ikke binde til mere end én kantvariabel, men noder kan genbruges frit.
MATCH (a)-[r1]->(b)-[r2]->(c)
-- r1 and r2 must be different edges
-- a, b, c can be the same or different nodes
ELEMENTER, DER KAN GENTAGES
Gør det muligt at genbruge både kanter og noder på tværs af mønstervariabler uden begrænsninger.
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
Stitilstande
Stitilstande styrer, hvilke typer stier der medtages i resultater baseret på gentagelsesbegrænsninger.
TRAIL
Filtrerer stier, der har gentagne kanter, ud. Noder kan gentages, men hver kant kan kun vises én gang pr. sti.
MATCH TRAIL (a)-[]->{1,3}(b)
-- No edge can appear twice in the same path
-- Nodes may repeat
Reference til funktioner og operatorer
Graph Query Language (GQL) indeholder et omfattende sæt funktioner og operatorer til at arbejde med grafmønstre, noder, kanter og egenskaber.
Centrale GQL-funktioner og -operatorer
I følgende tabel vises de vigtigste GQL-funktioner og -operatorer samt eksempler.
| GQL-funktion/-operator | Beskrivelse | GQL-eksempel |
|---|---|---|
| MATCHE | Find grafmønstre | MATCH (a)-[r]->(b) |
| VALGFRIT MATCH | Find mønstre, der muligvis ikke findes | VALGFRI MATCH (p)->(c:City) |
| HVOR | Filtrer mønstre og egenskaber | HVOR person.alder > 25 |
| FILTER | Svarer til WHERE, men bruges uden MATCH-delsætninger | FILTER p.name = 'Carol' OR c.name = 'Seattle' |
| ER NULL | Kontrollér, om der er null-værdier | WHERE person.age ER NULL |
| ER IKKE NULL | Kontrollér, om der er værdier, der ikke er null | HVOR person.alder IKKE ER NULL |
| VENDE TILBAGE | Projektresultater | RETURNer person.name, person.alder |
| FORSKELLIGE | Returner entydige værdier | RETURNER DISTINKTE person.name |
| COUNT(*) | Tæl alle rækker | RETURN COUNT(*) |
| COUNT() | Tæl værdier, der ikke er null | RETURN COUNT(person.name) |
| SUM() | Sum numeriske værdier | RETURN SUM(person.age) |
| MIN() | Minimumværdi | RETURN MIN(person.age) |
| MAX() | Maksimumværdi | RETURN MAX(person.age) |
| GNS.() | Gennemsnitlig værdi | RETURN AVG(person.age) |
| COLLECT_LIST() | Indsaml værdier i matrix | RETURNer COLLECT_LIST(person.name) |
| SIZE() | Matrixlængde | RETURN SIZE(COLLECT_LIST(n.firstName)) |
| labels() | Vis navne for en node eller kant | RETURN-navne (enhed) |
| UPPER() | Konvertér til store bogstaver | RETURNER UPPER(person.name) |
| LOWER() | Konvertér til små bogstaver | RETURNER LAVERE(person.name) |
| STARTER MED | Strengen starter med mønsteret | HVOR person.name STARTER MED 'Tom' |
| SLUTTER MED | Strengen slutter med mønster | HVOR person.name SLUTTER MED 'Hanks' |
| INDEHOLDER | Strengen indeholder et mønster | HVOR person.name INDEHOLDER 'Tom' |
| || | Strengsammenkædning | RETURN n.firstName || ' ' || n.lastName |
| TRIM() | Fjern mellemrum fra begge ender | RETURN TRIM(' abc ') |
| STRING_JOIN() | Sammenføj matrixelementer med afgrænser | RETURN STRING_JOIN(["a", "b" || "c"], "-") |
| CAST() | Konvertér datatyper | CAST(person.age SOM STRENG) |
| ZONED_DATETIME() | Opret datetime fra streng | ZONED_DATETIME('2024-01-01') |
| PATH_LENGTH() | Hent længden af en sti | RETURNer PATH_LENGTH(path_variable) |
| SORTÉR EFTER | Sortér resultater | ORDER BY person.age DESC |
| GRÆNSE | Begræns resultatantal | GRÆNSE 10 |
| & (AND) | Navneskæringspunkt | MATCH (p:Person & mand) |
| | (ELLER) | Navneforbundet | MATCH (n:Person | Film) |
| ! (IKKE) | Navne negation | MATCH (p:! Kvinde) |
Anbefalede fremgangsmåder
- GQL definerer ikke tydeligt, hvordan dynamiske typer skal håndteres. Hvis du vil undgå kørselsfejl, skal du eksplicit konvertere indlejrede felter til deres forventede type (se CAST).
Optimering af ydeevnen
Brug disse strategier til at optimere ydeevnen af GQL-forespørgsler i produktionsmiljøer:
Tip
Start med enkle mønstre, og øg derefter kompleksiteten, hvis det er nødvendigt. Overvåg ydeevnen af forespørgsler, og juster stilængder og filtre for at forbedre resultaterne.
Begræns stimatchningsområde:
Brug specifikke navnefiltre til at reducere søgepladsen: MATCH (start:SpecificType) i stedet for MATCH (start)
Begræns variable længdestier med rimelige grænser: MATCH (a)-[]->{1,3}(b) i stedet for ubundne stier
Anvend WHERE-delsætninger tidligt for at filtrere resultater før dyre handlinger.
Brug COUNT(*) til kontrol af eksistens:
Hvis du kun har brug for at kontrollere, om der findes et mønster, skal du bruge COUNT(*) i stedet for at returnere fulde resultater.
MATCH (user:User)-[:SUSPICIOUS_ACTIVITY]->(target)
WHERE user.id = 'user123'
RETURN COUNT(*) > 0 AS HasSuspiciousActivity
Begrænsninger
Forespørgselsstruktur: Alle GQL-forespørgsler skal starte med en MATCH-sætning.
Reserverede nøgleord: Nogle GQL-nøgleord kan ikke bruges som identifikatorer i forespørgsler. Nogle reserverede nøgleord er ikke umiddelbart indlysende (f.eks. er DATE et reserveret nøgleord). Hvis dine grafdata har egenskabsnavne, der er i konflikt med reserverede GQL-nøgleord, kan du bruge forskellige egenskabsnavne i grafskemaet eller omdøbe dem for at undgå fortolkningskonflikter.
Vigtigt!
Når du designer dit grafskema, kan nogle almindelige egenskabsnavne være i konflikt med GQL-reserverede nøgleord. Undgå eller omdøb disse egenskabsnavne.
Ingen INSERT/CREATE-understøttelse: Handlinger til ændring af grafstrukturer understøttes ikke.
Valgfrie matches: Understøttes kun for nodemønstre (ikke kanter).
Kontroller af enhedsækvivalens understøttes ikke: GQL-objekter
(MATCH (n)-[]-(n2) WHERE n1 <> n2)understøttes ikke. Brug eksplicitte feltsammenligninger i stedet, f.eks.n.id <> n2.idTid og tidszone: Motoren arbejder i UTC. Datetime-konstanter skal bruge zoned datetime. Kun UTC-zonen understøttes via
ZONED_DATETIME("2011-12-31 23:59:59.9").Varighedsgranularitet: Varigheder understøtter op til dage og mindre enheder ned til nanosekunder. Enheder, der er større end dage (f.eks. uger, måneder og år), understøttes ikke.
Labels() brugerdefineret GQL-funktion
Funktionen labels() viser mærkaterne for en node eller kant som en matrix.
Syntaks:
labels(entity)
Parametre:entity: En node- eller kantvariabel fra et matchende mønster.
Returnerer:
Returnerer en matrix af strenge med alle navne for den angivne enhed.
Eksempler:
Vis navne for matchede noder:
MATCH (entity)
RETURN entity.name, labels(entity)
Output
Denne forespørgsel viser navnet og alle mærkater for hver node i grafen.
| entity.name | labels(objekt) |
|---|---|
| john.doe | ["Bruger"] |
| admin.user | ["Bruger"] |
| web-server | ["System"] |
| Database | ["System"] |
| domænecontroller | ["System"] |
Vis navne i projektioner med aliasser:
MATCH (n)-[e]->(target)
RETURN n.name, labels(n) AS n_labels, labels(e) AS edge_labels, target.name
Denne forespørgsel viser nodenavne, deres navne og etiketterne for forbundne kanter.
| n.name | n_labels | edge_labels | target.name |
|---|---|---|---|
| john.doe | ["Bruger"] | ["CAN_ACCESS"] | web-server |
| admin.user | ["Bruger"] | ["CAN_ACCESS"] | domænecontroller |
| web-server | ["System"] | ["CAN_ACCESS"] | Database |
| domænecontroller | ["System"] | ["CAN_ACCESS"] | Database |