Referensi Grafik Spanner untuk pengguna openCypher

Dokumen ini membandingkan OpenCypher dan Grafik Spanner dalam cara:

  • Terminologi
  • Model data
  • Skema
  • Kueri
  • Mutasi

Dokumen ini mengasumsikan Anda sudah familier dengan openCypher v9.

Sebelum memulai

Menyiapkan dan membuat kueri Spanner Graph menggunakan Konsol Google Cloud.

Terminologi

openCypher Spanner Graph
node node
hubungan tepi
label node label node
jenis hubungan label tepi
klausa Spanner Graph menggunakan istilah statement untuk satu unit lengkap eksekusi, dan clause untuk pengubah pernyataan.

Misalnya, MATCH adalah pernyataan sedangkan WHERE adalah sebuah klausa.
keunikan hubungan

openCypher tidak menampilkan hasil dengan tepi berulang dalam satu yang cocok.
Jalur JALAN SETAPAK

Ketika keunikan diinginkan di Spanner Graph, gunakan Mode TRAIL untuk menampilkan tepi unik dalam satu pencocokan.

Kepatuhan standar

Spanner Graph mengadopsi ISO Bahasa Kueri Graph (GQL) dan Kueri Grafik SQL/Properti (SQL/PGQ).

Model data

Spanner Graph dan openCypher mengadopsi model data grafik properti dengan beberapa perbedaan.

openCypher Spanner Graph

Setiap hubungan memiliki tepat satu jenis hubungan.

Baik node maupun edge memiliki satu atau beberapa label.

Skema

openCypher Spanner Graph
Grafik tidak memiliki skema yang telah ditetapkan sebelumnya. Skema grafik harus secara eksplisit ditentukan dengan menggunakan Pernyataan CREATE PROPERTY GRAPH.
Label ditentukan secara statis dalam skema. Untuk memperbarui label, Anda perlu memperbarui skema.
Untuk informasi selengkapnya, lihat Membuat, memperbarui, atau melepas skema Grafik Spanner.

Kueri

Kemampuan kueri Spanner Graph mirip dengan openCypher. Perbedaan antara Spanner Graph dan openCypher dijelaskan di bagian ini.

Menentukan grafik

Di openCypher, ada satu grafik {i>default<i}, dan kueri beroperasi secara grafik. Di Spanner Graph, Anda dapat menentukan lebih dari satu grafik dan kueri harus diawali dengan klausa GRAPH untuk menentukan grafik yang akan dikueri. Contoh:

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

Untuk mengetahui informasi selengkapnya, lihat sintaksis kueri grafik.

Pencocokan pola grafik

Spanner Graph mendukung kemampuan pencocokan pola grafik yang mirip dengan openCypher. Perbedaannya akan dijelaskan di bagian berikut.

Keunikan hubungan dan mode TRAIL

openCypher tidak menampilkan hasil dengan tepi berulang dalam satu kecocokan; ingin disebut keunikan hubungan di openCypher. Dalam Spanner Graph, tepi berulang ditampilkan secara default. Ketika keunikan diinginkan, gunakan Mode TRAIL untuk memastikan tidak ada edge berulang dalam satu kecocokan. Sebagai semantik mendetail dari TRAIL dan mode jalur yang berbeda lainnya, lihat Mode jalur.

Contoh berikut menunjukkan bagaimana hasil kueri berubah dengan mode TRAIL:

  • Kueri mode TRAIL openCypher dan Spanner Graph menampilkan kosong hasil karena satu-satunya jalur yang memungkinkan adalah mengulangi t1 dua kali.
  • Secara default, kueri Spanner Graph menampilkan jalur yang valid.

Contoh grafik

openCypher Grafik Spanner (mode TRAIL) Grafik Spanner (mode default)
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;
      
Hasil kosong. Hasil kosong. Hasil:
src_id dst_id
16 20

Menampilkan elemen grafik sebagai hasil kueri

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

Dalam Spanner Graph, hasil kueri tidak menampilkan elemen grafik. Gunakan Fungsi TO_JSON untuk menampilkan elemen grafik sebagai JSON.

Pencocokan pola panjang variabel dan kuantifikasi pola

Pencocokan pola panjang variabel di openCypher disebut kuantifikasi jalur di Spanner Graph. Kuantifikasi jalur menggunakan sintaksis yang berbeda, seperti yang ditunjukkan dalam contoh berikut. Untuk mengetahui informasi selengkapnya, lihat artikel Pola jalur terukur.

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

Pola panjang variabel: daftar elemen

Spanner Graph memungkinkan Anda mengakses variabel yang digunakan dalam jalur secara langsung kuantifikasi. Dalam contoh berikut, e di Spanner Graph sama sebagai edges(p) di openCypher.

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

Jalur terpendek

openCypher memiliki dua fungsi bawaan untuk menemukan jalur terpendek antar {i>node<i}: shortestPath dan allShortestPath.

  • shortestPath menemukan satu jalur terpendek antar-node.
  • allShortestPath menemukan semua jalur terpendek antar-node. Ada dapat menjadi beberapa jalur dengan panjang yang sama.

Spanner Graph menggunakan sintaksis yang berbeda untuk menemukan satu jalur terpendek antar node: ANY SHORTEST untuk shortestPath. allShortestPath tidak didukung.

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

Pernyataan dan klausul

Tabel berikut mencantumkan klausa openCypher, dan menunjukkan apakah tetapi didukung dalam Spanner Graph.

openCypher Spanner Graph
MATCH Didukung. Untuk mengetahui informasi selengkapnya, lihat pencocokan pola grafik.
KECOCOKAN OPSIONAL Didukung. Untuk mengetahui informasi selengkapnya, lihat pencocokan pola grafik.
KEMBALI / DENGAN Didukung. Untuk informasi selengkapnya, lihat Pernyataan KEMBALI dan Pernyataan WITH.
Spanner Graph memerlukan aliasing eksplisit untuk ekspresi yang rumit.

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

Tidak didukung.
GRAPH FinGraph
MATCH (p:Person)
RETURN EXTRACT(YEAR FROM p.birthday); -- No aliasing
WHERE Didukung. Untuk informasi selengkapnya, lihat definisi untuk pola grafik.
ORDER BY Didukung. Untuk informasi selengkapnya, lihat Pernyataan ORDER BY.
LEWATI / LIMIT Didukung. Untuk informasi selengkapnya, lihat pernyataan LEWATI dan Pernyataan LIMIT.

Spanner Graph memerlukan ekspresi yang konstan untuk offset dan batas.

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

Tidak didukung.
GRAPH FinGraph
MATCH (n:Account)
RETURN n.id
LIMIT VALUE {
  MATCH (m:Person)
  RETURN COUNT(*) AS count
} AS count; -- Not a constant expression
UNION Didukung. Untuk informasi selengkapnya, lihat Kueri grafik gabungan.
UNION SEMUA Didukung. Untuk informasi selengkapnya, lihat Kueri grafik gabungan.
BERSIHKAN Didukung oleh pernyataan`FOR`.
GRAPH FinGraph
LET arr = [1, 2, 3]
FOR num IN arr
RETURN num;
KECOCOKAN WAJIB Tidak didukung.
TELEPON[YIELD...] Tidak didukung.
BUAT, HAPUS, SETEL, HAPUS, GABUNGKAN Untuk mempelajari lebih lanjut, lihat bagian Mutasi dan Menyisipkan, memperbarui, atau menghapus data di Grafik Spanner.

Jenis data

Spanner Graph mendukung semua jenis data GoogleSQL. Untuk selengkapnya informasi, lihat Jenis data di GoogleSQL.

Bagian berikut membandingkan jenis data openCypher dengan data Spanner Graph jenis.

Jenis struktur

openCypher Spanner Graph
Node Node
Edge Edge
Jalur Tidak didukung.

Jenis properti

openCypher Spanner Graph
INT INT64
FLOAT FLOAT64
STRING STRING
BOOLEAN BOOL
DAFTAR
Daftar homogen dari jenis sederhana.
Misalnya, Daftar INT, Daftar STRING.
Anda tidak dapat menggabungkan INT dan STRING dalam satu daftar.
ARRAY

Jenis komposit

openCypher Spanner Graph
DAFTAR ARRAY atau JSON
PETA STRUCT atau JSON

Spanner Graph tidak mendukung daftar heterogen dari berbagai jenis atau peta daftar kunci dinamis dan jenis nilai elemen heterogen. Gunakan JSON untuk kasus penggunaan ini.

Paksaan Jenis

openCypher Spanner Graph
INT -> FLOAT Didukung.

Untuk informasi selengkapnya tentang aturan konversi jenis, lihat Aturan konversi di GoogleSQL.

Fungsi dan ekspresi

Selain fungsi dan ekspresi grafik, Spanner Graph juga mendukung semua fungsi dan ekspresi bawaan GoogleSQL.

Untuk mengetahui daftar lengkap fungsi dan ekspresi, lihat Fungsi, operator, dan kondisional GoogleSQL.

Bagian ini mencantumkan fungsi dan ekspresi openCypher beserta pada Spanner Graph.

Fungsi dan ekspresi jenis struktural

Jenis openCypher
fungsi atau ekspresi
Grafik Spanner
fungsi atau ekspresi

Node dan Edge
exists(n.prop) property_exists(n, properti)
id(menampilkan bilangan bulat) Tidak didukung.
properties to_json
kunci
(nama jenis properti, tetapi bukan nilai properti)
property_names
label label
Edge endNode Tidak didukung.
startNode Tidak didukung.
jenis label
Jalur durasi Tidak didukung.
node Tidak didukung.
hubungan Tidak didukung.
Node dan Edge

referensi properti
.
[]

referensi properti dinamis
MATCH (n)
RETURN n[n.name]

Tidak didukung.
Pola Sebagai Ekspresi ukuran(pola) Tidak didukung. Gunakan subkueri sebagai berikut
VALUE {
  MATCH pattern
  RETURN COUNT(*) AS count;
}

Fungsi dan ekspresi jenis properti

Jenis openCypher
fungsi atau ekspresi
Grafik Spanner
fungsi atau ekspresi
Scalar menggabung menggabung
head array_first
terakhir array_last
ukuran(daftar) array_length
ukuran(string) durasi
timestamp unix_millis(current_timestamp())
toBoolean/toFloat/toInteger cast( sebagai )
Agregat rata-rata rata-rata
collect array_agg
count count
maks maks
mnt mnt
percentileCont percentile_cont
percentileDisc percentile_disc
stDev stdev
stDevP stdev_pop
jumlah jumlah
Daftar rentang generate_array
reverse array_reverse
tail Spanner Graph tidak mendukung tail.
Gunakan array_slice dan array_length sebagai gantinya.
Matematika abs abs
ceil ceil
lantai lantai
rand rand
bulat bulat
login login
e exp(1)
exp exp
log log
log10 log10
sqrt sqrt
acos acos
Asin Asin
atangen atangen
atan2 atan2
cos cos
cot cot
derajat r * 90 / asin(1)
pi pi
radian d * asin(1) / 90
{i>sin<i} {i>sin<i}
cokelat muda cokelat muda
String lagi lagi
{i>ltrim<i} {i>ltrim<i}
ganti ganti
reverse reverse
panah kanan panah kanan
rtrim rtrim
bagian bagian
{i>substring<i} substr
menurunkan lebih rendah untuk
{i>tostring<i} cast( as string)
toupper lebih tinggi
pangkas pangkas
DISTINCT DISTINCT DISTINCT
Matematika + +
- -
* *
/ /
% MOD
^ POW
Perbandingan = =
<> <>
< <
> >
&lt;= &lt;=
&gt;= &gt;=
ADALAH [BUKAN] NULL ADALAH [BUKAN] NULL
Rangkaian perbandingan
a < b < c

Grafik Spanner tidak mendukung rantai perbandingan. Ini setara dengan perbandingan yang digabungkan dengan AND.
Contoh:

      a < b AND b < C
      

Boolean DAN DAN
ATAU ATAU
XOR
Grafik Spanner tidak mendukung XOR. Tulis kueri dengan <>.

Contoh:
      boolean_1 <> boolean_2
      

NOT NOT
String MULAI DENGAN starts_with
DIAKHIRI DENGAN ends_with
BERISI regexp_contains
+ string_concat
Daftar + array_concat
IN array_includes
[] []

Ekspresi lainnya

openCypher Spanner Graph
Ekspresi kasus Didukung.
Ada subkueri Didukung.
Proyeksi peta Tidak didukung.
Jenis STRUCT menyediakan fungsi yang serupa.
Pemahaman daftar Tidak didukung.
generate_array dan array_transform mencakup sebagian besar kasus penggunaan.

Parameter kueri

Kueri berikut menunjukkan perbedaan antara penggunaan parameter dalam openCypher dan di Spanner Graph.

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

Mutasi

Spanner Graph menggunakan GoogleSQL DML untuk memutasikan tabel input node dan edge. Untuk informasi selengkapnya, lihat Menyisipkan, memperbarui, atau menghapus data Grafik Spanner.

Membuat node dan edge

openCypher Spanner Graph
Membuat node dan edge
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());
Membuat node dan tepi dengan hasil kueri
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
);

Di Spanner Graph, label secara statis ditetapkan sesuai dengan Pernyataan DDL CREATE PROPERTY GRAPH.

Mengupdate node dan edge

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

Untuk memperbarui label Grafik Spanner, lihat Membuat, mengupdate, atau melepas skema Grafik Spanner.

Menggabungkan node dan edge

openCypher Spanner Graph
Menyisipkan elemen baru atau memperbarui properti
MERGE (p:Person {id: 100, country: 'United States'});
INSERT OR UPDATE INTO Person
(id, country)
VALUES (100, 'United States');

Hapus node dan edge

Menghapus edge sama dengan menghapus tabel input.

openCypher Spanner Graph
Menghapus node dan edge
MATCH (p:Person {id:100}), (a:Account {id:1000})
DELETE (p)-[:Owns]->(a);
DELETE PersonOwnAccount
WHERE id = 100 AND account_id = 1000;

Untuk menghapus node, diperlukan penanganan tepi yang berpotensi menjuntai. Jika DELETE CASCADE ditentukan, DELETE akan menghapus tepi yang terkait dari node seperti DETACH DELETE di openCypher. Untuk informasi selengkapnya, lihat Spanner ringkasan skema.

openCypher Spanner Graph
Hapus node dan tepi terkait
DETACH DELETE (:Account {id: 1000});
DELETE Account
WHERE id = 1000;

Menampilkan hasil mutasi

openCypher Spanner Graph
Tampilkan hasil setelah penyisipan atau pembaruan
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;
Menampilkan hasil setelah penghapusan
DELETE (p:Person {id: 100})
RETURN p.country;
DELETE FROM Person
WHERE id = 100
THEN RETURN country;

Langkah selanjutnya