Anforderungen an das Spanner Graph-Algorithmus-Schema und Funktionskompatibilität

Schemaanforderungen

Spanner Graph-Algorithmen können für Graphen mit Schemas ausgeführt werden, die die folgenden Anforderungen erfüllen:

Das folgende Beispiel zeigt ein nicht unterstütztes Schema:

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

Das folgende Beispiel zeigt ein unterstütztes Schema:

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

Funktionskompatibilität

In diesem Abschnitt wird die Kompatibilität von Algorithmusabfragen mit allgemeinen Graph-Funktionen beschrieben.

Unterstützte MATCH-Klausel

Wenn Sie die MATCH-Klausel in der Struktur der Algorithmusabfrage verwenden, um den Eingabegraphen für Algorithmen zu definieren, müssen Sie Folgendes berücksichtigen:

  1. Jede MATCH-Klausel darf nur ein Elementmuster (Knoten oder Kante) mit einer benannten Variablen enthalten.
  2. Wenn ein Kantenmuster explizite Muster für Endknoten enthält, verwenden Sie kein Knotenlabel oder keine Knotenvariable in den Knotenmustern.
  3. Sie können eine WHERE-Klausel im Elementmuster verwenden, wenn sie nicht auf Variablen verweist, die an anderer Stelle definiert sind.
  4. Der Labelausdruck in der MATCH-Klausel muss eine Elementtabelle eindeutig identifizieren.

Die folgenden Beispiele zeigen unterstützte MATCH-Klauseln:

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

Die folgenden Beispiele zeigen nicht unterstützte MATCH-Klauseln:

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

RETURN-Klausel verwenden

Die -Klausel in der Struktur der Algorithmusabfrage definiert die Daten, die von der Algorithmusabfrage zurückgegeben werden.RETURN Sie können in der RETURN-Anweisung auf Spalten aus der Ausgabesignatur des Algorithmus verweisen. Dabei gelten jedoch einige Beschränkungen:

  • Wenn ein Algorithmus einen Knoten ausgibt, können Sie eine beliebige Property des Knotens zurückgeben. Sie können auch ELEMENT_DEFINITION_NAME des Knotens zurückgeben.
  • Wenn ein Algorithmus einen Pfad ausgibt, können Sie PATH_LENGTH(path). zurückgeben.
  • Sie können eine beliebige skalare Ausgabe des Algorithmus zurückgeben.
  • Sie können eine beliebige Literal-Konstante zurückgeben.

Die folgenden Beispiele zeigen unterstützte RETURN-Klauseln:

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

Die folgenden Beispiele zeigen nicht unterstützte RETURN-Klauseln:

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

Parameter werden nicht unterstützt

Algorithmusabfragen unterstützen keine Abfrageparameter.

Unterstützung für Graphen, die aus einer Ansicht erstellt wurden

Wenn Sie Ihren Graphen in einer Ansicht, werden Algorithmusabfragen nur unterstützt, wenn die Knoten und Kanten (einschließlich der End knoten einer Kante), die zum Definieren der Algorithmus-Eingabe verwendet werden, nicht auf einer Ansicht basieren.

Nächste Schritte