Partilhar via


map() (função gráfica)

Aplica-se a: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

A map() função de gráfico calcula uma expressão para cada aresta ou nó interno ao longo de um caminho de comprimento variável e retorna uma matriz dinâmica de todos os resultados.

Observação

Esta função é usada com os operadores graph-match e graph-shortest-paths .

Sintaxe

map(*edge*, *expression*

map(inner_nodes( borda),expressão)

Parâmetros

Nome Tipo Obrigatório Descrição
borda string ✔️ Uma aresta de comprimento variável do operador de correspondência gráfica ou do padrão de operador de caminhos mais curtos do gráfico . Para obter mais informações, consulte Notação de padrão gráfico.
expressão string ✔️ O cálculo a ser realizado sobre as propriedades da borda ou nó interno, quando inner_nodes é usado, na borda de comprimento variável. Uma propriedade é referenciada usando o nome da propriedade diretamente. A expressão é avaliada para cada aresta ou nó interno na borda de comprimento variável.

Devoluções

Uma matriz dinâmica onde:

  • O comprimento da matriz corresponde ao número de arestas ou nós internos, quando inner_nodes é usado, na borda de comprimento variável.
  • A matriz está vazia para caminhos de comprimento zero.
  • Cada elemento na matriz corresponde aos resultados da aplicação da expressão a cada aresta ou nó interno na borda de comprimento variável.

Exemplos

Os exemplos nesta seção mostram como usar a sintaxe para ajudá-lo a começar.

Encontre a estação e a linha para o percurso mais curto entre duas estações

O exemplo a seguir mostra como usar o graph-shortest-paths operador para encontrar o caminho mais curto entre as "South-West" estações e "North" em uma rede de transporte. Ele adiciona informações de linha ao caminho usando a map() função. A consulta constrói um gráfico a partir dos dados, considerando caminhos de até cinco conexões connections .

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 = map(connections, strcat(to_station, " (", line, ")")), to = destination.station

Realização

de caminho Para
South-West [
"Sul (vermelho)",
"Central (vermelho)",
"Norte (vermelho)"
]
Norte

Obter lista de escalas com Wi-Fi em todas as rotas entre duas estações

O exemplo a seguir mostra como usar o graph-match operador com as all() funções e inner_nodes para encontrar todas as escalas com Wi-Fi ao longo de todas as rotas entre duas estações em uma rede de transporte.

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",
]; 
let stations = datatable(station:string, wifi:bool) 
[ 
  "Central", true,
  "North", false,
  "South", false,
  "South-West", true,
  "West", true,
  "East", false
];
connections 
| make-graph from_station --> to_station with stations on station
| graph-match cycles=none (start)-[connections*1..5]->(destination)
  where start.station == "South-West" and destination.station == "East"
  project stopovers = strcat_array(map(inner_nodes(connections), station), "->"),
          stopovers_with_wifi = set_intersect(map(inner_nodes(connections), station), map(inner_nodes(connections), iff(wifi, station, "")))

Realização

escalas stopovers_with_wifi
Centro-Oeste> [ "Oeste", "Central"]
Centro-Sul> [ "Central"]