Sdílet prostřednictvím


operátor make-graph

Operátor make-graph sestaví strukturu grafu z tabulkových vstupů hran a uzlů.

Syntaxe

Hrany | make-graph SourceNodeId TargetNodeId --> [ with Nodes1 on NodeId1 [ , Nodes2 on NodeId2 ]]

Parametry

Název Type Požadováno Popis
Hrany string ✔️ Tabulkový zdroj obsahující okraje grafu, každý řádek představuje okraj grafu.
SourceNodeId string ✔️ Sloupec v hranách s ID zdrojových uzlů hran.
TargetNodeId string ✔️ Sloupec v hranách s ID cílových uzlů hrany.
Uzly string Tabulkové výrazy obsahující vlastnosti uzlů v grafu.
NodesId string Sloupce s ID uzlů v Uzlech.

Návraty

Operátor make-graph vrátí výraz grafu a musí být následovaný operátorem grafu. Každý řádek ve výrazu zdrojových hran se stane hranou s grafem s vlastnostmi, které jsou hodnotami sloupců řádku. Každý řádek v tabulkovém výrazu uzlů se stane uzlem v grafu s vlastnostmi, které jsou hodnotami sloupců řádku. Uzly, které se zobrazují v tabulce Hrany , ale nemají odpovídající řádek v tabulkách uzlů, se vytvoří jako uzly s odpovídajícími ID a prázdnými vlastnostmi uzlu.

Poznámka:

Každý uzel má jedinečný identifikátor. Pokud se stejné ID uzlu zobrazí v tabulkách Nodes1 i Nodes2 , vytvoří se jeden uzel sloučením jejich vlastností. Pokud existují konfliktní hodnoty vlastností pro stejný uzel, jedna z hodnot je libovolně zvolena.

Příklad

Následující příklad vytvoří graf z hran a tabulek uzlů. Uzly představují lidi a systémy a hrany jsou různé vztahy mezi uzly. Operátor make-graph sestaví graf. Pak existuje volání graph-match se vzorem grafu, který hledá cesty útoku k systémovému uzlu "Trent".

let nodes = datatable(name:string, type:string, age:int) 
[ 
  "Alice", "Person", 23,  
  "Bob", "Person", 31,  
  "Eve", "Person", 17,  
  "Mallory", "Person", 29,  
  "Trent", "System", 99 
]; 
let edges = datatable(source:string, destination:string, edge_type:string) 
[ 
  "Alice", "Bob", "communicatesWith",  
  "Alice", "Trent", "trusts",  
  "Bob", "Trent", "hasPermission",  
  "Eve", "Alice", "attacks",  
  "Mallory", "Alice", "attacks",  
  "Mallory", "Bob", "attacks"  
]; 
edges 
| make-graph source --> destination with nodes on name 
| graph-match (mallory)-[attacks]->(compromised)-[hasPermission]->(trent) 
  where mallory.name == "Mallory" and trent.name == "Trent" and attacks.edge_type == "attacks" and hasPermission.edge_type == "hasPermission" 
  project Attacker = mallory.name, Compromised = compromised.name, System = trent.name

Výstup

Útočník Udělal kompromis Systémový
Mallory Robert Trent