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.
Artikel ini menyediakan pola kueri GQL praktis untuk tugas grafik umum di Microsoft Fabric: menemukan tetangga, melintas koneksi multihop, mengidentifikasi koneksi bersama, menghitung hubungan, dan menemukan entitas tanpa koneksi.
Contoh menggunakan himpunan data sampel jejaring sosial. Untuk referensi bahasa lengkap, lihat Panduan bahasa 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.
Temukan tetangga langsung
Mengembalikan semua simpul yang terhubung ke node awal dengan satu lompatan.
Temukan semua orang yang diketahui orang tertentu:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Temukan semua perusahaan tempat seseorang pernah bekerja:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Temukan teman (multi-hop)
Gunakan pola panjang variabel dengan {min,max} untuk melintasi lebih dari satu hop.
Temukan orang dua lompatan jauh - teman dari teman Alice yang tidak langsung dikenal oleh Alice.
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Temukan semua orang yang dapat dijangkau dalam tiga derajat:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Tip
Selalu atur batas atas pada traversal dengan panjang variabel. Pola tak terbatas di seluruh grafik besar atau padat dapat mencapai batas waktu kueri. Lihat Batasan saat ini.
Menghitung hubungan per entitas
Gunakan GROUP BY dengan count(*) untuk menghitung berapa banyak hubungan yang dimiliki setiap entitas.
Hitung berapa banyak teman yang dimiliki setiap orang, diurutkan dari yang paling banyak hingga paling sedikit.
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20
Hitung berapa banyak karyawan yang bekerja di setiap perusahaan:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Menemukan koneksi bersama
Variabel yang digunakan ulang dalam dua bagian pola menciptakan batasan "simpul yang sama" implisit. Gunakan batasan ini untuk menemukan entitas yang terhubung melalui entitas ketiga bersama.
Temukan pasangan orang yang sama-sama mengenal orang yang sama:
MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100
Temukan pasangan orang yang bekerja di perusahaan yang sama:
MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100
Tip
Kondisi ini WHERE a.id < b.id mencegah pasangan duplikat (Alice–Bob dan Bob–Alice) muncul dalam hasil.
Menemukan entitas tanpa hubungan
Gunakan OPTIONAL MATCH diikuti dengan pemeriksaan null untuk menemukan simpul yang tidak memiliki hubungan yang cocok.
Temukan 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
Temukan postingan tanpa komentar:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
Menemukan entitas dengan banyak koneksi
Gabungkan GROUP BY dan FILTER untuk mengidentifikasi node yang sangat terhubung. Metode ini berguna untuk menemukan hub atau outlier.
Temukan orang dengan lebih dari 10 teman:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER setelah GROUP BY bekerja seperti HAVING di SQL. Ini memfilter hasil agregat, bukan baris individual.