Make-Graph-Operator
Gilt für: ✅Microsoft Fabric✅✅
Der make-graph
Operator erstellt eine Diagrammstruktur aus tabellarischen Eingaben von Kanten und Knoten.
Syntax
Edges|
make-graph
SourceNodeId-->
TargetNodeId [ with
Nodes1on
NodeId1 [,
Nodes2on
NodeId2 ]]
Edges|
make-graph
SourceNodeId-->
TargetNodeId [ with_node_id=
DefaultNodeId ]
Parameter
Name | Type | Erforderlich | Beschreibung |
---|---|---|---|
Kanten | string |
✔️ | Die tabellarische Quelle, die die Ränder des Diagramms enthält, stellt jede Zeile einen Rand im Diagramm dar. |
SourceNodeId | string |
✔️ | Die Spalte in Edges mit den Quellknoten-IDs der Kanten. |
TargetNodeId | string |
✔️ | Die Spalte in Edges mit den Zielknoten-IDs der Kanten. |
Knoten | string |
Die tabellarischen Ausdrücke, die die Eigenschaften der Knoten im Diagramm enthalten. | |
NodesId | string |
Die Spalten mit den Knoten-IDs in Knoten. | |
DefaultNodeId | string |
Der Name der Spalte für die Standardknoten-ID. |
Gibt zurück
Der make-graph
Operator gibt einen Diagrammausdruck zurück und muss von einem Diagrammoperator gefolgt werden. Jede Zeile im Quell-Edges-Ausdruck wird zu einem Rand im Diagramm mit Eigenschaften, die die Spaltenwerte der Zeile sind. Jede Zeile im tabellarischen Ausdruck "Knoten " wird zu einem Knoten im Diagramm mit Eigenschaften, die die Spaltenwerte der Zeile sind. Knoten, die in der Tabelle "Kanten" angezeigt werden, aber keine entsprechende Zeile in der Tabelle "Knoten " haben, werden als Knoten mit der entsprechenden Knoten-ID und leeren Eigenschaften erstellt.
Hinweis
Jeder Knoten verfügt über einen eindeutigen Bezeichner. Wenn die gleiche Knoten-ID sowohl in den Tabellen "Knoten1 " als auch "Knoten2 " angezeigt wird, wird ein einzelner Knoten durch Zusammenführen ihrer Eigenschaften erstellt. Wenn konfliktende Eigenschaftswerte für denselben Knoten vorhanden sind, wird einer der Werte willkürlich ausgewählt.
Benutzer können Knoteninformationen auf folgende Weise behandeln:
-
Es sind keine Knoteninformationen erforderlich:
make-graph
wird mit Quelle und Ziel abgeschlossen. -
Explizite Knoteneigenschaften: Verwenden von bis zu zwei tabellarischen Ausdrücken mit "
on
NodeId1 [on
NodeId2 ]." -
Standardknotenbezeichner: "DefaultNodeId" verwenden
with_node_id=
.
Beispiel
Ränder und Knotendiagramm
Im folgenden Beispiel wird ein Diagramm aus Rändern und Knotentabellen erstellt. Die Knoten stellen Personen und Systeme dar, und die Kanten stellen unterschiedliche Beziehungen zwischen Knoten dar. Der make-graph
Operator erstellt das Diagramm. Anschließend wird der graph-match
Operator mit einem Diagrammmuster verwendet, um nach Angriffspfaden zu suchen, die "Trent"
zum Systemknoten führen.
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
Output
Angreifer | Kompromittiert | System |
---|---|---|
Mallory | Bob | Trent |
Standardknotenbezeichner
Im folgenden Beispiel wird ein Diagramm erstellt, das nur Ränder verwendet, wobei die name
Eigenschaft als Standardknotenbezeichner verwendet wird. Dieser Ansatz ist hilfreich beim Erstellen eines Diagramms aus einem tabellarischen Ausdruck von Kanten, um sicherzustellen, dass der Knotenbezeichner für den Einschränkungsbereich des nachfolgenden graph-match
Operators verfügbar ist.
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
Output
Angreifer | Kompromittiert | System |
---|---|---|
Mallory | Bob | Trent |