Schemaanforderungen
Spanner Graph-Algorithmen können für Graphen mit Schemas ausgeführt werden, die die folgenden Anforderungen erfüllen:
- Eine Eingabetabelle für Kanten muss in die Eingabetabelle für den Quellknoten verschachtelt sein und einen Fremd schlüssel oder einen informativen Fremd schlüssel zur Eingabetabelle für den Zielknoten haben. Weitere Informationen finden Sie unter Best Practices für das Entwerfen eines Spanner Graph Schemas.
- Jede Eingabetabelle für den Graph-Algorithmus muss ein eindeutiges identifizierendes Label haben.
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:
- Jede
MATCH-Klausel darf nur ein Elementmuster (Knoten oder Kante) mit einer benannten Variablen enthalten. - Wenn ein Kantenmuster explizite Muster für Endknoten enthält, verwenden Sie kein Knotenlabel oder keine Knotenvariable in den Knotenmustern.
- Sie können eine
WHERE-Klausel im Elementmuster verwenden, wenn sie nicht auf Variablen verweist, die an anderer Stelle definiert sind. - 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
- Spanner Graph-Algorithmen ausführen.
- Spanner Graph-Algorithmenkatalog.
- Best Practices für Spanner Graph-Algorithmen.