Оператор graph-shortest-paths (предварительная версия)
Область применения: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Оператор graph-shortest-paths
находит самые короткие пути между набором исходных узлов и набором целевых узлов в графе и возвращает таблицу с результатами.
Синтаксис
G graph-shortest-paths
|
[output
=
OutputOption] Шаблон where
Предикат project
[ColumnName=
] Выражение [,
...]
Параметры
Нотация шаблона пути
В следующей таблице показаны поддерживаемые нотации шаблонов пути.
Элемент | Именованной переменной | Анонимный элемент |
---|---|---|
Узел | ( 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 | до |
---|---|---|---|
Юго-Западный регион | [ "Юг", "Центральная", "Север" ] |
[ "красный", "красный", "красный" ] |
Север |
Юго-Западный регион | [ "Запад", "Центральная", "Север" ] |
[ "красный", "синий", "красный" ] |
Север |