Оператор make-graph
Область применения: ✅Microsoft Fabric✅✅
Оператор make-graph
создает структуру графа из табличных входных данных ребер и узлов.
Синтаксис
Edges|
make-graph
SourceNodeId TargetNodeId-->
[ with
Nodes1on
NodeId1 [,
Nodes2 NodeId2on
]]
Edges|
make-graph
-->
[ with_node_id=
DefaultNodeId ]
Параметры
Имя (название) | Type | Обязательно | Описание |
---|---|---|---|
Края | string |
✔️ | Табличный источник, содержащий края графа, каждая строка представляет край в графе. |
SourceNodeId | string |
✔️ | Столбец в ребрах с идентификаторами исходного узла ребер. |
TargetNodeId | string |
✔️ | Столбец в ребрах с идентификаторами целевых узлов ребер. |
Узлы | string |
Табличные выражения, содержащие свойства узлов в графе. | |
NodesId | string |
Столбцы с идентификаторами узлов в узлах. | |
DefaultNodeId | string |
Имя столбца для идентификатора узла по умолчанию. |
Возвраты
Оператор make-graph
возвращает выражение графа и должен следовать оператору графа. Каждая строка в выражении source Edges становится краем в графе со свойствами, которые являются значениями столбцов строки. Каждая строка в табличном выражении nodes становится узлом в графе со свойствами, которые являются значениями столбцов строки. Узлы, которые отображаются в таблице Edges, но не имеют соответствующей строки в таблице Nodes, создаются как узлы с соответствующим идентификатором узла и пустыми свойствами.
Примечание.
Каждый узел имеет уникальный идентификатор. Если один и тот же идентификатор узла отображается как в таблицах Nodes1 , так и в таблицах Nodes2 создается один узел путем объединения их свойств. При наличии конфликтующих значений свойств для одного узла один из значений выбирается произвольно.
Пользователи могут обрабатывать сведения о узле следующими способами:
-
Сведения о узле не требуются:
make-graph
завершается с исходным и целевым объектами. -
Явные свойства узла: используйте до двух табличных выражений с помощью
on
NodeId1 [,
on
NodeId2 ]". -
Идентификатор узла по умолчанию: используйте
with_node_id=
DefaultNodeId.
Пример
Граф ребер и узлов
В следующем примере создается граф из ребер и таблиц узлов. Узлы представляют людей и системы, а края представляют различные связи между узлами. Оператор make-graph
создает граф.
graph-match
Затем оператор используется с шаблоном графа для поиска путей атаки, ведущих к системным "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
Выходные данные
Злоумышленник | Скомпрометировано | Системные |
---|---|---|
Мэллори | Борис | Трент |
Идентификатор узла по умолчанию
В следующем примере создается граф с использованием только ребер с name
свойством в качестве идентификатора узла по умолчанию. Этот подход полезен при создании графа из табличного выражения ребер, обеспечивая доступность идентификатора узла для раздела ограничений последующего 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
Выходные данные
Злоумышленник | Скомпрометировано | Системные |
---|---|---|
Мэллори | Борис | Трент |