Menggunakan jalur

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.

Langkah selanjutnya