Requisitos de esquema do Spanner Graph e compatibilidade de recursos

Requisitos de esquema

Os algoritmos do Spanner Graph podem ser executados em grafos com esquemas que atendem aos seguintes requisitos:

Confira a seguir um exemplo de esquema não aceito:

-- 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 (...)
  );

Confira a seguir um exemplo de esquema compatível:

-- 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 (...)
  );

Compatibilidade de recursos

Esta seção descreve a compatibilidade de consultas de algoritmo com recursos gerais de gráficos.

Cláusula MATCH compatível

Ao usar a cláusula MATCH na estrutura de consulta de algoritmo para definir o gráfico de entrada dos algoritmos, considere o seguinte:

  1. Cada MATCH precisa conter apenas um padrão de elemento (nó ou aresta) com uma variável nomeada.
  2. Quando um padrão de aresta inclui padrões explícitos para nós finais, não use um rótulo de nó ou variável nos padrões de nó.
  3. Você pode usar uma cláusula WHERE no padrão de elemento se ela não se referir a variáveis definidas em outro lugar.
  4. A expressão de rótulo na cláusula MATCH precisa identificar de maneira exclusiva uma tabela de elementos.

Os exemplos a seguir demonstram cláusulas MATCH compatíveis:

-- 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]->

Os exemplos a seguir demonstram cláusulas MATCH não aceitas:

-- 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)

Usar a cláusula RETURN

A cláusula RETURN na estrutura de consulta do algoritmo define os dados retornados pela consulta. É possível se referir a colunas da assinatura de saída do algoritmo na cláusula RETURN, com algumas restrições:

  • Se um algoritmo gerar um Node, você poderá retornar qualquer propriedade do nó. Você também pode retornar ELEMENT_DEFINITION_NAME do nó.
  • Se um algoritmo gerar um Path, você poderá retornar PATH_LENGTH(path).
  • É possível retornar qualquer saída escalar do algoritmo.
  • É possível retornar qualquer constante literal.

Os exemplos a seguir demonstram cláusulas RETURN compatíveis:

-- 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

Os exemplos a seguir demonstram cláusulas RETURN não aceitas:

-- 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

Os parâmetros não são compatíveis

As consultas de algoritmo não são compatíveis com parâmetros de consulta.

Suporte a gráficos criados com base em uma visualização

Ao criar um gráfico em uma visualização, as consultas de algoritmo só são compatíveis se os nós e as arestas (incluindo os nós finais de uma aresta) usados para definir a entrada do algoritmo não forem baseados em uma visualização.

A seguir