Opérateur make-graph
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
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 ]]
Edges |
make-graph
SourceNodeId TargetNodeId -->
[ with_node_id=
DefaultNodeId ]
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. | |
DefaultNodeId | string |
Nom de la colonne pour l’ID de nœud par défaut. |
Retours
L’opérateur make-graph
retourne une expression de graphe et doit être suivi d’un opérateur de graphe. Chaque ligne de l’expression Edges source devient un bord dans le graphique avec des propriétés qui sont les valeurs de colonne de la ligne. Chaque ligne de l’expression tabulaire 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 la table 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.
Les utilisateurs peuvent gérer les informations de nœud de la manière suivante :
- Aucune information de nœud requise :
make-graph
se termine avec la source et la cible. - Propriétés de nœud explicites : utilisez jusqu’à deux expressions tabulaires à l’aide de «
with
Node1on
NodeId1 [,
Node2on
NodeId2 ]. » - Identificateur de nœud par défaut : utilisez «
with_node_id=
DefaultNodeId ».
Exemple
Graphique des arêtes et des nœuds
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 représentent différentes relations entre les nœuds. L’opérateur make-graph
génère le graphique. Ensuite, l’opérateur graph-match
est utilisé avec un modèle de graphique pour rechercher des chemins d’attaque menant au "Trent"
nœud système.
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 |
Identificateur de nœud par défaut
L’exemple suivant génère un graphique à l’aide de bords uniquement, avec la name
propriété comme identificateur de nœud par défaut. Cette approche est utile lors de la création d’un graphique à partir d’une expression tabulaire de bords, ce qui garantit que l’identificateur de nœud est disponible pour la section contraintes de l’opérateur suivant graph-match
.
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_node_id=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 |