Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Microsoft Fabric yaygın graf görevleri için pratik GQL sorgu desenleri sağlanır: komşu bulma, çok bağlantılı bağlantılarda dolaşma, paylaşılan bağlantıları tanımlama, ilişkileri sayma ve bağlantısız varlıkları bulma.
Örneklerde sosyal ağ örnek veri kümesi kullanılır. Sorgu akışı ve ifadelerinin uçtan uca açıklaması için GQL dil rehberine bakınız. Yapmak istediğiniz grafik görevini bildiğinizde bu makaleyi kullanın. Düğüm, kenar ve yol desenleri oluşturma konusunda sistematik talimatlar için bkz. Graf desen sorguları yaz. Detaylı filtreleme ve toplama iş akışları için bkz. Grafik verilerini filtrele ve topla.
Prerequisites
- Sosyal ağ örnek veri setinden oluşturulan, düğüm türleri, kenar tipleri ve özellikler sosyal ağ şeması örneğinde tanımlanan bir grafik öğesidir.
- Temel
MATCHveRETURNsorgularına aşinalık. Bkz. GQL dil kılavuzu.
Doğrudan komşuları bulma
Başlangıç düğümüne bir adımda bağlı olan tüm düğümleri geri getir.
Belirli bir kişinin tanıdığı herkesi bulun:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
Bir kişinin çalıştığı tüm şirketleri bulun:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
Arkadaşlarınızı bulma (çoklu atlama)
Birden fazla atlamadan geçiş yapmak için değişken uzunlukta desenler {min,max} ile kullanın.
Alice’ten tam olarak iki knows kenar üzerinden ulaşılabilen kişileri bulun:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
Üç derece içinde ulaşılabilen herkesi bulun:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Alice'ten her kişiye dört zıplama içinde ulaşılabilecek en kısa yolu bulun:
MATCH p = ANY SHORTEST
(src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, path_length(p) AS hopCount
ORDER BY hopCount, dst.lastName
LIMIT 100
Aynı sayıda adımla aynı kişiye ulaşan birden fazla en kısa yol varsa, ANY SHORTEST eşitlik durumunda deterministik bir seçim yapmadan bunlardan birini döndürür.
Satır içi yüklemler, ANY SHORTEST için hangi yolların uygun olduğunu kısıtlar.
En kısa yol seçildikten sonra son filtreler uygulanır. Örneğin, yol seçiminden önce veya sonra Place predicate'lerine bakınız.
Tavsiye
Tahmin edilebilir sorgu maliyeti için sonlu bir üst sınır kullanın. Sınırsız ALL WALK geçiş desteklenmiyor. Diğer sınırsız yol modları yine de büyük sonuçlar verebilir. Bkz . Geçerli sınırlamalar.
Varlık başına ilişki sayısı
Her bir varlığın kaç ilişkisi olduğunu saymak için GROUP BY ve count(*) ile kullanın.
Detaylı gruplama, toplu filtreleme ve koşullu yönlendirme desenleri için bkz. Grafik verilerini filtrele ve topla.
Her bir kişinin kaç arkadaşı olduğunu say ve en çoktan en aza sırala.
MATCH (p:Person)-[:knows]->(friend:Person)
LET personId = p.id, name = p.firstName || ' ' || p.lastName
RETURN personId, name, count(*) AS friendCount
GROUP BY personId, name
ORDER BY friendCount DESC
LIMIT 20
Her varlık için bir değer hesaplayın
Her giriş satırı için bir değer hesaplamak için koreleli CALL bir alt sorgu kullanın. Dış sorgudan gelen değişkenler alt sorgu içinde örtük olarak mevcuttur.
Her kişi için arkadaş sayısını hesaplayın:
MATCH (p:Person)
CALL {
MATCH (p)-[:knows]->(friend:Person)
RETURN count(*) AS friendCount
}
RETURN p.firstName, p.lastName, friendCount
ORDER BY friendCount DESC
Dış değişkenler, CALL öğesinden sonra da erişilebilir olmaya devam eder. Alt sorgu içinde oluşturulan değişkenlerden yalnızca döndürülen sütunlar alt sorgunun dışında kullanılabilir. Eşleşen arkadaş bulunmadığında gruplanmamış count(*), 0 döndürür; bu nedenle bu sorgu, arkadaşı olmayan kişileri korur.
Normal CALL, alt sorgu hiçbir satır döndürmediğinde dış satırı eler ve birden fazla satır döndürdüğünde alt sorgunun döndürdüğü her satır için bir çıktı satırı üretir. Eşleşen alt sorgu satırı olmayan bir dış satırı korumanız gerektiğinde OPTIONAL CALL ifadesini kullanın.
Paylaşılan bağlantıları bulma
Bir değişkeni desenin iki bölümünde yeniden kullanma örtük bir "aynı düğüm" kısıtlaması oluşturur. Paylaşılan bir üçüncü varlık aracılığıyla bağlanan varlıkları bulmak için bu kısıtlamayı kullanın.
Her ikisi de aynı kişiyi bilen kişi çiftlerini bulun:
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
Aynı şirkette çalışan kişi çiftlerini bulun:
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
Tavsiye
Koşul, WHERE a.id < b.id yinelenen çiftlerin (Alice–Bob ve Bob–Alice) sonuçlarda görünmesini engeller.
İlişkisi olmayan varlıkları bulma
NOT EXISTS, ilişkili bir alt sorgunun hiçbir satır döndürmediği düğümleri bulmak için kullanılır.
Herhangi bir şirkette çalışmayan kişileri bulun:
MATCH (p:Person)
WHERE NOT EXISTS {
MATCH (p)-[:workAt]->(c:Company)
RETURN c
}
RETURN p.firstName, p.lastName
LIMIT 100
Yorum içermeyen gönderileri bulun:
MATCH (post:Post)
WHERE NOT EXISTS {
MATCH (comment:Comment)-[:replyOf]->(post)
RETURN comment
}
RETURN post.id, post.content
LIMIT 100
Birçok bağlantısı olan varlıkları bulma
GROUP BY ve FILTER öğelerini birleştirerek yüksek bağlı düğümleri tanımlayın. Bu yöntem hub'ları veya aykırı değerleri bulmak için kullanışlıdır.
10'dan fazla arkadaşı olan kişileri bulun:
MATCH (p:Person)-[:knows]->(friend:Person)
LET personId = p.id, name = p.firstName || ' ' || p.lastName
RETURN personId, name, count(*) AS friendCount
GROUP BY personId, name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER sonra GROUP BY SQL'de olduğu gibi HAVING çalışır. Tek tek satırları değil, toplanan sonucu filtreler.