GQL grafik desenleri

Grafik desenleri, Microsoft Fabric'teki grafikteki GQL sorgularınızın temel yapı taşlarıdır. Grafikte aradığınız yapıları, düğümleri ve kenarları sezgisel ve görsel bir şekilde kullanarak açıklar. Grafik desenlerini, sorgu altyapısının grafınızdaki gerçek verilerle eşleştirmeye çalıştığı şablonlar olarak düşünün.

Bu makalede, GQL'deki grafik desenleri için söz dizimi ve oluşturma kuralları açıklanmaktadır.

Önemli

Bu makale yalnızca sosyal ağ örnek grafik veri setini kullanmaktadır.

Basit öğe desenleri

Basit öğe desenleri, grafınızdaki belirli gereksinimleri karşılayan tek tek düğümleri ve kenarları eşleştirmenize yardımcı olur. Bu desenler daha karmaşık desen eşleştirme için temel oluşturur.

Basit düğüm desenleri

Düğüm deseni, bir düğümün eşleşmesi gereken etiketleri ve özellikleri belirtir:

(:Place&City { name: "New York" })

Bu düzen, hem vePlace etiketlerine City (işleç tarafından & gösterilir) sahip olan hem de özelliği eşit olan name tüm düğümlerle eşleşir"New York". Gerekli etiketlerin ve özelliklerin bu birleşimi düğüm deseninin dolgusu olarak adlandırılır.

Temel kavramlar:

  • Etiket eşleştirme: Birden çok etiket gerektirmek için kullanın & .
  • Özellik filtreleme: Özelliklerin eşleşmesi gereken tam değerleri belirtin.
  • Esnek ("kovaryant") eşleştirme: Eşleşen düğümler, belirtilenlerin ötesinde daha fazla etikete ve özelliğe sahip olabilir.

Uyarı

Düğümler birden çok etikete sahip olabilir, ancak birden çok etikete sahip kenar türleri henüz desteklenmiyor.

Basit kenar desenleri

Kenar desenleri düğüm desenlerinden daha karmaşıktır. Sadece bir dolgu belirtmekle kalmaz, aynı zamanda bir orijin düğümü desenini hedef düğüm desenine bağlar. Kenar desenleri hem kenar hem de uç noktalarındaki gereksinimleri açıklar:

(:Person)-[:likes|knows { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]->(:Comment)

Ok yönü -[...]-> önemlidir—orijin düğüm deseni ve (:Person) hedef düğüm deseni olarak belirlenir(:Comment). Kenar yönünü anlamak, grafınızı doğru sorgulamak için çok önemlidir.

Eşdeğer yansıtılmış desen:

Eşdeğer, yansıtılmış kenar desenini oluşturmak için oku çevirebilir ve düğüm desenlerini değiştirebilirsiniz:

(:Comment)<-[:likes { creationDate: ZONED_DATETIME("2010-08-31T13:16:54Z") }]-(:Person)

Bu desen aynı ilişkileri bulur, ancak karşıt perspektiften.

Herhangi bir yönlendirilmiş kenar deseni

Bir graf kenarının yönü sorgunuz için önemli olmadığında, herhangi bir yönlendirmeli kenar deseni oluşturarak bunu belirtilmemiş olarak bırakabilirsiniz:

(:Song)-[:inspired]-(:Movie)

Bu desen, hangi düğümün orijin ve hangisinin hedef olduğuna bakılmaksızın aynı kenarları (:Song)-[:inspired]->(:Movie) eşleştirir (:Movie)-[:inspired]->(:Song) (bu örnek sosyal ağ grafik türünden değildir).

Graf kenar deseni kısayolları

GQL, sorgularınızı daha kısa hale getirmek için yaygın kenar desenleri için kullanışlı kısayollar sağlar:

  • ()->() (herhangi bir etiketle yönlendirilmiş kenar) anlamına ()-[]->() gelir
  • ()<-() anlamına ()<-[]-() gelir (herhangi bir etiketle ters yönlendirilmiş kenar)
  • ()-() (herhangi bir etikete sahip herhangi bir yönlendirilmiş kenar) anlamına ()-[]-() gelir

Bu kısayollar, bağlantıya önem verdiğinizde ancak belirli graf kenar türüyle ilgilenmediğinizde yararlı olabilir.

Etiket ifadeleri

Desenler, eşleşen düğümlerin ve kenarların etiketlerinde karmaşık gereksinimleri ifade edebilir.

Example:

MATCH (:Person|(Organization&!Company))-[:isLocatedIn]->(p:City|Country)
RETURN count(*) AS num_matches

Bu, düğümleri veya düğümleri (isLocatedInher zaman Person sosyal ağ şemasındaki düğümler olan) veya Organization düğümleri Company bağlayan University kenar sayısını City sayar.Country

Syntax:

Sözdizimi Meaning
A&B Etiketlerin hem A hem de B içermesi gerekir.
A|B Etiketlerin A veya B'nin en az birini içermesi gerekir.
!A Etiketlerin A'yı dışlamaları gerekir.

Ayrıca etiket ifadesi değerlendirme sırasını denetlemek için parantez kullanın. Varsayılan olarak, ! en yüksek önceliğe sahiptir ve & değerinden |daha yüksek önceliğe sahiptir. Bu nedenle !A&B|C|!D ile aynıdır ((!A)&B)|C|(!D).

Değişkenleri bağlama

Değişkenler, sorgunuzun diğer bölümlerindeki eşleşen grafik öğelerine başvurmanıza olanak sağlar. Değişkenleri bağlamayı ve kullanmayı anlamak, güçlü sorgular oluşturmak için gereklidir.

Öğe değişkenlerini bağlama

Hem düğüm hem de kenar desenleri, daha sonra başvurmak üzere eşleşen düğümleri ve kenarları değişkenlere bağlayabilir.

(p:Person)-[w:workAt]->(c:Company)

Bu düzende, p eşleşen düğümlere, Person eşleşen w kenarlara ve workAt eşleşen cCompany düğümlere bağlıdır.

Yapısal kısıtlamalar için değişken yeniden kullanımı:

Aynı değişkenin bir desende birden çok kez yeniden kullanılması, eşleşmelerin yapısı üzerinde bir kısıtlamayı ifade eder. Aynı değişkenin her oluşumu her zaman geçerli bir eşleşmede aynı grafik öğesine bağlanmalıdır. Değişken yeniden kullanımı, karmaşık yapısal gereksinimleri ifade etmek için güçlüdür.

(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)

Desen, birbirini tanıyan düğümleri bulur ve değişkenine Personbağlı olan ile aynı xşekilde çalışır.yCompanyc öğesinin c yeniden kullanılması, her iki kişinin de aynı şirkette çalışmasını sağlar.

Öğe değişkenleriyle desen koşulları:

Öğe değişkenlerini bağlama, düğüm ve kenar deseni koşullarını belirtmenizi sağlar. Bir doldurucu, gibi { name: "New York, USA" }tam özellik değerlerine sahip bir dolgu sağlamak yerine, her aday öğesi için değerlendirilen bir koşul belirtebilir. Desen yalnızca koşul olarak değerlendirilirse eşleşir TRUE:

(p:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T18:00:00Z")]-(o:Person)

Kenar düzeni, tam eşleşme yerine esnek bir koşul kullanarak 1 Ocak 2000'den bu yana birbirini tanıyan kişileri bulur.

Uyarı

Kenar deseni değişkenleri, değişken uzunluklu desenler kullanılırken bile her zaman kenar deseni koşulunda ayrı kenarlara bağlanır. Bu, filtre sonrası gerçekleştirmek için kenar grubu listesi değişkenlerini en iyi şekilde kullanmak zorunda kalmadan yardımcı olabilir. Bkz . Değişken uzunluklu desen kenar değişkenlerini bağlama.

Gelişmiş desen koşulu teknikleri:

Desen önkoşulları, sorgu okunabilirliğini geliştirebilecek güçlü satır içi filtreleme özellikleri sağlar:

-- Multiple conditions in node predicates
MATCH (p:Person WHERE p.birthday < 19900101 AND p.gender = 'female')
      -[:workAt]->
      (c:Company WHERE c.name STARTS WITH 'A')

-- Filter on an edge property
MATCH (p1:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)

-- MATCH WHERE: evaluated after pattern matching
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE p.browserUsed = 'Firefox' AND c.name IS NOT NULL

-- Filter during matching and after
MATCH (p:Person WHERE p.gender = 'male')-[:workAt]->(c:Company)
WHERE p.birthday < 19900101 AND c.url IS NOT NULL

Tip

Eşleşmeye hangi düğüm veya kenarın katılabileceğini açıklarken desen içinde bir önlem tutun.

Bağlama yolu değişkenleri

Ayrıca, daha fazla işlem yapmak veya kullanıcıya tam yol yapısını döndürmek için eşleşen yolu bir yol değişkenine bağlayabilirsiniz:

p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)

Burada, p verilen sırayla tüm düğümler ve kenarlar için başvuru değerleri de dahil olmak üzere tam eşleşen yol yapısını temsil eden bir yol değerine bağlıdır.

Bağlı yollar kullanıcıya geri dönebilir veya aşağıdaki gibi NODESEDGESfonksiyonlarla daha fazla işlenebilir:

MATCH p=(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c:Company)
LET path_edges = edges(p)
RETURN path_edges, size(path_edges) AS num_edges
GROUP BY path_edges

Desen oluşturma

Gerçek dünyadaki sorgular genellikle basit düğüm-kenar-düğüm yapılarından daha karmaşık desenler gerektirir. GQL, karmaşık graf geçişleri için desen oluşturmanın çeşitli yollarını sağlar.

Yol desenleri oluşturma

Yol desenleri, daha uzun geçişler oluşturmak için basit düğüm ve kenar desenlerinin birleştirilmesiyle oluşturulabilir.

(:Person)-[:knows]->(:Person)-[:workAt]->(:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)

Desen, bir kişinin sosyal ve profesyonel bağlantıları aracılığıyla bir kişiden geçerek iş arkadaşının şirketinin nerede olduğunu bulur.

Parçalı desen yapısı: Ayrıca, karmaşık desenlerin daha kolay okunmasını ve anlaşılmasını sağlayan yol desenlerini daha artımlı olarak oluşturabilirsiniz:

(:Person)-[:knows]->(p:Person),
(p:Person)-[:workAt]->(c:Company),
(c:Company)-[:isLocatedIn]->(:Country)-[:isPartOf]->(:Continent)

Bu yaklaşım aynı geçişi mantıksal adımlara bölerek anlaşılmasını ve hata ayıklamasını kolaylaştırır.

Doğrusal olmayan desenler oluşturma

Bir desenin elde edilen şeklinin doğrusal bir yol olması gerekmez. Merkezi bir düğümden yayılan "yıldız şeklindeki" desenler gibi daha karmaşık yapıları eşleştirebilirsiniz:

(p:Person),
(p)-[:studyAt]->(u:University),
(p)-[:workAt]->(c:Company),
(p)-[:likes]-(m)

Desen, bir kişiyi eğitim, istihdam ve içerik tercihleriyle birlikte aynı anda bulur; kapsamlı bir profil sorgusu.

Aynı MATCH desenlerin bir değişkeni paylaşması gerekmez. Bağlantısı kopuk kalıplar, eşleşmelerinin Kartezyen çarpımını oluşturur. Bir değişkeni tekrar kullanın; desenler aynı grafik elemanını bağlamalı ve sadece birleştirilmiş kombinasyonlar kalmalıdır.

Kontrol elemanının yeniden kullanımı

GQL, iki seviyede tekrarlanan düğümleri ve kenarları kontrol eder:

  • Eşleşme modu, virgülle ayrılmış yollar dahil olmak üzere tüm grafik desenine uygulanır.
  • Bir yol modu tek bir yol için uygulanır.

Varsayılan maç modu .REPEATABLE ELEMENTS Aynı eleman bağlanmasının grafik deseninin farklı bölümlerinde, her yolun yol moduna bağlı olarak gerçekleşmesine olanak tanır. Bunu açıkça yazabilirsiniz:

REPEATABLE ELEMENTS (a)-[e1:knows]->(b), (a)-[e2:knows]->(c)

Tam grafik deseninde kenar benzersizliği gerektirmek için eşanlamlı DIFFERENT RELATIONSHIPS bir şekilde DIFFERENT EDGES kullanılır. Bu eşleşme modu ayrıca desendeki herhangi bir davranış TRAIL yolunu değiştirirWALK.

DIFFERENT EDGES (a)-[e1:knows]->(b), (a)-[e2:knows]->(c)

Aşağıdaki yol modları, her yol içindeki tekrarlanan öğeleri kontrol eder:

Yol modu Eleman yeniden kullanımı
WALK Düğümler ve kenarlar tekrar edebilir.
TRAIL Kenarlar tekrarlayamaz, ama düğümler tekrar edebilir.
SIMPLE Düğümler tekrarlayamaz, ancak ilk ve son düğüm aynı olabilir. Kenarlar tekrarlayamaz.
ACYCLIC Düğümler, birinci ve son düğüm dahil olmak üzere, tekrarlayamaz. Kenarlar tekrarlayamaz.

WALK varsayılan yol modudur. Daha katı eleman benzersizliği gerektiğinde bir yolu başka bir modla önleker:

ve ACYCLICiçinSIMPLE, kenar benzersizliği düğüm benzersizliğinden kaynaklanır. Bir yol, SIMPLE ilk düğümüne dönerek kapanabilir, ancak yine de bir kenarı tekrar kullanamaz.

TRAIL (a)-[e1:knows]->(b)-[e2:knows]->(c)-[e3:knows]->(d)

Bu TRAIL desen yalnızca , e2, ve e3 farklı olduğu eşleşmeler e1üretir. Düğümler yine de tekrarlanabilir, böylece yol bir kenarı tekrar kullanmadan bir döngü oluşturabilir.

Hangi yolların geri döneceğini kontrol edin

Bir yol arama öneki, bir yol deseninin hangi yolları döndüreceğini kontrol eder. Varsayılan ALL önek, yol modu ve deseniyle eşleşen her yolu döndürür. Açıkça yazabilirsiniz ALL :

ALL TRAIL (a:Person)-[:knows]->{1,4}(b:Person)

Her giriş satırından her kaynak-hedef çifti için en kısa eşleşme yolunu döndürmek için kullanılır ANY SHORTEST :

MATCH p = ANY SHORTEST
  (src:Person)-[:knows]->{1,4}(dst:Person)
RETURN src.id AS sourceId, dst.id AS targetId, path_length(p) AS hopCount
ORDER BY sourceId, targetId
LIMIT 100

Eğer birden fazla yol en kısa uzunlukta bağlıysa, sorgu onlardan birini döndürür, ancak hangi bağlı yol dönerse deterministik değildir. Sıfırın alt sınırı, bir kaynak düğümden kendine sıfır zıplama yolunu döndürebilir.

ALL SHORTEST Ve ANY yol aramaları desteklenmiyor.

Yol seçiminden önce veya sonra yer önlemleri

Bir koşulun uygun yolları tanımlayıp tanımamayacağını veya yol arama öneki onları seçtikten sonra onları filtreleyip filtrelemediğini belirler:

  • Bir düğüm veya kenar desenindeki bir inline WHERE desen, desenin bir parçasıdır. Hangi yolların önce ALL uygun olduğunu veya ANY SHORTEST uygulandığını sınırlar.
  • Tam MATCH desenden sonra bir ifade seviyesi WHERE bir postfiltredir. Yol arama öneki yolları seçtikten sonra satırlar filtreler.
  • Sonraki FILTER bir ifade de yol seçimi sonrası satırları filtreler.

Bu ayrım özellikle . ANY SHORTESTile önemlidir. Aşağıdaki desende, sorgu en kısa yolu seçtiğinde yalnızca knows belirtilen tarihte veya sonrasında oluşturulan kenarlar uygundur:

MATCH p = ANY SHORTEST
  (src:Person WHERE src.firstName = 'Alice')
  -[connection:knows
    WHERE connection.creationDate >= ZONED_DATETIME('2020-01-01T00:00:00Z')]->{1,4}
  (dst:Person WHERE dst.firstName = 'Bob')
RETURN p

Kenar koşulu bir postfiltreye taşındığında anlam değişir. Sorgu önce bu koşul olmadan en kısa yolu seçer. Eğer herhangi bir kenar koşulu geçersizse, seçilen yolu kaldırır; bunun yerine daha uzun bir yol seçmez:

MATCH p = ANY SHORTEST
  (src:Person WHERE src.firstName = 'Alice')
  -[connections:knows]->{1,4}
  (dst:Person WHERE dst.firstName = 'Bob')
FILTER ALL(connection IN connections
           WHERE connection.creationDate >= ZONED_DATETIME('2020-01-01T00:00:00Z'))
RETURN p

Önemli

Bazı ANY SHORTEST sorgu şekilleri için, Graph şu anda yol seçiminden önce ifade düzeyinde MATCH ... WHERE bir koşul uygulayabilir. Bu sınırlama çözülene kadar, yol uygunluğu için satır içi önlemler ve seçim sonrası filtreleme için ayrı FILTER bir ifade kullanın. Daha fazla bilgi için bkz . Geçerli sınırlamalar.

Değişken uzunluklu desenleri kullanma

Değişken uzunluklu desenler, yinelenen desen belirtimleri yazmadan farklı uzunluklarda yollar bulmanıza olanak sağlayan güçlü yapılardır. Bunlar hiyerarşiler, sosyal ağlar ve en uygun yol uzunluğunun önceden bilinmediği diğer yapıların çapraz geçişi için gereklidir.

Sınırlanmış değişken uzunluklu desenler

Birçok yaygın grafik sorgusu aynı kenar deseninin birden çok kez yinelenmesi gerekir. Aşağıdaki gibi ayrıntılı desenler yazmak yerine:

(:Person)-[:knows]->(:Person)-[:knows]->(:Person)-[:knows]->(:Person)

Daha kısa değişken uzunluklu söz dizimini kullanabilirsiniz:

(:Person)-[:knows]->{3}(:Person)

, {3} kenar deseninin -[:knows]-> tam olarak üç kez yinelenmesi gerektiğini belirtir.

Esnek yineleme aralıkları: Daha fazla esneklik için yineleme için hem alt sınır hem de üst sınır belirtebilirsiniz:

(:Person)-[:knows]->{1, 3}(:Person)

Bu düzen, tek bir sorguda doğrudan arkadaşları, arkadaş arkadaşlarını ve arkadaş arkadaş arkadaşlarını bulur.

Uyarı

Alt sınır da sıfır olabilir. Sıfır atlama eşleşmesi kenar içermez ve her iki uç nokta düğüm deseninin aynı düğümle eşleşmesini gerektirir.

Örnek:

(p1:Person)-[:knows]->{0,1}(p2:Person)

Bu desen, her iki kişiyi hem p1 zıplamada hem de p2 sıfır atlamada eşleştirir ve bir zıplamada bağlı çiftlerle eşleşir.

Alt sınır belirtilmediğinde {,n}, varsayılan olarak sıfıra düşürülür.

Karmaşık değişken uzunlukta bileşimler: Değişken uzunluktaki desenler, aşağıdaki sorguda olduğu gibi daha büyük ve karmaşık desenlerin parçası olabilir:

MATCH (c1:Comment)<-[:likes]-(p1:Person)-[:knows]-(p2:Person)-[:likes]->(c2:Comment),
      (c1:Comment)<-[:replyOf]-{1,3}(m)-[:replyOf]->{1,3}(c2:Comment)
RETURN *
LIMIT 100

Bu desen, birbirini tanıyan insanların farklı yorumları beğendiği ve her yoruma bir ila üç replyOf kenarlık bir zincirle bir mesajın m bağlandığı çiftler bulur.

Değişken uzunluklu desen kenar değişkenlerini bağlama

Değişken uzunlukta bir kenar deseni bağladığınızda, kenar değişkeninin değeri ve türü başvuru bağlamı bağlı olarak değişir. Bu davranışı anlamak, değişken uzunluklu eşleşmelerin doğru işlenmesi için çok önemlidir:

İki başvuru derecesi:

  • Değişken uzunluklu desenin içinde: Graf kenar değişkenleri, eşleşen yol boyunca her bir kenara bağlanır ("tekil başvuru derecesi" olarak da adlandırılır)
  • Değişken uzunluklu desenin dışında: Graf kenar değişkenleri, eşleşen yol boyunca tüm kenarların sırasına bağlanır ("grup başvuru derecesi" olarak da adlandırılır)

Her iki bağlamı da gösteren örnek:

MATCH (:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}()
RETURN e[0]
LIMIT 100

Uç değişkeninin e değerlendirmesi iki bağlamda gerçekleşir:

  • DeyimindeMATCH: Sorgu, 2000 yılından bu yana her arkadaşlığın kurulduğu arkadaş arkadaş zincirlerini bulur. Desen eşleştirme sırasında, her aday kenar için kenar deseni koşulu e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z") bir kez değerlendirilir. Bu bağlamda, e tek bir kenar başvuru değerine bağlıdır.

  • deyimindeRETURN: Burada, e bir (grup) uç başvuru değerlerinin eşlenen zincirde gerçekleşen sırasına göre listesine bağlıdır. sonucu e[0] , eşleşen her zincirdeki ilk kenar başvuru değeridir.

Yatay toplamada değişken uzunlukta desen kenar değişkenleri:

Değişken uzunlukta desen eşleştirmesiyle sınırlanan kenar değişkenleri, değişken uzunluklu desenin dışındaki grup listeleridir ve bu nedenle yatay toplamada kullanılabilirler.

MATCH (a:Person)-[e:knows WHERE e.creationDate >= ZONED_DATETIME("2000-01-01T00:00:00Z")]->{1,3}(b)
RETURN a, b, size(e) AS num_edges
LIMIT 100

Daha fazla bilgi için bkz. Toplu fonksiyonlar.

İlişkisiz değişken uzunluklu desenler

Maksimum yol uzunluğu bilinmediğinde sınırsız bir nicelikçi kullanın:

-- Two or more edges
TRAIL (:Person)-[:knows]->{2,}(:Person)

ve *+ kısayollar sıfır veya daha fazla ve bir veya daha fazla tekrarı belirtir:

-- Zero or more edges
ACYCLIC (:Person)-[:knows]->*(:Person)

-- One or more edges
SIMPLE (:Person)-[:knows]->+(:Person)

Varsayılan ALL WALK kombinasyona sahip sınırsız bir desen reddedilir çünkü döngüler sonsuz sayıda eşleşen yol üretebilir. Yolu kenar veya düğüm benzersizliğiyle sınırlamak için , SIMPLE, veya ACYCLIC kullanınTRAIL. Bu modlar sonlandırmayı garanti eder, ancak büyük bir grafik yine de çok sayıda yol üretebilir.

Önemli

Sınırsız ANY SHORTEST WALKbir yol için desteklenen tek kullanımlar PATH_LENGTH(path) ve yanında, . path IS NULL Grafik bu şekilde tam yolu ortaya koymaz. Sonlu bir üst sınır kullanın veya , SIMPLE, ya ACYCLIC da TRAILyolu geri vermek veya başka şekilde kullanmak için kullanın.