Microsoft Sentinel kaavion (esikatselu) Graph Query Language (GQL) -viittaus

Koskee seuraavia: Microsoft Sentinel Graph

Huomautus

GQL-tuki on esikatselutilassa. Ominaisuudet ja syntaksi voivat muuttua palautteen ja jatkuvan kehityksen perusteella.

Tämä viittaus kattaa GQL-kielen peruskäsitteet, funktiot ja operaattorit. GQL (Graph Query Language) perustuu matemaattisen kaavion teoriakäsitteisiin, jotka muodostavat vankan perustan kaaviotietojen kyselyille. Näiden tekijöiden ymmärtäminen auttaa kirjoittamaan tehokkaampia kyselyitä ja ymmärtämään paremmin, miten GQL käsittelee tietojasi. GQL tarjoaa myös monipuolisen joukon funktioita ja operaattoreita, jotka toimivat kaaviokuvioiden, solmujen, reunojen ja ominaisuuksien kanssa.

Peruskäsitteet

Tässä osiossa käsitellään keskeisiä käsitteitä, jotka muodostavat GQL:n kaaviotietojen analyysin perustan.

Kaaviokuviot

Graph-mallit ovat GQL-kyselyiden perusosia. Ne kuvaavat rakennetta, jonka haluat löytää kaavion tiedoista käyttämällä deklaratiivista syntaksia, joka peilaa kuvaajien visuaalisen esityksen.

Solmukuviot

Solmukuviot määrittävät, miten kaavion yksittäiset solmut vastaavat toisiaan:

(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

Avainkäsitteet:

  • Muuttujan sidonta: (n) luo muuttujan n, johon voit viitata myöhemmin kyselyssä

  • Anonyymit solmut: (:Person) vastaa solmuja luomatta muuttujaa

  • Selitteiden suodatus: :Person rajoittaa vastaavuudet solmuihin, joilla on Henkilö-selite

  • Otsikkoyhdistelmät: And-, | OR-toimintojen käyttö &

Reunakuviot

Reunakuviot määrittävät, miten solmut yhdistyvät toisiinsa:

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

Avainkäsitteet:

  • Suunta: -> lähteville, <- saapuville, - mihin tahansa suuntaan

  • Reunatyypit: Käytä selitteitä kuten :works_at suodattaaksesi suhdetyypin mukaan

  • Useita tyyppejä: knows|likes vastaa jompaakumpaa suhdetyyppiä

Otsikkolausekkeet

Selitteet tarjoavat semanttisen merkityksen solmuille ja reunuille. GQL tukee monimutkaisia otsikkolausekkeita:

: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 

Toimijoiden

  • & (AND): Solmussa on oltava kaikki määritetyt selitteet

  • | (TAI): Solmussa on oltava vähintään yksi määritetty selite

  • ! (EI): Solmulla ei saa olla määritettyä otsikkoa

  • () : Monimutkaisten lausekkeiden ryhmittelyn sulkeet

Polkukuviot

Polkukuviot kuvaavat usean hypyn suhteita kaaviossa:

(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 

Vaihtelevan pituiset polut:

  • {2,4}: Tasan 2-4 humalaa

  • {1,}: vähintään 1 hyppy (ei sidottu). Ei-sidotut polkukyselyt on rajoitettu 8:aan siirtymään.

  • {,5}: Enintään 5 hyppyä

  • {5}: Tasan 5 humalaa

Polkumuuttujat

  • p=()->(): Tallentaa koko polun myöhempää analyysia varten

  • -, - RELATIONSHIPS(p)ja -käyttö NODES(p)PATH_LENGTH(p)

Useita kuvioita

GQL tukee monimutkaisia, epä lineaarista kaaviorakenteita:

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

Kuvion koostumus:

  • Useiden kuvioiden erottaminen pilkuilla ,
  • Kaikkien mallien on vastattava toisiaan samanaikaisesti
  • Muuttujia voidaan jakaa toistuvien mallien välillä

Vastaavuustilat

GQL tukee erilaisia polkujen vastaavuustiloja, jotka ohjaavat kuvioiden vastaavuutta kaaviotietoihin. Nämä tilat vaikuttavat suorituskykyyn, tuloksen täydellisyyteen ja palautettuihin polkutyyppeihin.

Vastaavuustilat ohjaavat sitä, miten kaavioelementtejä voidaan käyttää uudelleen kuviomuuttujien välillä yksittäisen MATCH-lauseen sisällä.

ERI REUNAT (oletus)

Oletustila. Vastaava reuna ei voi sitoa useampaan kuin yhteen reunamuuttujaan, mutta solmuja voi käyttää vapaasti uudelleen.

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

TOISTETTAVISSA OLEVAT ELEMENTIT

Mahdollistaa sekä reunojen että solmujen uudelleenkäyttämisen kuviomuuttujien välillä ilman rajoituksia.

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

Polkutilat

Polkutilat määrittävät toistorajoitusten perusteella, mitkä polkutyypit sisältyvät tuloksiin.

TRAIL

Suodattaa polut, joissa on toistuvia reunoja. Solmut voivat toistaa, mutta jokainen reuna voi näkyä vain kerran polkua kohden.

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

Funktiot ja operaattorit viittaavat

Graph Query Language (GQL) tarjoaa monipuolisen joukon funktioita ja operaattoreita, jotka toimivat kaaviokuvioiden, solmujen, reunojen ja ominaisuuksien kanssa.

GQL-perusfunktiot ja -operaattorit

Seuraavassa taulukossa on lueteltu GQL-perusfunktiot ja -operaattorit sekä esimerkkejä.

GQL-funktio/-operaattori Kuvaus Esimerkki GQL:stä
VASTINE Etsi kaaviokuvioita MATCH (a)-[r]->(b)
VALINNAINEN VASTINE Etsi kuvioita, joita ei ehkä ole olemassa VALINNAINEN VASTINE (p)->(c:Kaupunki)
JOSSA Suodatusmallit ja ominaisuudet WHERE henkilö.ikä > 25
SUODATIN Vastaa WHERE-lausetta, mutta sitä käytetään ilman MATCH-lauseita FILTER p.name = 'Carol' OR c.name = 'Seattle'
ON TYHJÄARVOINEN Tarkista tyhjäarvot WHERE person.age ON NULL
EI OLE TYHJÄARVOINEN Etsi muita kuin tyhjäarvoja WHERE person.age EI OLE TYHJÄARVOINEN
PALAUTTAA Projektin tulokset RETURN person.name, henkilö.ikä
ERILLISTÄ Palauta yksilölliset arvot PALAUTA ERILLINEN person.name
COUNT(*) Laske kaikki rivit PALAUTUSMÄÄRÄ(*)
COUNT() Muiden kuin tyhjäarvojen laskeminen RETURN COUNT(person.name)
SUM() Numeeristen arvojen summa RETURN SUM(person.age)
MIN() Pienin arvo RETURN MIN(person.age)
SUURIN() Suurin arvo RETURN MAX(henkilö.ikä)
AVG() Keskiarvo RETURN AVG(henkilö.ikä)
COLLECT_LIST() Arvojen kerääminen matriisiin RETURN COLLECT_LIST(person.name)
KOKO() Matriisin pituus RETURN SIZE(COLLECT_LIST(n.firstName))
labels() Näytä solmun tai reunan selitteet RETURN-otsikot (entiteetti)
UPPER() Isoiksi kirjaimiksi muuntaminen RETURN UPPER(person.name)
LOWER() Muunna pieniksi kirjaimiksi RETURN LOWER(person.name)
ALKAA MERKKIJONOLLA Merkkijono alkaa kuviolla MISTÄ PERSON.NAME ALKAA TOMILLA?
PÄÄTTYY MERKIN Merkkijono päättyy kuvioon MISSÄ person.name PÄÄTTYY 'Hanksiin'
SISÄLTÄÄ Merkkijono sisältää kuvion WHERE person.name SISÄLTÄÄ "Tomin"
|| Merkkijonon yhdistäminen RETURN n.firstName || ' ' || n.lastName
TRIM() Poista välilyönnit molemmista päistä RETURN TRIM(' abc ')
STRING_JOIN() Liitä matriisielementit erottimella RETURN STRING_JOIN(["a", "b" || "c"], "-")
CAST() Tietotyyppien muuntaminen CAST(person.age AS STRING)
ZONED_DATETIME() Päivämäärän ja ajan luominen merkkijonosta ZONED_DATETIME('2024-01-01')
PATH_LENGTH() Polun pituuden hakeminen RETURN PATH_LENGTH(path_variable)
LAJITTELUPERUSTE Lajittele tulokset ORDER BY person.age DESC
RAJA Rajoita tulosten määrä RAJA 10
& (AND) Tarran leikkaus MATCH (p:Person & uros)
| (TAI) Tunnisteiden yhdistäminen MATCH (n:Person | Elokuva)
! (EI) Otsikon negaatio MATCH (p:! Nainen)

Parhaat käytännöt

  • GQL ei määritä selkeästi, miten dynaamisia tyyppejä tulisi käsitellä. Voit välttää suorituksenaikaiset virheet kirjoittamalla sisäkkäiset kentät eksplisiittisesti niiden odotettuun tyyppiin (katso CAST).

Suorituskyvyn optimointi

Näiden strategioiden avulla voit optimoida GQL-kyselyn suorituskyvyn tuotantoympäristöissä:

Vihje

Aloita yksinkertaisista malleista ja lisää tarvittaessa monimutkaisuutta. Valvo kyselyn suorituskykyä ja säädä polkujen pituuksia ja suodattimia tulosten parantamiseksi.

Rajoita polkua vastaava alue:

  • Vähennä hakutilaa käyttämällä tiettyjä otsikkosuodattimia: MATCH (start:SpecificType) MATCH-arvon (aloitus) sijaan

  • Rajoita muuttujien pituuspolkuja kohtuullisilla rajoilla: MATCH (a)-[]->{1,3}(b) ei-sidottujen polkujen sijaan

  • Käytä WHERE-lauseita aikaisessa vaiheessa tulosten suodattamiseksi ennen kalliita toimintoja.

Käytä COUNT(*)-toimintoa olemassa olevien tarkistusten yhteydessä:

Jos sinun tarvitsee vain tarkistaa, onko kuvio olemassa, käytä COUNT(*) -funktiota täydellisten tulosten palauttamisen sijaan.

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

Rajoitukset

  • Kyselyrakenne: Kaikkien GQL-kyselyiden on alettava MATCH-lauseella.

  • Varatut avainsanat: Joitakin GQL-avainsanoja ei voi käyttää tunnisteina kyselyissä. Jotkin varatut avainsanat eivät ole heti ilmeisiä (esimerkiksi DATE on varattu avainsana). Jos kaaviotiedoissa on GQL-varattujen avainsanojen kanssa ristiriitaisia ominaisuuksien nimiä, käytä kaavion rakenteessa eri ominaisuuksien nimiä tai nimeä ne uudelleen ristiriitojen jäsentämisen välttämiseksi.

Tärkeää

Kun suunnittelet kaavion rakennetta, jotkin yleiset ominaisuuksien nimet saattavat olla ristiriidassa GQL:n varattujen avainsanojen kanssa. Vältä tai nimeä uudelleen näitä ominaisuuksien nimiä.

  • Ei INSERT/CREATE-tukea: Kaaviorakenteiden muutostoimintoja ei tueta.

  • Valinnaiset osumat: Tuetaan vain solmukuvioille (ei reunuksille).

  • Entiteettien vastaavuustarkistuksia ei tueta: GQL-tarkistuksia (MATCH (n)-[]-(n2) WHERE n1 <> n2) ei tueta. Käytä eksplisiittisiä kenttävertailuja esimerkiksi n.id <> n2.id

  • Aika ja aikavyöhyke: Moottori toimii UTC:ssä. Datetime-literaalien on käytettävä vyöhykettä datetime; vain UTC-vyöhykettä tuetaan kohteen kautta ZONED_DATETIME("2011-12-31 23:59:59.9").

  • Keston askelväli: Kestot tukevat enintään päiviä ja pienempiä yksiköitä nanosekunteihin asti. Yli päivän mittayksiköitä (esimerkiksi viikot, kuukaudet, vuodet) ei tueta.

Labels()-funktion mukautettu GQL-funktio

Funktio labels() näyttää solmun tai reunan selitteet matriisina.

Syntaksi:

labels(entity)

Parametrit:entity: Solmu tai reunamuuttuja vastaavasta kuviosta.

Palauttaa:

Palauttaa merkkijonomatriisin, jossa on kaikki määritetyn entiteetin otsikot.

Esimerkkejä:

Näytä vastaavuussolmujen selitteet:

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

Lähtö

Tämä kysely näyttää kaavion kunkin solmun nimen ja kaikki otsikot.

entity.name labels(entiteetti)
john.doe ["Käyttäjä"]
admin.user ["Käyttäjä"]
web-server ["Järjestelmä"]
Tietokannan ["Järjestelmä"]
toimialueen ohjauskone ["Järjestelmä"]

Näytä otsikot projektioina aliaksilla:

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

Tämä kysely näyttää solmujen nimet, niiden selitteet ja yhdistävien reunojen selitteet.

n.name n_labels edge_labels target.name
john.doe ["Käyttäjä"] ["CAN_ACCESS"] web-server
admin.user ["Käyttäjä"] ["CAN_ACCESS"] toimialueen ohjauskone
web-server ["Järjestelmä"] ["CAN_ACCESS"] Tietokannan
toimialueen ohjauskone ["Järjestelmä"] ["CAN_ACCESS"] Tietokannan