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


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

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

Оператор graph-shortest-paths находит самые короткие пути между набором исходных узлов и набором целевых узлов в графе и возвращает таблицу с результатами.

Примечание.

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

Синтаксис

G graph-shortest-paths | [output = OutputOption] Шаблон where Предикат project [ColumnName=] Выражение [, ...]

Параметры

Имя (название) Type Обязательно Описание
G строка ✔️ Источник графа, как правило, выходные make-graph данные операции.
Шаблон строка ✔️ Шаблон пути, описывающий путь для поиска. Шаблоны должны содержать по крайней мере одну границу длины переменной и не могут содержать несколько последовательностей.
Предикат выражение Логическое выражение, состоящее из свойств именованных переменных в шаблоне и константы.
Выражение выражение ✔️ Скалярное выражение, определяющее выходную строку для каждого найденного пути, используя константы и ссылки на свойства именованных переменных в шаблоне.
OutputOption строка Указывает выходные данные поиска как any (по умолчанию) или all. Выходные данные указываются как any для одного кратчайшего пути для каждой пары источника или целевой пары и all для всех кратчайшего пути равной минимальной длины.

Нотация шаблона пути

В следующей таблице показаны поддерживаемые нотации шаблонов пути.

Элемент Именованной переменной Анонимный элемент
Узел (n) ()
Направленный край слева направо -[e]-> -->
Направленный край справа налево <-[e]- <--
Любой край направления -[e]- --
Ребра переменной длины -[e*3..5]- -[*3..5]-

Ребра переменной длины

Ребра переменной длины позволяет определенному шаблону повторяться несколько раз в определенных ограничениях. Звездочка (*) обозначает этот тип края, а затем минимальные и максимальные значения вхождения в формате min..max. Эти значения должны быть целыми скалярами. Любая последовательность ребер в этом диапазоне может соответствовать переменной краю шаблона, если все края последовательности соответствуют where ограничениям предложения.

Возвраты

Оператор graph-shortest-paths возвращает табличный результат, где каждая запись соответствует пути, найденному в графе. Возвращаемые столбцы определяются в предложении оператора project с помощью свойств узлов и ребер, определенных в шаблоне. Свойства и функции свойств ребер переменной длины возвращаются в виде динамического массива. Каждое значение в массиве соответствует вхождения края переменной длины.

Примеры

В этом разделе приведены практические примеры использования graph-shortest-paths оператора в различных сценариях.

Поиск any кратчайшего пути между двумя железнодорожными станциями

В следующем примере показано, как использовать graph-shortest-paths оператор для поиска кратчайшего пути между двумя станциями в транспортной сети. Запрос создает граф из данных connections и находит самый короткий путь от "South-West" "North" станции, учитывая пути до пяти подключений. Так как выходные данные по умолчанию являются any, он находит любой кратчайший путь.

let connections = datatable(from_station:string, to_station:string, line:string) 
[ 
  "Central", "North", "red",
  "North", "Central", "red", 
  "Central", "South",  "red", 
  "South", "Central",  "red", 
  "South", "South-West", "red", 
  "South-West", "South", "red", 
  "South-West", "West", "red", 
  "West", "South-West", "red", 
  "Central", "East", "blue", 
  "East", "Central", "blue", 
  "Central", "West", "blue",
  "West", "Central", "blue",
]; 
connections 
| make-graph from_station --> to_station with_node_id=station
| graph-shortest-paths (start)-[connections*1..5]->(destination)
  where start.station == "South-West" and destination.station == "North"
  project from = start.station, path = connections.to_station, line = connections.line, to = destination.station

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

от path line до
Юго-Западный регион [
"Юг",
"Центральная",
"Север"
]
[
"красный",
"красный",
"красный"
]
Север

Поиск всех коротких путей между двумя железнодорожными станциями

Следующий пример, как и в предыдущем примере, находит самые короткие пути в транспортной сети. Однако он использует output=all, поэтому возвращает все самые короткие пути.

let connections = datatable(from_station:string, to_station:string, line:string) 
[ 
  "Central", "North", "red",
  "North", "Central", "red", 
  "Central", "South",  "red", 
  "South", "Central",  "red", 
  "South", "South-West", "red", 
  "South-West", "South", "red", 
  "South-West", "West", "red", 
  "West", "South-West", "red", 
  "Central", "East", "blue", 
  "East", "Central", "blue", 
  "Central", "West", "blue",
  "West", "Central", "blue",
]; 
connections 
| make-graph from_station --> to_station with_node_id=station
| graph-shortest-paths output=all (start)-[connections*1..5]->(destination)
  where start.station == "South-West" and destination.station == "North"
  project from = start.station, path = connections.to_station, line = connections.line, to = destination.station

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

от path line до
Юго-Западный регион [
"Юг",
"Центральная",
"Север"
]
[
"красный",
"красный",
"красный"
]
Север
Юго-Западный регион [
"Запад",
"Центральная",
"Север"
]
[
"красный",
"синий",
"красный"
]
Север