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


Оператор graph-mark-components (предварительная версия)

Область применения: ✅Microsoft Fabric✅Azure Data ExplorerAzure MonitorMicrosoft Sentinel

Оператор graph-mark-components находит все подключенные компоненты графа и помечает каждый узел идентификатором компонента.

Примечание.

Этот оператор используется в сочетании с оператором make-graph.

Синтаксис

G graph-mark-components | [ Kind] [with_component_id = =kind ComponentId]

Параметры

Имя (название) Type Обязательно Описание
G строка ✔️ Источник графа.
Вид строка Тип подключенного компонента ( weak по умолчанию) или strong. Слабый компонент — это набор узлов, подключенных по пути, игнорируя направление ребер. Сильный компонент — это набор узлов, подключенных в обоих направлениях, учитывая направления ребра.
ComponentId строка Имя свойства, обозначающее идентификатор компонента. Имя ComponentIdсвойства по умолчанию .

Возвраты

Оператор graph-mark-components возвращает результат графа, где каждый узел имеет идентификатор компонента в свойстве ComponentId. Идентификатор — это отсчитываемый от нуля индекс компонентов. Каждый индекс компонента выбирается произвольно и может не совпадать между запусками.

Примеры

Поиск семей по их отношениям

В следующем примере создается граф из набора дочерних пар и определяет подключенные компоненты с помощью идентификатора family .

let ChildOf = datatable(child:string, parent:string) 
[ 
  "Alice", "Bob",  
  "Carol", "Alice",  
  "Carol", "Dave",  
  "Greg", "Alice",  
  "Greg", "Dave",  
  "Howard", "Alice",  
  "Howard", "Dave",  
  "Eve", "Frank",  
  "Frank", "Mallory",
  "Eve", "Kirk",
]; 
ChildOf 
| make-graph child --> parent with_node_id=name
| graph-mark-components with_component_id = family
| graph-to-table nodes

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

name семейство
Алиса 0
Борис 0
Лилия 0
Dave 0
Грег 0
Говард 0
Канун 1
Откровенный 1
Мэллори 1
Церковь 1

Найти наибольшего общего предка для каждой семьи

В следующем примере используется идентификатор подключенного компонента family и graph-match оператор для идентификации наибольшего предка каждой семьи в наборе дочерних данных.

let ChildOf = datatable(child:string, parent:string) 
[ 
  "Alice", "Bob",  
  "Carol", "Alice",  
  "Carol", "Dave",  
  "Greg", "Alice",  
  "Greg", "Dave",  
  "Howard", "Alice",  
  "Howard", "Dave",  
  "Eve", "Frank",  
  "Frank", "Mallory",
  "Eve", "Kirk",
]; 
ChildOf 
| make-graph child --> parent with_node_id=name
| graph-mark-components with_component_id = family
| graph-match (descendant)-[childOf*1..5]->(ancestor)
  project name = ancestor.name, lineage = childOf.child, family = ancestor.family
| summarize (generations, name) = argmax(array_length(lineage),name) by family

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

семейство Поколений name
1 2 Мэллори
0 2 Борис