Поделиться через


Оператор make-graph

Область применения: ✅Microsoft Fabric

Оператор make-graph создает структуру графа из табличных входных данных ребер и узлов.

Синтаксис

Edges|make-graph SourceNodeId TargetNodeId--> [ withNodes1on 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 создается один узел путем объединения их свойств. При наличии конфликтующих значений свойств для одного узла один из значений выбирается произвольно.

Пользователи могут обрабатывать сведения о узле следующими способами:

  1. Сведения о узле не требуются:make-graph завершается с исходным и целевым объектами.
  2. Явные свойства узла: используйте до двух табличных выражений с помощью onNodeId1 [,onNodeId2 ]".
  3. Идентификатор узла по умолчанию: используйте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

Выходные данные

Злоумышленник Скомпрометировано Системные
Мэллори Борис Трент