Halaman ini menjelaskan cara menggunakan jalur grafik di Spanner Graph.
Dalam database grafik, jenis data jalur grafik mewakili urutan node yang diselingi dengan edge dan menunjukkan bagaimana node dan edge ini terkait. Untuk mempelajari lebih lanjut jenis data jalur, lihat Jenis jalur grafik.
Dengan Spanner Graph Language (GQL), Anda dapat membuat jalur grafik dan menjalankan kueri di atasnya. Contoh dalam dokumen ini menggunakan skema Spanner Graph yang sama seperti yang ditemukan di halaman Menyiapkan dan membuat kueri Spanner Graph.
Membuat jalur grafik
Anda dapat membuat jalur grafik dengan membuat variabel jalur dalam pola grafik atau dengan fungsi PATH
.
Sebaiknya buat jalur grafik menggunakan variabel jalur. Format untuk membuat variabel jalur adalah:
MATCH p = PATH_PATTERN
Untuk informasi selengkapnya, lihat Pola grafik.
Contoh
Dalam contoh berikut, kueri menemukan pola transfer uang antar-akun dalam FinGraph
.
GRAPH FinGraph
MATCH p = (src:Account {id: 16})-[t1:Transfers]->(mid:Account)-[t2:Transfers]->
(dst:Account {id: 7})
RETURN TO_JSON(p) AS full_path;
Hasil
full_path |
---|
[{"identifier": ..., "properties": {"id": 16, ...}, ...}, {"identifier": ..., "properties": {"amount": 300.0, ...}, ...}, ...] |
Hasilnya menunjukkan bahwa kueri menemukan pola Account -> Transfers -> Account
dalam database.
Membuat kueri jalur grafik
Anda dapat menggunakan fungsi khusus jalur berikut untuk membuat kueri jalur grafik. Untuk mengetahui informasi umum selengkapnya tentang kueri Spanner Graph, lihat Ringkasan kueri.
EDGES
Fungsi EDGES
menampilkan semua tepi dalam jalur grafik. Untuk semantik
mendetail, lihat EDGES
.
Contoh
Kueri ini menemukan jalur antara dua akun yang melewati akun tengah.
Fungsi ini menampilkan jumlah tepi Transfers
kedua di jalur yang mungkin berada
antara src
dan mid
atau antara mid
dan dst
.
GRAPH FinGraph
MATCH p = (src:Account {id: 7})-[t1:Transfers]->{1,3}(mid:Account)-[t2:Transfers]->
{1,3}(dst:Account {id: 16})
LET second_edge = EDGES(p)[1]
RETURN DISTINCT src.id AS src, dst.id AS dst, second_edge.amount AS second_edge_amount;
Hasil
src | dst | second_edge_amount |
---|---|---|
7 | 16 | 300 |
NODES
Fungsi NODES
menampilkan semua node di jalur grafik. Untuk semantik
mendetail, lihat NODES
.
Contoh
Kueri ini menemukan jalur grafik dari dua transfer, lalu menampilkan daftar JSON yang mewakili jalur tersebut.
GRAPH FinGraph
MATCH p = (src:Account)-[t1:Transfers]->(mid:Account)-[t2:Transfers]->(dst:Account)
RETURN TO_JSON(NODES(p)) AS nodes;
Hasil
node |
---|
[{"identifier": "...", "properties": {"id": 16}, ...}, {"identifier": "...", "properties": {"id": 20, ...}, ...] |
... |
PATH_FIRST
Fungsi PATH_FIRST
menemukan node pertama di jalur grafik. Untuk semantik
mendetail, lihat PATH_FIRST
.
Contoh
Kueri ini menemukan node pertama di jalur grafik dari dua transfer. Fungsi ini menampilkan label node Account
dan nama panggilan akun.
GRAPH FinGraph
MATCH p = -[:Transfers]->{1,3}(dst:Account{id: 7})
RETURN DISTINCT PATH_FIRST(p).id AS can_reach_target;
Hasil
can_reach_target |
---|
7 |
16 |
20 |
PATH_LAST
Fungsi PATH_LAST
menemukan node terakhir di jalur grafik. Untuk semantik
mendetail, lihat PATH_LAST
.
Contoh
Kueri ini menemukan node terakhir di jalur grafik dari dua transfer. Fungsi ini menampilkan label node Account
dan nama panggilan akun.
GRAPH FinGraph
MATCH p =(start:Account{id: 7})-[:Transfers]->{1,3}
RETURN DISTINCT PATH_LAST(p).id as can_reach_target;
Hasil
can_reach_target |
---|
7 |
16 |
20 |
PATH_LENGTH
Fungsi PATH_LENGTH
menemukan jumlah tepi dalam jalur grafik. Untuk
semantik mendetail, lihat PATH_LENGTH
.
Contoh
Kueri ini menemukan jumlah tepi di jalur grafik yang berisi satu hingga tiga transfer.
GRAPH FinGraph
MATCH p = (src:Account)-[e:Transfers]->{1,3}(dst:Account)
RETURN PATH_LENGTH(p) AS num_transfers, COUNT(*) AS num_paths;
Hasil
num_transfers | num_paths |
---|---|
1 | 5 |
2 | 7 |
3 | 11 |
IS_ACYCLIC
Fungsi IS_ACYCLIC
memeriksa apakah jalur grafik memiliki node berulang. Fungsi ini menampilkan
TRUE
jika pengulangan ditemukan, jika tidak, akan menampilkan FALSE
. Untuk semantik
mendetail, lihat IS_ACYCLIC
.
Contoh
Kueri ini memeriksa apakah jalur grafik ini memiliki node berulang.
GRAPH FinGraph
MATCH p = (src:Account)-[t1:Transfers]->(mid:Account)-[t2:Transfers]->(dst:Account)
RETURN IS_ACYCLIC(p) AS is_acyclic_path, src.id AS source_account_id,
mid.id AS mid_account_id, dst.id AS dst_account_id;
Hasil
is_acyclic_path | source_account_id | mid_account_id | dst_account_id |
---|---|---|---|
TRUE | 16 | 20 | 7 |
TRUE | 20 | 7 | 16 |
TRUE | 20 | 7 | 16 |
FALSE | 16 | 20 | 16 |
TRUE | 7 | 16 | 20 |
TRUE | 7 | 16 | 20 |
FALSE | 20 | 16 | 20 |
IS_TRAIL
Fungsi IS_TRAIL
memeriksa apakah jalur grafik memiliki tepi berulang. Fungsi ini menampilkan
TRUE
jika pengulangan ditemukan, jika tidak, akan menampilkan FALSE
. Untuk semantik
mendetail, lihat IS_TRAIL
.
Contoh
Kueri ini memeriksa apakah jalur grafik ini memiliki tepi berulang.
GRAPH FinGraph
MATCH p = (src:Account)-[t1:Transfers]->(mid1:Account)-[t2:Transfers]->
(mid2:Account)-[t3:Transfers]->(dst:Account)
WHERE src.id < dst.id
RETURN IS_TRAIL(p) AS is_trail_path, t1.id AS t1_id, t2.id AS t2_id, t3.id AS t3_id;
Hasil
is_trail_path | t1_id | t2_id | t3_id |
---|---|---|---|
FALSE | 16 | 20 | 16 |
TRUE | 7 | 16 | 20 |
TRUE | 7 | 16 | 20 |
Mode jalur
Di Spanner Graph, node dan edge berulang ditampilkan secara default. Anda dapat menggunakan mode jalur berikut untuk menyertakan atau mengecualikan jalur yang memiliki node dan tepi berulang berdasarkan mode yang ditentukan. Untuk semantik mendetail, lihat Mode jalur.
WALK
Mode jalur WALK
default menyimpan semua jalur, termasuk jalur dengan node dan tepi berulang.
Contoh
Kueri berikut menunjukkan penggunaan mode jalur WALK
pada
pola jalur yang tidak dikuantifikasi. Jalur pertama dalam hasil menggunakan tepi yang sama
untuk t1
dan t3
.
GRAPH FinGraph
MATCH p = WALK (src:Account)-[t1:Transfers]->(mid1:Account)-[t2:Transfers]->
(mid2:Account)-[t3:Transfers]->(dst:Account)
WHERE src.id < dst.id
RETURN t1.id AS transfer1_id, t2.id AS transfer2_id, t3.id AS transfer3_id;
Hasil
transfer1_id | transfer2_id | transfer3_id |
---|---|---|
16 | 20 | 16 |
7 | 16 | 20 |
7 | 16 | 20 |
TRAIL
Mode jalur TRAIL
default memfilter jalur yang memiliki tepi berulang.
Contoh
Kueri berikut menunjukkan penggunaan mode jalur TRAIL
pada
pola jalur yang tidak dikuantifikasi. Jalur yang tepi t1
dan t3
-nya sama akan
difilter.
GRAPH FinGraph
MATCH p = TRAIL (src:Account)-[t1:Transfers]->(mid1:Account)-[t2:Transfers]->
(mid2:Account)-[t3:Transfers]->(dst:Account)
RETURN
t1.id AS transfer1_id, t2.id AS transfer2_id, t3.id AS transfer3_id;
Hasil
transfer1_id | transfer2_id | transfer3_id |
---|---|---|
16 | 20 | 7 |
16 | 20 | 7 |
20 | 7 | 16 |
20 | 7 | 16 |
7 | 16 | 20 |
7 | 16 | 20 |
7 | 16 | 20 |
7 | 16 | 20 |
20 | 16 | 20 |
Awalan penelusuran jalur
Anda dapat menggunakan awalan penelusuran jalur untuk membatasi pola jalur agar menampilkan jalur terpendek dari setiap partisi data. Untuk semantik mendetail, lihatAwalan penelusuran jalur.
ANY SHORTEST
Awalan penelusuran jalur ANY SHORTEST
menampilkan jalur terpendek (jalur dengan
jumlah tepi paling sedikit) yang cocok dengan pola dari setiap partisi data. Jika
ada lebih dari satu jalur terpendek per partisi, tampilkan salah satunya.
Contoh
Kueri berikut cocok dengan jalur apa pun di antara setiap pasangan [a, b]
.
GRAPH FinGraph
MATCH p = ANY SHORTEST (a:Account)-[t:Transfers]->{1,4}(b:Account)
WHERE a.is_blocked
LET total_amount = SUM(t.amount)
RETURN a.id AS account1_id, total_amount, b.id AS account2_id;
Hasil
account1_id | total_amount | account2_id |
---|---|---|
16 | 500 | 16 |
16 | 800 | 7 |
16 | 300 | 20 |
Aturan konversi
Untuk mengetahui informasi selengkapnya, lihat Aturan konversi GRAPH_PATH.