Spanner Graph-Referenz für openCypher-Nutzer

<ph type="x-smartling-placeholder">

In diesem Dokument wird openCypher und Spanner Graph in den folgenden Beispielen verglichen: Möglichkeiten:

  • Terminologie
  • Datenmodell
  • Schema
  • Abfrage
  • Mutation

In diesem Dokument wird vorausgesetzt, dass Sie mit openCypher v9 an.

Hinweise

Spanner Graph mit der Google Cloud Console einrichten und abfragen

Terminologie

openCypher Cloud Spanner Graph
Knoten Knoten
Beziehungen Kanten
Knotenlabels Knotenlabels
Beziehungstypen Edge-Labels
Klauseln In Spanner Graph wird der Begriff statement für eine vollständige Einheit Ausführung und clause für einen Modifikator für Anweisungen.

Beispielsweise ist MATCH eine Anweisung, während WHERE ist eine Klausel.
Eindeutigkeit von Beziehungen

openCypher gibt keine Ergebnisse mit sich wiederholenden Kanten in einem einzigen Übereinstimmung.
TRAIL-Pfad

Wenn Eindeutigkeit im Spanner-Diagramm erwünscht ist, verwenden TRAIL-Modus, um eindeutige Kanten in einer einzelnen Übereinstimmung zurückzugeben.

Einhaltung von Standards

Spanner Graph übernimmt ISO Grafikabfragesprache (GQL) und SQL-/Property-Diagramm-Abfragen (SQL/PGQ).

Datenmodell

Sowohl Spanner Graph als auch openCypher übernehmen das Attributgrafik-Datenmodell mit einige Unterschiede.

openCypher Cloud Spanner Graph

Jede Beziehung hat genau einen Beziehungstyp.

Sowohl Knoten als auch Kanten haben ein oder mehrere Labels.

Schema

openCypher Cloud Spanner Graph
Ein Diagramm hat kein vordefiniertes Schema. Ein Graph-Schema muss explizit mithilfe der Methode CREATE PROPERTY GRAPH-Anweisung:
Labels werden im Schema statisch definiert. Um Labels zu aktualisieren, das Schema aktualisieren.
Weitere Informationen finden Sie unter Spanner-Diagrammschema erstellen, aktualisieren oder löschen.

Abfrage

Die Abfragefunktionen von Spanner Graph sind denen von openCypher ähnlich. Die Unterschiede zwischen Spanner Graph und openCypher werden unter diesem Abschnitt.

Grafik angeben

In openCypher gibt es eine Standardgrafik und Abfragen verwenden die Standardgrafik Diagramm. In Spanner Graph können Sie mehr als einen Graphen und eine Abfrage definieren muss mit der GRAPH-Klausel beginnen, um die abzufragende Grafik anzugeben. Beispiel:

   GRAPH FinGraph
   MATCH (p:Person)
   RETURN p.name
   ORDER BY p.name
   LIMIT 1;

Weitere Informationen finden Sie unter Syntax von Graphabfragen.

Musterabgleich grafisch darstellen

Spanner Graph unterstützt ähnliche Funktionen zum Abgleich von Diagrammmustern wie openCypher aus. Die Unterschiede werden in den folgenden Abschnitten erläutert.

Eindeutigkeit von Beziehungen und TRAIL-Modus

openCypher gibt keine Ergebnisse mit sich wiederholenden Kanten in einer einzelnen Übereinstimmung zurück. dies wird in openCypher als Eindeutigkeit von Beziehungen bezeichnet. Im Spanner-Diagramm sich wiederholende Kanten werden standardmäßig zurückgegeben. Wenn Eindeutigkeit gewünscht ist, verwenden Sie Modus TRAIL, um sicherzustellen, dass in der einzelnen Übereinstimmung keine sich wiederholende Kante vorhanden ist. Für Detaillierte Semantik von TRAIL und anderen Pfadmodi finden Sie unter Pfadmodus:

Das folgende Beispiel zeigt, wie sich die Ergebnisse einer Abfrage im TRAIL-Modus ändern:

  • Bei Abfragen im TRAIL-Modus von openCypher und Spanner Graph wird ein leerer Wert zurückgegeben Ergebnisse, weil der einzig mögliche Weg darin besteht, t1 zweimal zu wiederholen.
  • Standardmäßig gibt die Spanner Graph-Abfrage einen gültigen Pfad zurück.

Beispielgrafik

openCypher Spanner-Diagramm (TRAIL-Modus) Spanner-Diagramm (Standardmodus)
MATCH
  (src:Account)-[t1:Transfers]->
  (dst:Account)-[t2:Transfers]->
  (src)-[t1]->(dst)
WHERE src.id = 16
RETURN src.id AS src_id, dst.id AS dst_id;
      
GRAPH FinGraph
MATCH TRAIL
  (src:Account)-[t1:Transfers]->
  (dst:Account)-[t2:Transfers]->
  (src)-[t1]->(dst)
WHERE src.id = 16
RETURN src.id AS src_id, dst.id AS dst_id;
      
GRAPH FinGraph
MATCH
  (src:Account)-[t1:Transfers]->
  (dst:Account)-[t2:Transfers]->
  (src)-[t1]-> (dst)
WHERE src.id = 16
RETURN src.id AS src_id, dst.id AS dst_id;
      
Leeres Ergebnis. Leeres Ergebnis. Ergebnis:
src_id dst_id
16 20

Grafikelemente als Abfrageergebnisse zurückgeben

openCypher Cloud Spanner Graph
MATCH (account:Account)
WHERE account.id = 16;
RETURN account;
GRAPH FinGraph
MATCH (account:Account)
WHERE account.id = 16;
RETURN TO_JSON(account) AS account;

Im Spanner-Diagramm werden bei Abfrageergebnissen keine Graph-Elemente zurückgegeben. Verwenden Sie die Methode TO_JSON-Funktion, um Graph-Elemente als JSON zurückzugeben.

Musterabgleich und Musterquantifizierung mit variabler Länge

Der Musterabgleich mit variabler Länge wird in openCypher als Pfadquantifizierung bezeichnet. im Spanner-Diagramm. Für die Pfadquantifizierung wird eine andere Syntax verwendet, wie hier gezeigt: im folgenden Beispiel. Weitere Informationen finden Sie unter Quantifiziertes Pfadmuster.

openCypher Cloud Spanner Graph
MATCH (src:Account)-[:Transfers*1..2]->(dst:Account)
WHERE src.id = 16
RETURN dst.id
ORDER BY dst.id;
     
GRAPH FinGraph
MATCH (src:Account)-[:Transfers]->{1,2}(dst:Account)
WHERE src.id = 16
RETURN dst.id
ORDER BY dst.id;
      

Muster mit variabler Länge: Liste von Elementen

Mit Spanner Graph können Sie direkt auf die im Pfad verwendeten Variablen zugreifen Quantifizierungen. Im folgenden Beispiel ist e in Spanner Graph identisch als edges(p) in openCypher.

openCypher Cloud Spanner Graph
MATCH p=(src:Account)-[:Transfers*1..3]->(dst:Account)
WHERE src.id = 16
RETURN edges(p);
      
GRAPH FinGraph
MATCH (src:Account) -[e:Transfers]->{1,3} (dst:Account)
WHERE src.id = 16
RETURN TO_JSON(e) AS e;
     

Kürzester Pfad

openCypher verfügt über zwei integrierte Funktionen, um den kürzesten Pfad zwischen Knoten zu finden: shortestPath und allShortestPath.

  • shortestPath findet einen einzelnen kürzesten Pfad zwischen Knoten.
  • allShortestPath findet die kürzesten Pfade zwischen Knoten. Es kann mehrere Pfade derselben Länge sein.

Spanner Graph verwendet eine andere Syntax, um einen einzelnen kürzesten Pfad zu finden zwischen Knoten: ANY SHORTEST für shortestPath. allShortestPath wird nicht unterstützt.

openCypher Cloud Spanner Graph
MATCH
  (src:Account {id: 7}),
  (dst:Account {id: 20}),
  p = shortestPath((src)-[*1..10]->(dst))
RETURN length(p) AS path_length;
      
GRAPH FinGraph
MATCH ANY SHORTEST
  (src:Account {id: 7})-[e:Transfers]->{1, 3}
  (dst:Account {id: 20})
RETURN ARRAY_LENGTH(e) AS path_length;
      

Anweisungen und Klauseln

In der folgenden Tabelle sind die openCypher-Klauseln aufgeführt und es wird angegeben, ob werden sie in Spanner Graph unterstützt.

openCypher Cloud Spanner Graph
VERGLEICH Unterstützt. Weitere Informationen finden Sie unter Diagrammmusterabgleich.
OPTIONALE ÜBEREINSTIMMUNG Unterstützt. Weitere Informationen finden Sie unter Diagrammmusterabgleich.
RÜCKGABE / MIT Unterstützt. Weitere Informationen finden Sie in der RETURN-Anweisung und die WITH-Anweisung.
Spanner Graph erfordert ein explizites Aliasing für komplizierte Ausdrücke.

Unterstützt.
GRAPH FinGraph
MATCH (p:Person)
RETURN EXTRACT(YEAR FROM p.birthday) AS birthYear;

Nicht unterstützt.
GRAPH FinGraph
MATCH (p:Person)
RETURN EXTRACT(YEAR FROM p.birthday); -- No aliasing
WHERE Unterstützt. Weitere Informationen finden Sie in der Definition für . Diagrammmuster
ORDER BY Unterstützt. Weitere Informationen finden Sie in der ORDER BY-Anweisung.
ÜBERSPRINGEN / LIMIT Unterstützt. Weitere Informationen finden Sie in der SKIP-Anweisung und die LIMIT-Anweisung.

Spanner Graph erfordert einen konstanten Ausdruck für den Offset und den Grenzwert.

Unterstützt.
GRAPH FinGraph
MATCH (n:Account)
RETURN n.id
SKIP @offsetParameter
LIMIT 3;

Nicht unterstützt.
GRAPH FinGraph
MATCH (n:Account)
RETURN n.id
LIMIT VALUE {
  MATCH (m:Person)
  RETURN COUNT(*) AS count
} AS count; -- Not a constant expression
UNION Unterstützt. Weitere Informationen finden Sie unter Abfrage für zusammengesetzte Grafik.
UNION ALLE Unterstützt. Weitere Informationen finden Sie unter Abfrage für zusammengesetzte Grafik.
WINDKRAFT ENTWICKELN Unterstützt durch FOR-Anweisung.
GRAPH FinGraph
LET arr = [1, 2, 3]
FOR num IN arr
RETURN num;
ERFORDERLICHE ÜBEREINSTIMMUNG Nicht unterstützt.
[ERTRAG...] ANRUFEN Nicht unterstützt.
ERSTELLEN, LÖSCHEN, SETZEN, ENTFERNEN, Zusammenführen Weitere Informationen finden Sie im Abschnitt Mutation und Daten im Spanner-Diagramm einfügen, aktualisieren oder löschen.

Datentypen

Spanner Graph unterstützt alle GoogleSQL-Datentypen. Weitere Informationen finden Sie unter Datentypen in GoogleSQL

In den folgenden Abschnitten werden openCypher-Datentypen mit Spanner-Diagrammdaten verglichen Typen.

Strukturtyp

openCypher Cloud Spanner Graph
Knoten Knoten
Edge Edge
Pfad Nicht unterstützt.

Attributtyp

openCypher Cloud Spanner Graph
GANZZAHL INT64
FLOAT FLOAT64
STRING STRING
BOOLEAN BOOL
LISTE
Eine homogene Liste einfacher Typen.
Beispiel: Liste mit INT, Liste mit STRING.
INT und STRING können nicht in einer Liste kombiniert werden.
ARRAY

Zusammengesetzter Typ

openCypher Cloud Spanner Graph
LISTE ARRAY oder JSON
MAP STRUCT oder JSON

Spanner Graph unterstützt keine heterogenen Listen verschiedener Typen oder Eine Zuordnung einer dynamischen Schlüsselliste und heterogener Elementwerttypen. Verwenden Sie JSON für diese Anwendungsfälle.

Typerzwingung

openCypher Cloud Spanner Graph
INT -> GLEITKOMMAZAHL Unterstützt.

Weitere Informationen zu Typkonvertierungsregeln finden Sie unter Konvertierungsregeln in GoogleSQL

Funktionen und Ausdrücke

Neben Graphfunktionen und -ausdrücken unterstützt auch alle in GoogleSQL integrierten Funktionen und Ausdrücke.

Eine vollständige Liste der Funktionen und Ausdrücke finden Sie unter GoogleSQL-Funktionen, -Operatoren und -Bedingungen.

In diesem Abschnitt werden openCypher-Funktionen und -Ausdrücke sowie deren in Spanner-Grafik angezeigt.

Strukturtypfunktionen und -ausdrücke

Typ openCypher
Funktion oder Ausdruck
Spanner-Diagramm
Funktion oder Ausdruck

Knoten und Edge
exists(n.prop) property_exists(n; prop)
id(gibt Ganzzahl zurück) Nicht unterstützt.
properties to_json
Schlüssel
(Namen der Property-Typen, aber keine Property-Werte)
property_names
Labels labels
Edge endNode Nicht unterstützt.
startNode Nicht unterstützt.
Typ Labels
Pfad Zeitfenster Nicht unterstützt.
Knoten Nicht unterstützt.
Beziehungen Nicht unterstützt.
Knoten und Edge

Property-Referenz
.
[]

Referenz zu dynamischen Attributen
MATCH (n)
RETURN n[n.name]

Nicht unterstützt.
Muster als Ausdruck Größe(Muster) Nicht unterstützt. Verwenden Sie eine Unterabfrage so:
VALUE {
  MATCH pattern
  RETURN COUNT(*) AS count;
}

Attributtyp-Funktionen und -Ausdrücke

Typ openCypher
Funktion oder Ausdruck
Spanner-Diagramm
Funktion oder Ausdruck
Skalar Koalesce Koalesce
head array_first
letzten array_last
Größe(Liste) array_length
Größe(String) Zeitfenster
timestamp unix_millis(current_timestamp())
toBoolean/toFloat/toInteger Cast( als )
Aggregat durchschn. durchschn.
collect array_agg
Anzahl Anzahl
max max
Min. Min.
percentileCont percentile_cont
percentileDisc percentile_disc
stDev Standardabweichung
stDevP stdev_pop
Summe Summe
Liste Bereich generate_array
reverse array_reverse
Tail tail wird von Spanner Graph nicht unterstützt.
Verwenden Sie array_slice und array_length. .
Mathematische Daten Bauchmuskeln Bauchmuskeln
Ceil Ceil
Boden Boden
Rand Rand
Rund Rund
Signieren Signieren
e exp(1)
exp exp
log log
log10 log10
Quadrat Quadrat
Acos Acos
Asin Asin
Atan Atan
atan2 atan2
cos cos
cot cot
Grad r * 90 / asin(1)
Pi Pi
Bogenmaß d * asin(1) / 90
Sinus Sinus
Hellbraun Hellbraun
String links links
ltrim ltrim
Ersetzen Ersetzen
reverse reverse
rechts rechts
RTRM RTRM
split split
Teilzeichenfolge substr
Tolower niedriger
Tostring cast( as string)
Toupper upper
schneiden schneiden
DISTINCT DISTINCT DISTINCT
Mathematische Daten + +
- -
* *
/ /
% MOD
^ POW
Vergleich = =
&lt;&gt; &lt;&gt;
< <
> >
<= <=
>= >=
IST [NICHT] NULL IST [NICHT] NULL
Vergleichskette
a < b < c

Spanner-Diagramm unterstützt keine Vergleichskette. Dies entspricht Vergleiche, die mit AND verbunden sind.
Beispiel:

      a < b AND b < C
      

Boolesch UND UND
ODER ODER
XODER
Spanner-Diagramm unterstützt XOR nicht. Schreiben Sie die Abfrage mit <>.

Beispiel:
      boolean_1 <> boolean_2
      

NOT NOT
String Beginnt mit starts_with
ENDET MIT ends_with
CONTAINS regexp_contains
+ string_concat
Liste + array_concat
IN array_includes
[] []

Andere Ausdrücke

openCypher Cloud Spanner Graph
Groß-/Kleinschreibungsausdruck Unterstützt.
Unterabfrage vorhanden Unterstützt.
Kartenprojektion Nicht unterstützt.
STRUCT-Typen bieten ähnliche Funktionen.
Listenverständnis Nicht unterstützt.
generate_array und array_transform decken die meisten Anwendungsfälle ab.

Abfrageparameter

Die folgenden Abfragen zeigen den Unterschied zwischen der Verwendung von Parametern in in „openCypher“ und im Spanner Graph.

openCypher Cloud Spanner Graph
Parameter
MATCH (n:Person)
WHERE n.id = $id
RETURN n.name;
GRAPH FinGraph
MATCH (n:Person)
WHERE n.id = @id
RETURN n.name;

Mutation

Spanner Graph verwendet GoogleSQL DML, um die Knoten- und Edge-Eingabetabellen zu ändern. Weitere Informationen finden Sie unter Daten des Spanner-Diagramms einfügen, aktualisieren oder löschen

Knoten und Edge erstellen

openCypher Cloud Spanner Graph
Knoten und Kanten erstellen
CREATE (:Person {id: 100, name: 'John'});
CREATE (:Account {id: 1000, is_blocked: FALSE});

MATCH (p:Person {id: 100}), (a:Account {id: 1000}) CREATE (p)-[:Owns {create_time: timestamp()}]->(a);
INSERT INTO
Person (id, name)
VALUES (100, "John");

INSERT INTO Account (id, is_blocked) VALUES (1000, FALSE);
INSERT INTO PersonOwnAccount (id, account_id, create_time) VALUES (100, 1000, CURRENT_TIMESTAMP());
Knoten und Kanten mit Abfrageergebnissen erstellen
MATCH (a:Account {id: 1}), (oa:Account)
WHERE oa <> a
CREATE (a)-[:Transfers {amount: 100, create_time: timestamp()}]->(oa);
INSERT INTO AccountTransferAccount(id, to_id, create_time, amount)
SELECT a.id, oa.id, CURRENT_TIMESTAMP(), 100
FROM GRAPH_TABLE(
  FinGraph
  MATCH
    (a:Account {id:1000}),
    (oa:Account)
  WHERE oa <> a
);

Im Spanner-Diagramm werden die Labels gemäß der CREATE PROPERTY GRAPH.

Knoten und Edge aktualisieren

openCypher Cloud Spanner Graph
Attribute aktualisieren
MATCH (p:Person {id: 100})
SET p.country = 'United States';
UPDATE Person AS p
SET p.country = 'United States'
WHERE p.id = 100;

Informationen zum Aktualisieren von Spanner-Diagrammlabels finden Sie unter Erstellen, aktualisieren oder löschen Sie ein Spanner-Diagrammschema.

Knoten und Edge verbinden

openCypher Cloud Spanner Graph
Neues Element einfügen oder Eigenschaften aktualisieren
MERGE (p:Person {id: 100, country: 'United States'});
INSERT OR UPDATE INTO Person
(id, country)
VALUES (100, 'United States');

Knoten und Edge löschen

Das Löschen der Kanten entspricht dem Löschen der Eingabetabelle.

openCypher Cloud Spanner Graph
Knoten und Kanten löschen
MATCH (p:Person {id:100}), (a:Account {id:1000})
DELETE (p)-[:Owns]->(a);
DELETE PersonOwnAccount
WHERE id = 100 AND account_id = 1000;

Das Löschen von Knoten erfordert den Umgang mit potenziell hängenden Kanten. Wenn DELETE CASCADE angegeben ist, entfernt DELETE die zugehörigen Kanten von wie DETACH DELETE in openCypher. Weitere Informationen finden Sie unter Spanner Schemaübersicht.

openCypher Cloud Spanner Graph
Knoten und zugehörige Kanten löschen
DETACH DELETE (:Account {id: 1000});
DELETE Account
WHERE id = 1000;

Mutationsergebnisse zurückgeben

openCypher Cloud Spanner Graph
Ergebnisse nach dem Einfügen oder Aktualisieren zurückgeben
MATCH (p:Person {id: 100})
SET p.country = 'United States'
RETURN p.id, p.name;
UPDATE Person AS p
SET p.country = 'United States'
WHERE p.id = 100
THEN RETURN id, name;
Ergebnisse nach dem Löschen zurückgeben
DELETE (p:Person {id: 100})
RETURN p.country;
DELETE FROM Person
WHERE id = 100
THEN RETURN country;

Nächste Schritte