그래프 최단 경로 연산자(미리 보기)
적용 대상: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
연산자는 graph-shortest-paths
그래프에서 원본 노드 집합과 대상 노드 집합 간의 최단 경로를 찾고 결과가 포함된 테이블을 반환합니다.
참고 항목
이 연산자는 make-graph 연산자와 함께 사용됩니다.
구문
G |
graph-shortest-paths
[output
=
OutputOption] 패턴 where
조건자 project
[ColumnName =
] Expression [,
...]
매개 변수
이름 | Type | 필수 | 설명 |
---|---|---|---|
G | string | ✔️ | 그래프 원본( 일반적으로 작업의 출력)입니다 make-graph . |
패턴 | string | ✔️ | 찾을 경로를 설명하는 경로 패턴입니다. 패턴은 하나 이상의 가변 길이 가장자리를 포함해야 하며 여러 시퀀스를 포함할 수 없습니다. |
술어 | 식 | 패턴 및 상수에서 명명된 변수의 속성으로 구성된 부울 식입니다. | |
식 | 식 | ✔️ | 패턴에서 명명된 변수의 속성에 대한 상수 및 참조를 사용하여 찾은 각 경로의 출력 행을 정의하는 스칼라 식입니다. |
OutputOption | string | 검색 출력을 (기본값) 또는 all .로 any 지정합니다. 출력은 원본/대상 쌍당 가장 짧은 단일 경로 및 all 최소 길이가 같은 가장 짧은 모든 경로에 대해 지정 any 됩니다. |
경로 패턴 표기법
다음 표에서는 지원되는 경로 패턴 표기법을 보여 줍니다.
요소 | 명명된 변수 | Anonymous 요소 |
---|---|---|
노드 | ( n) |
() |
왼쪽에서 오른쪽으로 가장자리 이동 | -[ e]-> |
--> |
오른쪽에서 왼쪽으로 방향이 지정된 가장자리 | <-[ e]- |
<-- |
모든 방향 가장자리 | -[ e]- |
-- |
가변 길이 가장자리 | -[ e*3..5]- |
-[*3..5]- |
가변 길이 가장자리
가변 길이 에지를 사용하면 특정 패턴이 정의된 제한 내에서 여러 번 반복할 수 있습니다. 별표(*
)는 이 유형의 에지를 표시하고, 그 뒤에 최소값과 최대 항목 값..
이 최소값으로 표시됩니다. 이러한 값은 정수 스칼라여야 합니다. 시퀀스의 모든 가장자리가 절 제약 조건을 충족하는 경우 이 범위 내의 모든 가장자리 시퀀스는 패턴의 가변 에지와 일치할 where
수 있습니다.
반품
연산자는 graph-shortest-paths
각 레코드가 그래프에 있는 경로에 해당하는 테이블 형식 결과를 반환합니다. 반환된 열은 패턴에 정의된 노드 및 에지의 속성을 사용하여 연산 project
자의 절에 정의됩니다. 가변 길이 에지 속성의 속성 및 함수는 동적 배열로 반환됩니다. 배열의 각 값은 가변 길이 가장자리의 발생에 해당합니다.
예제
이 섹션에서는 다양한 시나리오에서 연산자를 사용하는 graph-shortest-paths
방법을 보여 주는 실용적인 예제를 제공합니다.
두 기차역 사이의 가장 짧은 경로 찾기 any
다음 예제에서는 연산자를 graph-shortest-paths
사용하여 운송 네트워크의 두 스테이션 간에 가장 짧은 경로를 찾는 방법을 보여 줍니다. 쿼리는 데이터 connections
에서 그래프를 생성하고 최대 5개의 연결 길이를 고려하여 스테이션에서 "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
출력
보낸 사람 | 경로 | line | 끝 |
---|---|---|---|
남서부 | [ "South", "Central", "북부" ] |
[ "red", "red", "red" ] |
North |
두 기차역 사이의 가장 짧은 경로 모두 찾기
다음 예제는 이전 예제와 마찬가지로 운송 네트워크에서 가장 짧은 경로를 찾습니다. 그러나 이 메서드는 가장 짧은 경로를 모두 반환하므로 사용합니다 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
출력
보낸 사람 | 경로 | line | 끝 |
---|---|---|---|
남서부 | [ "South", "Central", "북부" ] |
[ "red", "red", "red" ] |
North |
남서부 | [ "West", "Central", "북부" ] |
[ "red", "blue", "red" ] |
North |