Requisitos del esquema del algoritmo de Spanner Graph y compatibilidad de funciones

Requisitos del esquema

Los algoritmos de Spanner Graph pueden ejecutarse en grafos con esquemas que cumplan con los siguientes requisitos:

El siguiente es un ejemplo de un esquema no admitido:

-- Unsupported: Both `Person` and `Account` can only be referred to via label `Entity`.
CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id)
      LABEL Entity PROPERTIES (...),
    Account KEY (id)
      LABEL Entity PROPERTIES (...)
  );

A continuación, se muestra un ejemplo de un esquema compatible:

-- Supported: Even though label `Entity` refers to both `Person` and `Account`,
-- label `Customer` uniquely identifies `Person`, label `Account` uniquely identifies `Account`.
CREATE PROPERTY GRAPH FinGraph
  NODE TABLES (
    Person KEY (id)
      LABEL Customer PROPERTIES (...)
      LABEL Entity PROPERTIES (...),
    Account KEY (id)
      LABEL Account PROPERTIES (...)
      LABEL Entity PROPERTIES (...)
  );

Compatibilidad de funciones

En esta sección, se describe la compatibilidad de las consultas de algoritmos con las funciones generales de grafos.

Cláusula MATCH admitida

Cuando usas la cláusula MATCH en la estructura de la consulta del algoritmo para definir el gráfico de entrada de los algoritmos, debes tener en cuenta lo siguiente:

  1. Cada MATCH debe contener solo un patrón de elemento (nodo o arista) con una variable con nombre.
  2. Cuando un patrón de borde incluye patrones explícitos para los nodos finales, no uses una etiqueta de nodo ni una variable en los patrones de nodo.
  3. Puedes usar una cláusula WHERE dentro del patrón de elementos si no hace referencia a variables definidas en otro lugar.
  4. La expresión de etiqueta en la cláusula MATCH debe identificar de forma única una tabla de elementos.

En los siguientes ejemplos, se muestran las cláusulas MATCH admitidas:

-- Supported: Assuming only 1 element table has `Account` label:
MATCH (a:Account)

MATCH (a:Account WHERE a.id > 400)

MATCH (a:Account WHERE a.id IN [101, 102, 105])

MATCH -[e:Transfers WHERE e.amount < 500]->

En los siguientes ejemplos, se muestran cláusulas MATCH no admitidas:

-- Unsupported: End nodes for edge patterns cannot have labels or named variables.
MATCH (a:Account)-[]->

-- Unsupported: Each MATCH can only name one variable.
MATCH (a:Account)-[e:Transfers]->

-- Unsupported: If there are multiple node element tables in the graph, each MATCH
-- must uniquely identify one element table.
MATCH (a)

-- Unsupported: The `Entity` label maps to both `Account` and `Person` node element tables.
MATCH (a:Account | Entity)

Usa la cláusula RETURN

La cláusula RETURN en la estructura de la consulta del algoritmo define los datos que devuelve la consulta del algoritmo. Puedes hacer referencia a las columnas del resultado de la firma del algoritmo en la cláusula RETURN, con algunas restricciones:

  • Si un algoritmo genera un Node, puedes devolver cualquier propiedad del nodo. También puedes devolver ELEMENT_DEFINITION_NAME del nodo.
  • Si un algoritmo genera una ruta, puedes devolver PATH_LENGTH(path)..
  • Puedes devolver cualquier salida escalar del algoritmo.
  • Puedes devolver cualquier constante literal.

En los siguientes ejemplos, se muestran las cláusulas RETURN admitidas:

-- Supported.
CALL PageRank(...) YIELD node, score
RETURN ELEMENT_DEFINITION_NAME(node) AS node_type, node.id, score

-- Supported: You can return constants.
CALL PageRank(...) YIELD node, score
RETURN node.id, score, "pagerank-run1" AS algo_run_id

-- Supported.
CALL ShortestPath(...) YIELD source_node, target_node, path, cost
RETURN source_node.id AS source_id, target_node.id AS target_id,
  PATH_LENGTH(path) AS length, cost

En los siguientes ejemplos, se muestran cláusulas RETURN no admitidas:

-- Unsupported: You cannot return the graph element `node` directly.
RETURN node, score

-- Unsupported: You can only return properties of `node`. Applying a function to a node property
-- is not supported.
RETURN node.id + 1, score

-- Unsupported: You can only return the scalar `score` directly from the algorithm output. Applying
-- a function to scalar output is not supported.
RETURN node.id, score + 1

-- Unsupported: General function calls are not allowed.
RETURN JSON_OBJECT(node.id, score) as json_obj

No se admiten parámetros

Las consultas del algoritmo no admiten parámetros de consulta.

Compatibilidad con gráficos creados a partir de una vista

Cuando creas tu gráfico en una vista, las consultas de algoritmos solo se admiten si los nodos y las aristas (incluidos los nodos finales de una arista) que se usan para definir la entrada del algoritmo no se basan en una vista.

¿Qué sigue?