Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Pencocokan pola grafik memungkinkan Anda menjelaskan struktur data yang ingin Anda temukan menggunakan sintaks visual yang intuitif. Alih-alih menggabungkan tabel, Anda menulis pola yang terlihat seperti hubungan itu sendiri - simpul yang terhubung oleh tepi. Artikel ini memperlihatkan kepada Anda cara menulis kueri pola GQL untuk skenario umum dalam grafik di Microsoft Fabric.
Contohnya menggunakan himpunan data sampel jejaring sosial. Untuk referensi sintaks pola lengkap, lihat Pola grafik GQL.
Prasyarat
- Elemen grafik dengan data yang telah dimuat. Jika Anda baru menggunakan grafik, selesaikan tutorial terlebih dahulu.
- Pemahaman tentang konsep dasar
MATCHdanRETURNkueri. Lihat Panduan bahasa GQL.
Mencocokkan hubungan langsung
Pola dasar cocok dengan jenis node, jenis tepi tertentu, dan jenis node lainnya. Sintaks terlihat seperti diagram hubungan.
Misalnya, untuk menemukan maksimal 100 orang yang dipasangkan dengan perusahaan tempat mereka bekerja:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
LIMIT 100
Gunakan pola tepi yang tidak diarahkan saat Anda tidak tahu atau tidak peduli tentang arah. Misalnya, untuk menemukan hingga 100 kenalan bersama terlepas dari siapa yang memulai koneksi:
MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100
Note
Grafik saat ini tidak mendukung pembuatan tepi yang tidak diarahkan, tetapi Anda dapat mengkueri tepi ke arah mana pun dengan menggunakan -[:label]- sintaksis.
Memfilter pola dengan WHERE sebaris
Tempatkan WHERE di dalam pola untuk memfilter simpul dan tepi saat dicocokkan. Pendekatan ini lebih efisien daripada melakukan penyaringan setelah kejadian.
Misalnya, untuk menemukan orang yang lahir sebelum 1990 yang bekerja di perusahaan yang namanya dimulai dengan 'A':
MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filter pada properti tepi untuk membatasi hubungan mana yang cocok. Misalnya, untuk mengembalikan hanya orang yang mulai bekerja di perusahaan pada tahun 2010 atau yang lebih baru:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom
Sesuaikan hubungan multi-hop
Gunakan pola panjang variabel untuk melewati beberapa tahapan dalam satu ekspresi. Tentukan jumlah hop minimum dan maksimum dengan {min,max} sintaks.
Misalnya, untuk menemukan hingga 100 orang yang dapat dijangkau dalam dua hingga empat derajat persahabatan dari Alice,
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{2,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Untuk menemukan hingga 100 koneksi langsung dan koneksi tingkat kedua (satu atau dua lompatan) dari Alice:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,2}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Mengontrol penelusuran dengan mode jalur
Secara default, GQL menggunakan TRAIL mode, yang mencegah tepi yang sama dilalui lebih dari sekali. Gunakan mode jalur secara eksplisit saat Anda membutuhkan jaminan yang berbeda.
| Mode jalur | Behavior | Gunakan saat... |
|---|---|---|
WALK |
Memungkinkan simpul dan tepi berulang | Anda ingin traversal mentah tanpa batasan. Jarang diperlukan; terutama berguna untuk kueri eksplorasi. |
TRAIL |
Tidak ada tepi berulang (default) | Anda ingin menghindari menelusuri ulang hubungan yang sama, tetapi simpul yang sama dapat muncul melalui hubungan yang berbeda. Bekerja dengan baik untuk sebagian besar kueri traversal. |
SIMPLE |
Tidak ada simpul berulang kecuali awal dan akhir | Anda ingin tidak ada simpul yang muncul lebih dari sekali di tengah jalur, tetapi izinkan jalur yang menutup kembali ke awal. Berguna untuk mendeteksi perulangan. |
ACYCLIC |
Tidak ada simpul berulang sekalipun | Anda perlu menjamin bahwa tidak ada simpul yang muncul di mana saja di jalur lebih dari sekali. Gunakan untuk hierarki ketat, silsilah, atau traversal apa pun di mana pengulangan simpul akan menghasilkan hasil yang salah. |
WALK adalah mode yang paling permisif dan ACYCLIC paling ketat.
TRAIL adalah default dan berfungsi dengan baik untuk sebagian besar kueri. Gunakan mode yang lebih ketat hanya saat kasus penggunaan Anda memerlukannya.
Untuk mengilustrasikan perbedaannya, pertimbangkan jalur Alice → Bob → Carol → Bob:
- WALK — memungkinkan jalur ini. Simpul dan tepi dapat diulang dengan bebas.
- TRAIL — memungkinkan jalur ini. Bob muncul dua kali, tetapi setiap tepi yang digunakan adalah hubungan yang berbeda (Alice→Bob dan Carol→Bob adalah tepi yang berbeda), sehingga tidak ada tepi yang diulang.
- SEDERHANA — memblokir jalur ini. Bob muncul lebih dari sekali, dan SIMPLE hanya mengizinkan simpul untuk muncul berulang jika simpul tersebut merupakan awal dan akhir lintasan (siklus tertutup). Di sini Alice adalah awal dan Bob adalah akhir, jadi tidak ada pengecualian yang berlaku.
- ACYCLIC — memblokir jalur ini. Bob muncul lebih dari sekali di mana saja di jalur.
Contoh berikut menunjukkan cara menggunakan TRAIL untuk menghitung berapa banyak jalur berbeda yang mengarah ke masing-masing dari 100 orang pertama yang dapat dijangkau di jaringan Alice dalam empat hop:
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, count(*) AS pathCount
LIMIT 100
Gunakan ACYCLIC untuk mengembalikan hingga 100 orang yang dapat dijangkau dari Alice dalam empat hop, di mana setiap orang di jalur tersebut unik:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Tip
Untuk grafik besar, selalu atur batas atas pada pola panjang variabel ({1,4} bukan {1,}). Penjelajahan tak terbatas pada graf padat dapat mencapai batas waktu habis kueri. Lihat Batasan saat ini.
Menggunakan kembali variabel untuk mengekspresikan entitas bersama
Menggunakan kembali variabel yang sama dalam dua bagian pola menciptakan batasan kesetaraan implisit - kedua referensi harus cocok dengan simpul yang sama. Teknik ini memungkinkan Anda mengekspresikan "menemukan entitas yang terhubung melalui entitas ketiga bersama."
Misalnya, untuk menemukan hingga 100 pasang orang yang saling mengenal dan bekerja di perusahaan yang sama:
MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100
Variabel c digunakan kembali untuk kedua workAt target, sehingga kueri hanya mengembalikan pasangan di mana kedua orang saling mengenal dan bekerja di perusahaan yang sama.
Untuk menemukan hingga 100 pasang orang yang sama-sama menyukai postingan yang sama:
MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100
Tip
Kondisi ini WHERE a.id < b.id mencegah pasangan duplikat (Alice + Bob dan Bob + Alice) muncul di hasil.
Menggabungkan beberapa pola
Cantumkan beberapa pola dalam satu MATCH, dipisahkan oleh koma. Semua pola harus berbagi setidaknya satu variabel sehingga bergabung dengan benar.
Misalnya, untuk menemukan hingga 100 orang beserta keduanya tempat kerja dan kota tempat mereka tinggal:
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100
Variabel p bersama menghubungkan dua pola. Setiap baris hasil mewakili satu orang dengan perusahaan dan kota mereka.
Sesuaikan hubungan opsional
Gunakan OPTIONAL MATCH saat hubungan mungkin tidak ada untuk setiap simpul. Baris tanpa kecocokan dipertahankan dengan NULL nilai, mirip dengan SQL LEFT JOIN.
Misalnya, tampilkan hingga 100 orang dengan nama perusahaan mereka, termasuk orang tanpa pekerjaan (yaitu, menampilkan nilai NULL untuk kolom perusahaan).
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100
Gunakan IS NULL setelah OPTIONAL MATCH menemukan hingga 100 orang yang tidak bekerja di perusahaan mana pun:
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100