Partager via


Opérateur make-graph

L’opérateur make-graph génère une structure de graphe à partir d’entrées tabulaires de bords et de nœuds.

Syntaxe

Edges | make-graph SourceNodeId TargetNodeId --> [ with Node1 on NodeId1 [, Node2 on NodeId2 ]]

Paramètres

Nom Type Requise Description
Bords string ✔️ Source tabulaire contenant les bords du graphe, chaque ligne représente un bord dans le graphique.
SourceNodeId string ✔️ Colonne dans Edges avec les ID de nœud source des bords.
TargetNodeId string ✔️ Colonne dans Edges avec les ID de nœud cible des bords.
Nœuds string Expressions tabulaires contenant les propriétés des nœuds dans le graphique.
NodeId string Colonnes avec les ID de nœud dans les nœuds.

Retours

L’opérateur make-graph retourne une expression de graphique et doit être suivi d’un opérateur de graphe. Chaque ligne de l’expression Edges source devient un bord avec le graphique avec des propriétés qui sont les valeurs de colonne de la ligne. Chaque ligne dans l’expression tabulaire de nœuds devient un nœud dans le graphique avec des propriétés qui sont les valeurs de colonne de la ligne. Les nœuds qui apparaissent dans la table Edges , mais qui n’ont pas de ligne correspondante dans les tables de nœuds sont créés en tant que nœuds avec l’ID de nœud correspondant et les propriétés vides.

Remarque

Chaque nœud a un identificateur unique. Si le même ID de nœud apparaît dans les tables Node1 et Node2 , un nœud unique est créé en fusionnant leurs propriétés. S’il existe des valeurs de propriété conflictuelles pour le même nœud, l’une des valeurs est arbitrairement choisie.

Exemple

L’exemple suivant génère un graphique à partir de tableaux de bords et de nœuds. Les nœuds représentent des personnes et des systèmes, et les arêtes sont des relations différentes entre les nœuds. L’opérateur make-graph génère le graphique. Ensuite, il existe un appel à graph-match un modèle de graphique qui recherche les chemins d’attaque vers le nœud système « 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

Sortie

Attaquant Compromis System
Mallory Bob Trent