operator make-graph
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Operator make-graph
tworzy strukturę grafu na podstawie tabelarycznych danych wejściowych krawędzi i węzłów.
Składnia
Edges SourceNodeId TargetNodeId -->
[ with
Węzły1 make-graph
|
on
NodeId1 [ ,
Węzły2 on
NodeId2 ]]
Edges |
make-graph
SourceNodeId TargetNodeId -->
[ with_node_id=
DefaultNodeId ]
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
Krawędzie | string |
✔️ | Źródło tabelaryczne zawierające krawędzie grafu, każdy wiersz reprezentuje krawędź na grafie. |
Identyfikator węzła źródłowego | string |
✔️ | Kolumna w krawędziach z identyfikatorami węzłów źródłowych krawędzi. |
TargetNodeId | string |
✔️ | Kolumna w krawędziach z identyfikatorami węzłów docelowych krawędzi. |
Węzły | string |
Wyrażenia tabelaryczne zawierające właściwości węzłów na grafie. | |
Identyfikator węzłów | string |
Kolumny z identyfikatorami węzłów w węzłach. | |
DefaultNodeId | string |
Nazwa kolumny domyślnego identyfikatora węzła. |
Zwraca
Operator make-graph
zwraca wyrażenie grafu i musi być zgodny z operatorem grafu. Każdy wiersz w wyrażeniu krawędzi źródłowych staje się krawędzią na grafie z właściwościami, które są wartościami kolumn wiersza. Każdy wiersz w wyrażeniu tabelarycznym Węzły staje się węzłem na grafie z właściwościami, które są wartościami kolumn wiersza. Węzły, które są wyświetlane w tabeli Edges, ale nie mają odpowiedniego wiersza w tabeli Węzły, są tworzone jako węzły z odpowiednim identyfikatorem węzła i pustymi właściwościami.
Uwaga
Każdy węzeł ma unikatowy identyfikator. Jeśli ten sam identyfikator węzła pojawi się w tabelach Node1 i Nodes2 , jeden węzeł jest tworzony przez scalenie ich właściwości. Jeśli występują konflikty wartości właściwości dla tego samego węzła, jedna z wartości jest dowolnie wybierana.
Użytkownicy mogą obsługiwać informacje o węźle w następujący sposób:
- Brak wymaganych informacji o węźle:
make-graph
kończy się elementem źródłowym i docelowym. - Jawne właściwości węzła: użyj maksymalnie dwóch wyrażeń tabelarycznych przy użyciu węzłów "
with
NodeId11on
[,
Węzły2on
NodeId2]." - Domyślny identyfikator węzła: użyj wartości "
with_node_id=
DefaultNodeId".
Przykład
Wykres krawędzi i węzłów
Poniższy przykład tworzy graf z tabel krawędzi i węzłów. Węzły reprezentują osoby i systemy, a krawędzie reprezentują różne relacje między węzłami. Operator make-graph
tworzy graf. graph-match
Następnie operator jest używany ze wzorcem grafu do wyszukiwania ścieżek ataku prowadzących do węzła systemowego"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
Wyjście
Osoba atakująca | Zagrożone | System |
---|---|---|
Mallory | Robert | Trent |
Domyślny identyfikator węzła
Poniższy przykład tworzy graf przy użyciu tylko krawędzi z name
właściwością jako domyślnym identyfikatorem węzła. Takie podejście jest przydatne podczas tworzenia grafu na podstawie tabelarycznego wyrażenia krawędzi, zapewniając, że identyfikator węzła jest dostępny dla sekcji ograniczeń kolejnego graph-match
operatora.
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
Wyjście
Osoba atakująca | Zagrożone | System |
---|---|---|
Mallory | Robert | Trent |