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.
GQL (Graph Sorgu Dili), graf veritabanları için ISO standartlaştırılmış sorgu dilidir. Microsoft Fabric'te graf verilerini sorgulamak, analiz etmek ve grafla verimli bir şekilde çalışmak için GQL kullanın.
SQL'i standartlaştıran ISO çalışma grubu GQL geliştirir. Sonuç olarak, GQL ifadeler, koşul ve veri türleri dahil olmak üzere SQL ile birçok kavramı paylaşır. SQL deneyiminiz varsa bu bilgilerin çoğunu GQL'ye uygulayabilirsiniz.
Bu makale, grafikte GQL için kapsamlı bir başvuru sağlar. Aşağıdakileri kapsar:
- Temel kavramlar: Graf veri yapıları, desenler ve sorgu temelleri
-
Temel deyimler:
MATCH,FILTER,LET,ORDER BY,LIMIT, veRETURN - Veri türleri ve ifadeler: Değer türleri, işleçler ve yerleşik işlevler
- Gelişmiş teknikler: Çok deyimli oluşturma, değişken kapsam belirleme ve toplama stratejileri
Uyarı
GQL için resmi Uluslararası Standart ISO/IEC 39075 Bilgi Teknolojisi - Veritabanı Dilleri - GQL'dir.
Tam dil başvurusu yerine görev odaklı rehberlik arıyorsanız, nasıl yapılır kılavuzlarına bakın:
- Ortak GQL sorguları yazma : komşular, çok atlamalı geçiş, paylaşılan bağlantılar ve varlık varlığı denetimleri
- Grafik verilerini filtreleme ve toplama — FİlTRE, WHERE, GROUP BY ve toplama işlevleri
- Çok atlamalı desenler, yol modları, değişken yeniden kullanımı ve İSTEĞE BAĞLı KAÇINCI gibi grafik deseni sorguları yazma
- GQL sorgu performansını iyileştirme — filtreleme stratejisi, çapraz geçiş sınırları ve anahtar kısıtlama önerileri
Önkoşullar
Başlamadan önce şu kavramları bildiğinizden emin olun:
- Basik veritabanlarını anlama - İlişkisel (SQL), NoSQL veya grafik gibi herhangi bir veritabanı sistemiyle ilgili deneyim yararlı olur.
- Grafik kavramları - Bağlı verilerdeki düğümleri, kenarları ve ilişkileri anlama.
- Sorgu temelleri - Filtreleme, sıralama ve toplama gibi temel sorgu kavramları hakkında bilgi.
Önerilen arka plan:
- SQL veya openCypher dilleri deneyimi, GQL söz dizimini öğrenmeyi kolaylaştırır (bunlar GQL'nin kökleridir).
- Veri modellemeyi tanıma, grafik şeması tasarımına yardımcı olur.
- Graf verileri için özel kullanım örneğinizi anlama.
Neye ihtiyacınız var:
- Sorgu özelliklerine sahip bir grafik çalışma alanına erişim.
- Örnek veriler veya sosyal ağ örneklerimizle çalışmaya istekli olma.
- Sorgu yazmak için temel metin düzenleyicisi.
Tip
Grafik veritabanlarını kullanmaya yeni başladıysanız, bu kılavuza devam etmeden önce graf veri modellerine genel bakış ile başlayın.
GQL'i özel kılan şey
GQL özellikle graf verileri için tasarlanmıştır. Bu tasarım, bağlı bilgilerle çalışmayı doğal ve sezgisel hale getirir.
GQL, ilişkileri ifade etmek için tablo birleşimlerini kullanan SQL'in aksine görsel graf desenlerini kullanır. Bu desenler varlıkların bağlanma şeklini doğrudan yansıtarak sorguların daha kolay okunmasını ve daha kolay akıl yürütmesini sağlar.
1999'da doğmuş kişileri ve arkadaşlarını (birbirini bilen kişiler) bulmak istediğinizi varsayalım. GQL, görsel graf deseni kullanarak bu koşulu şu şekilde ifade eder:
MATCH (person:Person)-[:knows]-(friend:Person)
WHERE person.birthday < 19990101
AND friend.birthday < 19990101
RETURN person.firstName || ' ' || person.lastName AS person_name,
friend.firstName || ' ' || friend.lastName AS friend_name
Bu sorgu, her ikisi de 1999'da doğmuş olan arkadaşları (birbirini bilen kişiler) bulur. Desen (person:Person)-[:knows]-(friend:Person) , aradığınız ilişki yapısını görsel olarak gösterir; verilerinizin diyagramını çizmeye çok benzer.
GQL ile ilgili temel bilgiler
Sorgulara girmeden önce, GQL'nin temelini oluşturan şu temel kavramları anlayın:
- Grafikler verilerinizi düğümler (varlıklar) ve kenarlar (ilişkiler) olarak depolar ve bunların her birinde etiketler ve özellikler bulunur.
- Graf türleri şemalar gibi davranır ve grafiğinizde hangi düğümlerin ve kenarların bulunabileceğini tanımlar.
- Kısıtlamalar , graf türlerinin veri bütünlüğünü zorlamak için graflara uyguladığı diğer kurallar ve kısıtlamalardır.
-
Sorgular, verileri işlemek ve
MATCHsonuçları göstermek için ,FILTERve gibiRETURNdeyimleri kullanır. - Desenler , sezgisel görsel söz dizimini kullanarak bulmak istediğiniz grafik yapılarını açıklar.
- İfadeler , SQL ifadelerine benzer şekilde verileriniz üzerinde hesaplamalar ve karşılaştırmalar yapar.
- Koşul, sorgular içindeki sonuçları filtreleyen boole değeri ifadeleridir.
- Değer türleri , işleyebileceğiniz ve depolayabileceğiniz değer türlerini tanımlar.
Grafik verilerini anlama
GQL ile etkili bir şekilde çalışmak için graf verilerinin nasıl yapılandırıldığını anlamanız gerekir. Bu temel, daha iyi sorgular yazmanıza ve verilerinizi etkili bir şekilde modellemenize yardımcı olur.
Düğümler ve kenarlar: yapı taşları
GQL'de etiketli özellik graflarıyla çalışırsınız. Graf iki tür öğeden oluşur:
Düğümler genellikle sisteminizdeki varlıkları (kişiler, kuruluşlar, gönderiler veya ürünler gibi) temsil eder. Bunlar, etki alanınızda bulunan bağımsız nesnelerdir. Bazen düğüm köşelerini de çağırırsınız.
Kenarlar varlıklar arasındaki ilişkileri temsil eder ("fiiller") - varlıklarınızın nasıl bağlanıp etkileşime geçtiğini gösterir.
Örneğin, insanlar birbirini tanır (:knows), belirli bölgelerde faaliyet gösteren organizasyonlar (:operates), veya ürün satın alan müşteriler (:purchased).
Bazen kenar ilişkilerini de çağırırsınız.
Her grafik öğesi şu özelliklere sahiptir:
- Benzersiz olarak tanımlayan bir iç kimlik
-
Bir veya daha fazla etiket - veya
Persongibiknowsaçıklayıcı adlar. Grafikte kenarlar her zaman tam olarak bir etikete sahiptir. -
Özellikler - öğesiyle ilgili verileri depolayan ad-değer çiftleri (veya gibi
firstName: "Alice"birthday: "19730108").
Grafikler nasıl yapılandırılır?
Her kenar tam olarak iki düğüme bağlanır: kaynak ve hedef. Bu bağlantı grafiğin yapısını oluşturur ve varlıkların birbiriyle ilişkisini gösterir. Kenarların yönü önemlidir- başka Person birinin followsPerson yönlendirilmiş bir ilişki oluşturduğu kişi.
Uyarı
graph şu anda dolaylı olmayan kenarları desteklememektedir.
Grafikte desteklenen özellik grafikleri her zaman iyi biçimlendirilmiş olur, yani her kenar iki geçerli düğümü bağlar. Grafikte bir kenar görürseniz, her iki uç noktası da aynı grafikte bulunur.
Graf modelleri ve grafik türleri
Graf modeli, grafın yapısını açıklar. Uygulama etki alanınız için bir veritabanı şeması gibi davranır. Graf modelleri şunları tanımlar:
- Hangi düğümlerin ve kenarların bulunabileceği
- Hangi etiketlere ve özelliklere sahip olabilirler?
- Düğümler ve kenarlar nasıl bağlanır?
Graf modelleri ayrıca kısıtlamalar, özellikle de her düğümü benzersiz olarak tanımlayan özellikleri belirten düğüm anahtarı kısıtlamaları aracılığıyla veri bütünlüğünü güvence altına alır.
Uyarı
Grafik modellerini GQL standart söz dizimlerini kullanarak belirtebilirsiniz. Bu örnekte bunlara grafik türleri adı verilir.
Pratik bir örnek: sosyal ağ
Bu belge boyunca, bir sosyal ağ örneği GQL kavramlarını gösterir. Bu etki alanını anlamak, örnekleri izlemenize ve kendi verilerinize benzer desenler uygulamanıza yardımcı olur.
Uyarı
Sosyal ağ örneği, GDC (Graph Veri Konseyi) tarafından yayımlanan LDBC SNB'sinden (LDBC Sosyal Ağ Karşılaştırması) türetilmiştir. Daha fazla bilgi için bkz. "LDBC Sosyal Ağ Karşılaştırması".
Sosyal ağ varlıkları
Sosyal ağımız, etki alanının varlıklarını temsil eden şu ana düğüm türlerini içerir:
kişilerin adları, doğum günleri ve cinsiyetleri gibi kişisel bilgileri vardır. Şehirlerde yaşarlar ve sosyal bağlantılar oluştururlar.
Yerler coğrafi hiyerarşi oluşturur:
- "New York" veya "Londra" gibi şehirler
- "Birleşik Devletler" veya "Birleşik Krallık" gibi Countries/regions
- "Kuzey Amerika" veya "Avrupa" gibi kıtalar
İnsanların zaman geçirdiği kuruluşlar:
- İnsanların eğitim gördüğü üniversiteler
- kişilerin çalıştığı şirketler
İçerik ve tartışmalar:
- Gönderi içeren başlıklara sahip forumlar
- İçerik, dil ve isteğe bağlı görüntüler içeren gönderiler
- Gönderileri veya diğer yorumları yanıtlayan açıklamalar
- İçeriği kategorilere ayıran ve ilgi alanlarını temsil eden etiketler
Her şey nasıl bağlanır?
Varlıklar arasındaki bağlantılar ağı ilginç hale getirir:
- İnsanlar birbirlerini tanır (arkadaşlıklar,
:knows). - İnsanlar şirketlerde (
:workAt) veya üniversitelerde (:studyAt) çalışır. - Kişiler gönderiler ve yorumlar (
:hasCreator) oluşturur. - Gönderileri ve yorumları (
:likes) seven kişiler. - Gönderiler, forumlar ve yorumlar etiketlere (
:hasTag) sahip olabilir. - Kişilerin belirli etiketlerle ( ) ilgi alanları vardır
:hasInterest. - Forumlarda gönderiler (
:containerOf) bulunur ve üyeleri (:hasMember) ve moderatörleri (:hasModerator).
Graf kenarları etki alanı ilişkilerini temsil eder. Bu zengin ağ ilginç sorgular ve analizler için birçok fırsat oluşturur.
İlk GQL sorgularınız
Grafla ilgili temel bilgileri anladığınıza göre GQL kullanarak graf verilerini sorgulamayı görelim. Bu örnekler basitten karmaşıka doğru derlenip GQL'nin yaklaşımının grafik sorgularını nasıl sezgisel ve güçlü hale getirdiğini gösterir.
Basit bir başlangıç: tüm kişileri bulma
Mümkün olan en temel sorguyla başlayın. Grafikteki tüm kişilerin:Person adlarını (ad, soyadı) bulun.
MATCH (p:Person)
RETURN p.firstName, p.lastName
Bu sorgu aşağıdaki gibi çalışır:
-
MATCHetiketliPersontüm düğümleri bulur. -
RETURNadlarını ve soyadlarını gösterir.
Filtreleme ekleme: belirli kişileri bulma
Şimdi belirli özelliklere sahip kişileri bulun. Bu durumda, Alice adlı herkesi bulun ve adlarını ve doğum günlerini gösterin.
MATCH (p:Person)
FILTER p.firstName = 'Annemarie'
RETURN p.firstName, p.lastName, p.birthday
Bu sorgu aşağıdaki gibi çalışır:
-
MATCHKişi etiketli tüm düğümleri (p) bulur. -
FILTERadı Alice olan düğümler (p). -
RETURNadlarını, soyadını ve doğum gününü gösterir.
Temel sorgu yapısı
Temel GQL sorgularının tümü tutarlı bir desen izler: verileri bulmak, filtrelemek ve döndürmek için birlikte çalışan deyim dizisi.
Çoğu sorgu, grafikte desen bulmakla başlar MATCH ve çıktıyı belirtmek için sona RETURN erer.
İşte birbirini tanıyan ve aynı doğum gününü paylaşan çiftleri bulan basit bir sorgu, ardından bu arkadaş çiftlerinin toplam sayısını döndürüyor.
MATCH (n:Person)-[:knows]-(m:Person)
FILTER n.birthday = m.birthday
RETURN count(*) AS same_age_friends
Bu sorgu aşağıdaki gibi çalışır:
-
MATCHbirbirini bilen tüm düğüm çiftleriniPersonbulur. -
FILTERyalnızca her iki kişinin de doğum gününün aynı olduğu çiftleri tutar. -
RETURNbu tür arkadaş çiftlerinin sayısını sayar.
Tip
Ayrıca bir yan tümcesi ekleyerek WHERE doğrudan bir desenin parçası olarak filtreleme gerçekleştirebilirsiniz. Örneğin, MATCH (n:Person WHERE n.age > 23) yalnızca özelliği 23'ten büyük olan Person düğümleri eşleştirirage.
GQL, C stili // çizgi açıklamalarını, SQL stili -- çizgi açıklamalarını ve C stili /* */ blok açıklamalarını destekler.
Yaygın ifadeler
-
MATCH: Aranan grafik desenini belirler—burada ilgilendiğiniz verinin yapısını tanımlarsınız. -
LET: Eşleşen verilere dayalı yeni değişkenler veya hesaplanan değerler atar—sonuca türetilmiş sütunlar ekler. -
FILTER: Koşullar uygulayarak sonuçları daraltır—kriterleri karşılamayan satırları kaldırır. -
ORDER BY: Filtrelenen verileri sıralar—çıktıyı bir veya daha fazla alana göre düzenlemeye yardımcı olur. -
OFFSETveLIMIT: Geri dönen satır sayısını kısıtlayın—sayfa oluşturma veya üst-k sorguları için faydalıdır. -
RETURN: Son çıktıyı belirtir—sonuç kümesine hangi verilerin dahil edilmesini sağlar ve toplama işlemi gerçekleştirir.
Deyimler birlikte nasıl çalışır?
GQL ifadeleri bir boru hattı oluşturur ve her ifadenin bir önceki ifadenin çıktısını işler. Bu ardışık yürütme, sorguların kolayca okunmasını ve hata ayıklamasını sağlar çünkü uygulama sırası okuma sırasıyla eşleşir.
Önemli noktalar:
- Cümleler etkili bir şekilde sıralı olarak yürütülür.
- Her ifade veriyi dönüştürür ve bir sonrakine iletir.
- Bu işlem, karmaşık sorguları basitleştiren net, öngörülebilir bir veri akışı oluşturur.
Önemli
Graf, performansı en üst düzeye çıkarmak için deyimlerin yürütülmesini yeniden sıralayabilir ve tek tek deyimleri paralel olarak çalıştırabilir. Bu iyileştirmeler sonuçların doğruluğunu etkilemez.
Deyim oluşturma örneği
Aşağıdaki GQL sorgusu, adlarında "Air" olan şirketlerde çalışan ilk 10 kişiyi bulur, onları tam isimlerine göre ayırır ve tam isimleriyle birlikte şirket adlarını geri getirir.
-- Data flows: Match → Let → Filter → Order → Limit → Return
MATCH (p:Person)-[:workAt]->(c:Company) -- Input: unit table, Output: (p, c) table
LET fullName = p.firstName || ' ' || p.lastName -- Input: (p, c) table, Output: (p, c, fullName) table
FILTER c.name CONTAINS 'Air' -- Input: (p, c, fullName) table, Output: filtered table
ORDER BY fullName -- Input: filtered table, Output: sorted table
LIMIT 10 -- Input: sorted table, Output: top 10 rows table
RETURN fullName, c.name AS companyName -- Input: top 10 rows table
-- Output: projected (fullName, companyName) result table
Bu sorgu aşağıdaki gibi çalışır:
-
MATCHadında "Air" olan şirketlerde çalışan kişileri bulur. -
LETad ve aile adlarını birleştirerek tam adlar oluşturur. -
FILTERyalnızca Contoso çalışanlarını tutar. -
ORDER BYtam ada göre sıralar. -
LIMITilk 10 sonucu alır. -
RETURNadları ve şirket konumlarını döndürür.
Değişkenler verilerinizi birbirine bağlar
Önceki örneklerde , pve c gibi fullNamedeğişkenler deyimler arasında veri taşır. Bir değişken adını yeniden kullandığınızda, GQL otomatik olarak aynı verilere başvurduğundan emin olur ve güçlü birleştirme koşulları oluşturur. Değişkenler bazen bağlama değişkenleri olarak da adlandırılır.
Değişkenleri farklı şekillerde kategorilere ayırabilirsiniz:
Bağlama kaynağına göre:
- Desen değişkenleri - eşleşen grafik desenlerine bağlı
- Normal değişkenler - diğer dil yapılarına bağlı
Desen değişkeni türleri:
-
Öğe değişkenleri - grafik öğesi başvuru değerlerine bağlama
- Düğüm değişkenleri - tek tek düğümlere bağlama
- Kenar değişkenleri - tek tek kenarlara bağlama
- Yol değişkenleri - eşleşen yolları temsil eden yol değerlerine bağlama
Başvuru derecelerine göre:
- Tekil değişkenler - desenlerden tek tek öğe başvuru değerlerine bağlama
- Grup değişkenleri - değişken uzunluklu desenlerden öğe başvuru değerleri listelerine bağlama (bkz . Gelişmiş Toplama Teknikleri)
Yürütme sonuçları ve sonuçları
Bir sorgu çalıştırdığınızda, aşağıdakilerden oluşan bir yürütme sonucu elde edersiniz:
- Deyiminizdeki verileri içeren
RETURN. - Sorgunun başarılı olup olmadığını gösteren durum bilgileri.
Sonuç tabloları
Sonuç tablosu (varsa) sorgu yürütmenin gerçek sonucudur.
Sonuç tablosu, sütunlarının adı ve türü, sonuçları görüntülemek için kullanılacak tercih edilen sütun adı dizisi, tablonun sıralı olup olmadığı ve gerçek satırların kendisi hakkında bilgi içerir.
Uyarı
Yürütme başarısız olursa, yürütme sonucuna sonuç tablosu eklenmez.
Durum bilgileri
Sorgu yürütme sırasında, işlem hatalar veya uyarılar gibi dikkat çekici çeşitli koşulları algılar. Her koşul, yürütme sonucunun durum bilgilerine bir durum nesnesi tarafından kaydedilir.
Durum bilgileri birincil durum nesnesi ve diğer durum nesnelerinin (muhtemelen boş) bir listesinden oluşur. Birincil durum nesnesi her zaman var olur ve sorgu yürütmenin başarılı mı yoksa başarısız mı olduğunu gösterir.
Her durum nesnesi, kaydedilen koşulu tanımlayan beş basamaklı bir durum kodu (GQLSTATUS olarak adlandırılır) ve bunu açıklayan bir ileti içerir.
Başarı durum kodları:
| GQLSTATUS | Message | Ne zaman |
|---|---|---|
| 00000 | not: başarılı tamamlama | En az bir satırla başarı |
| 00001 | not: başarılı tamamlama - atlanmış sonuç | Tablo olmadan başarı (şu anda kullanılmayan) |
| 02000 | not: veri yok | Sıfır satırla başarı |
Diğer durum kodları, sorgu yürütme işleminin algıladığınız diğer hataları veya uyarıları gösterir.
Önemli
Uygulama kodunda, belirli koşulları test etmek için her zaman durum kodlarına güvenin. Durum kodlarının kararlı olması garanti edilir ve genel anlamları gelecekte değişmez. Bir durum kodu için bildirilen somut ileti gelecekte sorguya bağlı olarak veya hatta aynı sorgunun yürütmeleri arasında değişeebileceği için iletilerin içeriğini test etmeyin.
Ayrıca, durum nesneleri temel alınan bir neden durum nesnesi ve kaydedilen koşulu karakterize eden daha fazla bilgi içeren bir tanılama kaydı içerebilir.
Temel kavramlar ve deyimler
Bu bölüm, etkili GQL sorguları yazmak için ihtiyacınız olan temel yapı taşları kapsar. Her kavram pratik sorgu yazma becerilerine yöneliktir.
Graf desenleri: yapıyı bulma
Graf desenleri, GQL sorgularının kalbidir. Aradığınız veri yapısını bulmak istediğiniz ilişkilere benzeyen sezgisel, görsel söz dizimi kullanarak açıklamanıza olanak sağlar.
Basit desenler:
Temel ilişki desenleriyle başlayın:
-- Find direct friendships
(p:Person)-[:knows]->(f:Person)
-- Find people working at any company
(p:Person)-[:workAt]->(c:Company)
-- Find cities in any country/region
(ci:City)-[:isPartOf]->(co:Country)
Belirli verilerle desenler:
-- Find who works at Microsoft specifically
(p:Person)-[:workAt]->(c:Company)
WHERE p.firstName = 'Annemarie'
-- Find friends who are both young
(p:Person)-[:knows]->(f:Person)
WHERE p.birthday > 19950101 AND f.birthday > 19950101
Esnek varlık seçimi için etiket ifadeleri:
(:Person|Company)-[:isLocatedIn]->(p:City|Country) -- OR with |
(:Place&City) -- AND with &
(:Person&!Company) -- NOT with !
Uyarı
Düğümler birden çok etikete sahip olabilir, ancak birden çok etikete sahip kenar türleri henüz desteklenmiyor.
Etiket ifadeleri, farklı düğüm türlerini tek bir düzende eşleştirmenize olanak sağlayarak sorgularınızı daha esnek hale getirir.
Değişken yeniden kullanımı güçlü birleşimler oluşturur:
-- Find coworkers: people who work at the same company
(c:Company)<-[:workAt]-(x:Person)-[:knows]-(y:Person)-[:workAt]->(c)
Değişkenin c yeniden kullanılması, her iki kişinin de aynı şirkette çalışmasını sağlar ve otomatik birleştirme kısıtlaması oluşturur. Bu desen, "aynı varlık" ilişkilerini ifade etmek için kullanılan bir anahtar desendir.
Önemli
Kritik içgörü: Desenlerde değişken yeniden kullanımı yapısal kısıtlamalar oluşturur. "Aynı şirkette çalışan arkadaşlar" veya "aynı şehirdeki insanlar" gibi karmaşık graf ilişkilerini ifade etmek için bu tekniği kullanın.
WHERE ile desen düzeyi filtreleme:
-- Filter during pattern matching (more efficient)
(p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.id > 1000)
-- Filter edges during matching
(p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
Sınırlanmış değişken uzunluklu desenler:
(:Person)-[:knows]->{1,3}(:Person) -- Friends up to 3 degrees away
Dolaşmayı denetlemek için yol modları:
Yol modları, değişken uzunlukta geçiş sırasında sorgu altyapısının yinelenen öğeleri nasıl işlediğini denetler:
| Yol modu | Açıklama |
|---|---|
WALK |
Yinelenen düğümlere ve kenarlara izin verir. Geçişte kısıtlama yok. |
TRAIL |
Yinelenen kenar yok, ancak düğümler yinelenebilir. Bu, varsayılan yol modudur. |
SIMPLE |
Yinelenen düğüm yok (ilk ve son düğüm eşit olabilir hariç). |
ACYCLIC |
Yinelenen düğüm yok, bu da yoldaki herhangi bir döngüyü engelliyor. |
Graf geçişi sırasında döngüleri önlemek için desenleri kullanın TRAIL ve her kenarın en fazla bir kez ziyaret edildiğinden emin olun:
-- Find paths without visiting the same :knows edge twice
MATCH TRAIL (src:Person)-[:knows]->{1,4}(dst:Person)
WHERE src.firstName = 'Alice' AND dst.firstName = 'Bob'
RETURN count(*) AS num_connections
-- Find acyclic paths in social networks
MATCH TRAIL (p:Person)-[e:knows]->{,3}(celebrity:Person)
RETURN
p.firstName || ' ' || p.lastName AS person_name,
celebrity.firstName || ' ' || celebrity.lastName AS celebrity_name,
count(e) AS distance
LIMIT 1000
Hiçbir düğümün iki kez ziyaret edildiğinden emin olmanız gerektiğinde kullanın ACYCLIC :
-- Find paths where no person appears more than once
MATCH ACYCLIC (src:Person)-[:knows]->{1,4}(dst:Person)
WHERE src.firstName = 'Alice'
RETURN dst.firstName, dst.lastName
LIMIT 100
Değişken uzunlukta kenar bağlaması:
Değişken uzunluklu desenlerde kenar değişkenleri bağlama göre farklı bilgiler yakalar:
-- Edge variable 'e' binds to a single edge for each result row
MATCH (p:Person)-[e:knows]->(friend:Person)
RETURN p.firstName, e.creationDate, friend.firstName -- e refers to one specific relationship
LIMIT 1000
-- Edge variable 'e' binds to a group list of all edges in the path
MATCH (p:Person)-[e:knows]->{2,4}(friend:Person)
RETURN
p.firstName || ' ' || p.lastName AS person_name,
friend.firstName || ' ' || friend.lastName AS friend_name,
-- e is a list
size(e) AS num_edges
LIMIT 1000
Bu ayrım, uç değişkenlerini doğru kullanmak için çok önemlidir.
Birden çok ilişki içeren karmaşık desenler:
MATCH (p:Person), (p)-[:workAt]->(c:Company), (p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, p.lastName, c.name AS company_name, city.name AS city_name
LIMIT 1000
Bu düzen hem iş yeri hem de ikametgahlarıyla birlikte kişileri bulur ve bir kişinin birden çok başka varlık ile nasıl bağlantı kuracaklarını gösterir.
Çekirdek deyimleri
GQL, grafik verilerinizi adım adım işlemek için birlikte çalışan belirli deyim türleri sağlar. Bu deyimleri anlamak, etkili sorgular oluşturmak için gereklidir.
MATCH açıklama
Syntax:
MATCH <graph pattern>, <graph pattern>, ... [ WHERE <predicate> ]
deyimi MATCH giriş verilerini alır ve grafik desenlerini bulur. Giriş değişkenlerini desen değişkenleriyle birleştirir ve tüm eşleşen birleşimleri çıkışlar.
Giriş ve çıkış değişkenleri:
-- Input: unit table (no columns, one row)
-- Pattern variables: p, c
-- Output: table with (p, c) columns for each person-company match
MATCH (p:Person)-[:workAt]->(c:Company)
WHERE kullanarak deyim düzeyi filtreleme:
-- Filter pattern matches
MATCH (p:Person)-[:workAt]->(c:Company) WHERE p.lastName = c.name
kullanarak WHEREtüm eşleşmeleri filtreleyebilirsiniz. Bu yaklaşım ayrı FILTER bir deyimden kaçınıyor.
Giriş değişkenlerini kullanarak birleştirme:
MATCH İlk deyim olmadığında, giriş verilerini desen eşleşmeleriyle birleştirir:
...
-- Input: table with 'targetCompany' column
-- Implicit join: targetCompany (equality join)
-- Output: table with (targetCompany, p, r) columns
MATCH (p:Person)-[r:workAt]->(targetCompany)
Önemli
Graph temel ve tam doğrusal deyim bileşimini (zincirleme MATCH, LET, FILTER, RETURNve diğer çekirdek deyimleri) destekler. , , UNION DISTINCTEXCEPTve INTERSECT gibi OTHERWISEişlemleri ayarlama henüz desteklenmiyor. Daha fazla bilgi için geçerli sınırlamalarla ilgili makaleye bakın.
Anahtar birleştirme davranışları:
Veri birleştirmeyi nasıl MATCH işler:
- Değişken eşitliği: Giriş değişkenleri, eşitlik eşleştirmesi kullanarak desen değişkenleriyle birleşir
-
İç birleşim: Desen eşleşmeleri olmayan giriş satırları atılır. Sol dış birleşim davranışı için kullanın
OPTIONAL MATCH. -
Filtreleme sırası: Desen eşleştirme tamamlandıktan sonra deyim düzeyi
WHEREfiltreler - Desen bağlantısı: Doğru birleştirme için birden çok desenin en az bir değişken paylaşması gerekir
- Performans: Paylaşılan değişkenler verimli birleştirme kısıtlamaları oluşturur
Önemli
Kısıtlama: Bu MATCH deyim ilk deyim değilse, en az bir giriş değişkeni bir desen değişkeniyle birleştirilmelidir. Birden çok desenin ortak bir değişkeni olmalıdır.
Birden çok desen paylaşılan değişkenler gerektirir:
-- Shared variable 'p' joins the two patterns
-- Output: people with both workplace and residence data
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
OPTIONAL MATCH açıklama
Syntax:
OPTIONAL MATCH <graph pattern> [ WHERE <predicate> ]
OPTIONAL MATCH gibi MATCH çalışır ancak sol dış birleşim semantiği kullanır. Desen bir giriş satırı için eşleşme bulursa, sorgu satırı atmak yerine eşleşmeyen değişkenlerin değerleriyle NULL korur.
Example:
-- Find all people and, if available, their workplace
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company_name
Herhangi bir şirkette çalışmayan kişiler, için NULLile company_name sonuçlarda görünmeye devam ediyor.
Tip
SQL'e OPTIONAL MATCHbenzer şekilde belirli bir ilişkisi olmayan varlıkları eklemek istediğinizde kullanınLEFT JOIN.
LET açıklama
Syntax:
LET <variable> = <expression>, <variable> = <expression>, ...
deyimi LET hesaplanan değişkenler oluşturur ve sorgu işlem hattınızda veri dönüştürmeyi etkinleştirir.
Temel değişken oluşturma:
MATCH (p:Person)
LET fullName = p.firstName || ' ' || p.lastName
RETURN *
LIMIT 1000
Karmaşık hesaplamalar:
MATCH (p:Person)
LET adjustedAge = 2000 - (p.birthday / 10000),
fullProfile = p.firstName || ' ' || p.lastName || ' (' || p.gender || ')'
RETURN *
LIMIT 1000
Önemli davranışlar:
- Sorgu altyapısı her giriş satırı için ifadeleri değerlendirir.
- Sonuçlar çıkış tablosunda yeni sütunlara dönüşür.
- Değişkenler yalnızca önceki deyimlerdeki mevcut değişkenlere başvurabilir.
- Sorgu altyapısı, bir
LETdeyimdeki birden çok atamayı paralel olarak değerlendirir (çapraz başvuru yoktur).
FILTER açıklama
Syntax:
FILTER [ WHERE ] <predicate>
deyimi, FILTER sorgu işlem hattınızda hangi verilerin devam ettiği üzerinde hassas denetim sağlar.
Temel filtreleme:
MATCH (p:Person)
FILTER p.birthday < 19980101 AND p.gender = 'female'
RETURN *
Karmaşık mantıksal koşullar:
MATCH (p:Person)
FILTER (p.gender = 'male' AND p.birthday < 19940101)
OR (p.gender = 'female' AND p.birthday < 19990101)
OR p.browserUsed = 'Edge'
RETURN *
Null kullanan filtreleme desenleri:
Null değerleri güvenli bir şekilde işlemek için şu desenleri kullanın:
-
Değerleri denetleyin:
p.firstName IS NOT NULL- bir ad var -
Verileri doğrulama:
p.id > 0- geçerli kimlik -
Eksik verileri işleme:
NOT coalesce(p.locationIP, '10.x.x.x') STARTS WITH '10.x.x.x'- yerel ağdan bağlanmadı -
Koşulları birleştirme: Karmaşık mantık için açık null denetimlerle kullanma
AND/OR
Dikkat
Null değerler içeren koşulların, bu satırları filtreleyen değerini döndürdüğünü UNKNOWNunutmayın. Null-kapsayıcı mantığa ihtiyacınız olduğunda açık IS NULL denetimler kullanın.
ORDER BY açıklama
Syntax:
ORDER BY <expression> [ ASC | DESC ], <expression> [ ASC | DESC ], ...
Hesaplanan ifadelerle çok düzeyli sıralama:
MATCH (p:Person)
RETURN *
ORDER BY p.firstName DESC, -- Primary: by first name (Z-A)
p.birthday ASC, -- Secondary: by age (oldest first)
p.id DESC -- Tertiary: by ID (highest first)
Sıralamada null işleme:
ORDER BY coalesce(p.gender, 'not specified') DESC -- Treat NULL as 'not specified'
Sıralama davranışı ayrıntıları:
Nasıl ORDER BY çalıştığını anlama:
- Sorgu altyapısı her satır için ifadeleri değerlendirir, ardından sonuçlar satır sırasını belirler.
- Birden çok sıralama anahtarı hiyerarşik sıralama (birincil, ikincil, üçüncül vb.) oluşturur.
-
NULLkarşılaştırmalarda her zaman en küçük değerdir. -
ASC(artan) varsayılan düzendir ve açıkça belirtmenizDESCgerekir (azalan). - Yalnızca depolanan özelliklere göre değil, hesaplanan değerlere göre sıralayabilirsiniz.
Dikkat
Yalnızca aşağıdaki deyim, oluşturulan sıralama düzenini ORDER BY görebilir.
Bu nedenle, ORDER BY ardından RETURN * gelen sıralı bir sonuç üretmez.
Karşılaştırmak:
MATCH (a:Person)-[r:knows]->(b:Person)
LET aName = a.firstName || ' ' || a.lastName
LET bName = b.firstName || ' ' || b.lastName
ORDER BY r.creationDate DESC
/* intermediary result _IS_ guaranteed to be ordered here */
RETURN aName, bName, r.creationDate AS since
/* final result _IS_ _NOT_ guaranteed to be ordered here */
ile:
MATCH (a:Person)-[r:knows]->(b:Person)
LET aName = a.firstName || ' ' || a.lastName
LET bName = b.firstName || ' ' || b.lastName
/* intermediary result _IS_ _NOT_ guaranteed to be ordered here */
RETURN aName, bName, r.creationDate AS since
ORDER BY r.creationDate DESC
/* final result _IS_ guaranteed to be ordered here */
Bu farkın "Top-k" sorguları için hemen sonuçları vardır: LIMIT her zaman hedeflenen sıralama düzenini oluşturan deyimi izlemelidir ORDER BY .
OFFSET ve LIMIT deyimleri
Syntax:
OFFSET <offset> [ LIMIT <limit> ]
| LIMIT <limit>
Yaygın düzenler:
-- Basic top-N query
MATCH (p:Person)
RETURN *
ORDER BY p.id DESC
LIMIT 10 -- Top 10 by ID
Önemli
Tahmin edilebilir sayfalandırma sonuçları için her zaman sorgular arasında tutarlı satır sıralaması sağlamak için önce ORDER BY ve OFFSET kullanınLIMIT.
RETURN: temel sonuç projeksiyonu
Syntax:
RETURN [ DISTINCT ] <expression> [ AS <alias> ], <expression> [ AS <alias> ], ...
[ ORDER BY <expression> [ ASC | DESC ], <expression> [ ASC | DESC ], ... ]
[ OFFSET <offset> ]
[ LIMIT <limit> ]
deyimi, RETURN sonuç tablosunda hangi verilerin görüneceğini belirterek sorgunuzun son çıkışını oluşturur.
Temel çıkış:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName || ' ' || p.lastName AS name,
p.birthday,
c.name
Netlik için diğer adları kullanma:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName AS first_name,
p.lastName AS last_name,
c.name AS company_name
Sıralama ve üst k ile birleştirin:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName || ' ' || p.lastName AS name,
p.birthday AS birth_year,
c.name AS company
ORDER BY birth_year ASC
LIMIT 10
DISTINCT kullanarak yinelenen işleme:
-- Remove duplicate combinations
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN DISTINCT p.gender, p.browserUsed, p.birthday AS birth_year
ORDER BY p.gender, p.browserUsed, birth_year
Toplama ile birleştir:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT p) AS employee_count
RETURN ile GROUP BY: gruplandırılmış sonuç projeksiyonu
Syntax:
RETURN [ DISTINCT ] <expression> [ AS <alias> ], <expression> [ AS <alias> ], ...
GROUP BY <variable>, <variable>, ...
[ ORDER BY <expression> [ ASC | DESC ], <expression> [ ASC | DESC ], ... ]
[ OFFSET <offset> ]
[ LIMIT <limit> ]
Satırları paylaşılan değerlere ve her grup içindeki işlem toplama işlevlerine göre gruplandırmak için kullanın GROUP BY .
Toplama ile temel gruplandırma:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName,
count(*) AS employeeCount,
avg(p.birthday) AS avg_birth_year
GROUP BY companyName
ORDER BY employeeCount DESC
Çok sütunlu gruplandırma:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS person_count,
avg(p.birthday) AS avg_birth_year,
min(p.creationDate) AS first_joined,
max(p.id) AS highest_id
GROUP BY gender, browser
ORDER BY avg_birth_year DESC
LIMIT 10
Uyarı
Değişken uzunluktaki desenler üzerinde yatay toplama da dahil olmak üzere gelişmiş toplama teknikleri için bkz. Gelişmiş Toplama Teknikleri.
Veri türleri: değerlerle çalışma
GQL, grafiğinizde farklı türde bilgileri depolamak ve işlemek için zengin veri türlerini destekler.
Temel değer türleri
-
Sayılar:
INT64hesaplamalar ve ölçümler için ,UINT64,FLOAT64(aynı zamanda )DOUBLE -
Metin:
STRINGadlar, açıklamalar ve metin verileri için -
Mantık:
BOOLüç değerle: DOĞRU, YANLIŞ ve BİlİNMEYEN (null işleme için) -
Saat:
ZONED DATETIMEsaat dilimi bilgilerini içeren zaman damgaları için -
Koleksiyonlar:
LIST<T>aynı türdenTbirden fazla değer için,PATHgrafik dolaşımı sonuçları için -
Graf öğeleri:
NODEveEDGEgraf verilerine başvurmak için
Önemli
Özellik değeri türleri olarak belirli değer türlerini kullanamazsınız. Özellikle, grafik öğesi başvuru değerlerini içeren değerleri özellik değerleri (düğüm veya yol listeleri gibi) olarak kullanamazsınız.
Örnek değişmez değerler
42 -- Integer literal
"Hello, graph!" -- String literal
TRUE -- Boolean literal
ZONED_DATETIME('2024-01-15T10:30:00Z') -- DateTime with timezone literakl
[1, 2, 3] -- Literal list of integers
Kritik null işleme desenleri
-- Equality predicates with NULL always returns UNKNOWN
5 = NULL -- Evaluates to UNKNOWN (not FALSE!)
NULL = NULL -- Evaluates to UNKNOWN (not TRUE!)
-- Use IS NULL predicates for explicit null testing
p.nickname IS NULL -- Evaluates to TRUE if nickname is null
p.nickname IS NOT NULL -- Evaluates to TRUE if nickname has a value
-- Use the COALESCE function for null-safe value selection
coalesce(p.nickname, p.firstName, '???') -- Evaluates to first non-null value
Üç değerli mantık etkileri
-- In FILTER statements, only TRUE values pass through
FILTER p.birthday > 0 -- Removes rows where birthday is null or missing or zero
-- It's important to understand that NOT UNKNOWN = UNKNOWN
FILTER NOT (p.birthday > 0) -- Removes rows where birthday is null or missing or positive
-- Use explicit null handling for inclusive filtering
FILTER p.birthday < 19980101 OR p.birthday IS NULL -- Includes null birthdays
Dikkat
Üç değerli mantık, döndürürNULL = NULL, değil UNKNOWNanlamına gelirTRUE. Bu davranış filtrelemeyi ve birleştirmeleri etkiler. Her zaman null testler için kullanın IS NULL .
İfadeler: verileri dönüştürme ve çözümleme
İfadeler sorgularınızdaki verileri hesaplamanıza, karşılaştırmanıza ve dönüştürmenize olanak sağlar. BUNLAR SQL'deki ifadelere benzer ancak grafik verilerini işlemek için ek özelliklere sahiptir.
Ortak ifade türleri
p.birthday < 19980101 -- Birth year comparison
p.firstName || ' ' || p.lastName -- String concatenation
count(*) -- Aggregation
p.firstName IN ['Alice', 'Bob'] -- List membership
coalesce(p.firstName, p.lastName) -- Null handling
Karmaşık koşul bileşimi
-- Combine conditions with proper precedence
FILTER (p.birthday > 19560101 AND p.birthday < 20061231)
AND ((p.gender IN ['male', 'female']) OR (p.browserUsed IS NOT NULL))
-- Use parentheses for clarity and correctness
FILTER p.gender = 'female' AND (p.firstName STARTS WITH 'A' OR p.id > 1000)
Dize deseni eşleştirme
-- Pattern matching with different operators
p.locationIP CONTAINS '192.168' -- Substring search
p.firstName STARTS WITH 'John' -- Prefix matching
p.lastName ENDS WITH 'son' -- Suffix matching
-- Case-insensitive operations
upper(p.firstName) = 'ALICE' -- Convert to uppercase for comparison
Kategoriye göre yerleşik işlevler
GQL, farklı veri işleme gereksinimleri için şu işlev kategorilerini sağlar:
Verileri özetlemek için toplama işlevleri:
count()sum(),avg(), ,min(),max()Koşullu ifadeler:
CASE/WHEN/THEN/ELSE/ENDveNULLIF()koşullu mantık için. Örneğin:MATCH (p:Person) RETURN p.firstName, CASE WHEN p.birthday < 20000101 THEN 'Before 2000' ELSE '2000 or later' END AS era, NULLIF(p.gender, 'unknown') AS genderMetin işleme için dize işlevleri:
char_length(),upper(),lower(),trim()(yalnızca büyük/küçük harf eşlemesi için US ASCII)Grafik yapılarını analiz etmek için graf işlevleri:
nodes(),edges(),elements(), ,labels()path_length()Genel işlevler:
coalesce()null değerleri ve serileştirmeyi işlemek için .to_json_string()
Karmaşık ifadeler için işleç önceliği
- Özellik erişimi (
.) - Çarpma ve bölme (
*,/) - Toplama ve çıkarma (
+,-) - Karşılaştırma (
=,<>,<,>,<=,>=) - Mantıksal olumsuzlama (
NOT) - Mantıksal bağlantı (
AND) - Mantıksal dışlama ayrıştırma (
XOR) - Mantıksal ayrıştırma (
OR)
Yukarıdaki listede, daha düşük sayıya sahip bir işleç, daha yüksek sayıya sahip bir işleçten "daha sıkı bağlar".
Örneğin, NOT n.prop OR m.prop ancak (NOT n.prop) OR m.prop değil NOT (n.prop OR m.prop).
Tip
Önceliği açık hale getirmek için parantezleri kullanın. Gruplandırma temiz olduğunda karmaşık ifadelerin okunup hata ayıklaması daha kolaydır.
Gelişmiş sorgu teknikleri
Bu bölümde karmaşık ve verimli graf sorguları oluşturmaya yönelik gelişmiş desenler ve teknikler yer almaktadır. Bu desenler, güçlü analiz sorguları oluşturmanıza yardımcı olmak için temel deyim kullanımının ötesine geçer.
Karmaşık çok durumlu oluşturma
Önemli
Graph temel ve tam doğrusal deyim bileşimini destekler. , , UNION DISTINCTEXCEPTve INTERSECT gibi OTHERWISEişlemleri ayarlama henüz desteklenmiyor. Daha fazla bilgi için geçerli sınırlamalarla ilgili makaleye bakın.
Karmaşık sorguları verimli bir şekilde oluşturmanın anlaşılması, gelişmiş graf sorgulaması için çok önemlidir.
UNION ALL
İki veya daha fazla doğrusal sorgu bloğundaki sonuçları birleştirmek için kullanın UNION ALL :
-- Combine results from two separate pattern matches
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName AS name, c.name AS affiliation
UNION ALL
MATCH (p:Person)-[:studyAt]->(u:University)
RETURN p.firstName AS name, u.name AS affiliation
UNION ALL yinelenenler de dahil olmak üzere tüm satırları tutar.
UNION DISTINCT (yinelenenleri kaldırır) henüz desteklenmiyor.
Çok adımlı desen ilerlemesi
Karmaşık çözümlemeleri aşamalı olarak oluşturmak için birden çok deyimi zincirleyin:
-- Build complex analysis step by step
MATCH (company:Company)<-[:workAt]-(employee:Person)
LET companyName = company.name
MATCH (employee)-[:isLocatedIn]->(city:City)
FILTER employee.birthday < 19850101
LET cityName = city.name
RETURN companyName, cityName, avg(employee.birthday) AS avgBirthday, count(employee) AS employeeCount
GROUP BY companyName, cityName
ORDER BY avgBirthday DESC
Bu sorgu giderek karmaşıklık oluşturuyor: şirketleri, çalışanlarını, çalışan konumlarını bul, 1985'ten önce doğmuş çalışanları olan şirketleri filtreleyin, ortalama doğum gününü hesaplayın ve sonuçları özetleyip sıralayın.
Yatay toplama kullanımı
Yatay toplama, tek bir satırdaki değişken uzunluklu desenler üzerinde toplanır:
-- Find people and their minimum distance to people working at Microsoft
MATCH TRAIL (p:Person)-[e:knows]->{,5}(:Person)-[:workAt]->(:Company { name: 'Microsoft'})
LET p_name = p.lastName || ', ' || p.firstName
RETURN p_name, min(count(e)) AS minDistance
GROUP BY p_name
ORDER BY minDistance DESC
Uyarı
Bu sorgu henüz desteklenmiyor (bilinen sorun).
Değişken kapsamı ve gelişmiş akış denetimi
Değişkenler verileri sorgu deyimleri arasında bağlar ve karmaşık graf geçişlerini etkinleştirir. Gelişmiş kapsam kurallarını anlamak, karmaşık çok deyimli sorgular yazmanıza yardımcı olur.
Değişken bağlama ve kapsam desenleri
-- Variables flow forward through subsequent statements
MATCH (p:Person) -- Bind p
LET fullName = p.firstName || ' ' || p.lastName -- Bind concatenation of p.firstName and p.lastName as fullNume
FILTER fullName CONTAINS 'Smith' -- Filter for fullNames with “Smith” substring (p is still bound)
RETURN p.id, fullName -- Only return p.id and fullName (p is dropped from scope)
Deyimler arasında birleşimler için değişken yeniden kullanımı
-- Multi-statement joins using variable reuse
MATCH (p:Person)-[:workAt]->(:Company) -- Find people with jobs
MATCH (p)-[:isLocatedIn]->(:City) -- Same p: people with both job and residence
MATCH (p)-[:knows]->(friend:Person) -- Same p: their social connections
RETURN *
Kritik kapsam kuralları ve sınırlamaları
-- ✅ Backward references work
MATCH (p:Person)
LET adult = p.birthday < 20061231 -- Can reference p from previous statement
RETURN *
-- ❌ Forward references don't work
LET adult = p.birthday < 20061231 -- Error: p not yet defined
MATCH (p:Person)
RETURN *
-- ❌ Variables in same LET statement can't reference each other
MATCH (p:Person)
LET name = p.firstName || ' ' || p.lastName,
greeting = 'Hello, ' || name -- Error: name not visible yet
RETURN *
-- ✅ Use separate statements for dependent variables
MATCH (p:Person)
LET name = p.firstName || ' ' || p.lastName
LET greeting = 'Hello, ' || name -- Works: name now available
RETURN *
Karmaşık sorgularda değişken görünürlüğü
-- Variables remain visible until overridden or query ends
MATCH (p:Person) -- p available from here
LET gender = p.gender -- gender available from here
MATCH (p)-[:knows]->(e:Person) -- p still refers to original person
-- e is new variable for managed employee
RETURN p.firstName AS manager, e.firstName AS friend, gender
Dikkat
Grafik desenleri dışında, aynı deyimdeki değişkenler birbirine başvuramaz. Bağımlı değişken oluşturmak için ayrı deyimler kullanın.
Gelişmiş toplama teknikleri
GQL, gruplar ve koleksiyonlar arasında verileri analiz etmek için iki ayrı toplama türünü destekler: değişken uzunluklu desenler üzerinde dikey GROUP BY toplama ve yatay toplama.
GROUP BY ile dikey toplama
Dikey toplama (ile RETURNkapsananGROUP BY) satırları paylaşılan değerlere ve her grup içindeki işlem toplamlarına göre gruplandırıyor:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN c.name AS companyName,
count(*) AS employee_count,
avg(p.birthday) AS avg_birth_year
GROUP BY companyName
Bu yaklaşım, her grup içindeki tüm çalışanları toplayarak şirket başına bir sonuç satırı oluşturur.
Grup listesi değişkenleriyle yatay toplama
Yatay toplama, değişken uzunluktaki desenlere bağlı koleksiyonlar üzerinde toplamaları hesaplar. Değişken uzunlukta kenarlar kullandığınızda, kenar değişkeni eşleşen her yolda tüm kenarları tutan bir grup listesi değişkenine dönüşür:
-- Group list variable 'edges' enables horizontal aggregation
MATCH (p:Person)-[edges:knows]->{2,4}(friend:Person)
RETURN p.firstName || ' ' || p.lastName AS person_name,
friend.firstName || ' ' || friend.lastName AS friend_name,
size(edges) AS degrees_of_separation,
avg(edges.creationDate) AS avg_connection_age,
min(edges.creationDate) AS oldest_connection
Uyarı
Bu sorgu henüz desteklenmiyor (bilinen sorun).
Dikey ve yatay toplama arasındaki temel farklar şunlardır:
- Dikey toplama , satırlar arasında özetler veya satırları gruplandırıp her gruptaki satırlar arasında özetler.
- Yatay toplama , tek tek kenar koleksiyonları içindeki öğeleri özetler.
- Grup listesi değişkenleri yalnızca değişken uzunluklu kenar desenlerinden gelir.
Değişken uzunlukta kenar bağlama bağlamları
Kenar değişkenlerinin değişken uzunluklu desenlerde nasıl bağlandığını anlamak çok önemlidir:
Desen eşleştirme sırasında (tekil bağlam):
-- Edge variable 'e' refers to each individual edge during filtering
MATCH (p:Person)-[e:knows WHERE e.creationDate > zoned_datetime('2000-01-01T00:00:00Z')]->{2,4}(friend:Person)
-- 'e' is evaluated for each edge in the path during matching
RETURN *
Sonuç ifadelerinde (grup bağlamı):
-- Edge variable 'edges' becomes a list of all qualifying edges
MATCH (p:Person)-[e:knows]->{2,4}(friend:Person)
RETURN size(e) AS num_edges, -- Number of edges in path
e[0].creationDate AS first_edge, -- First edge in path
avg(e.creationDate) AS avg_age -- Horizontal aggregation
Uyarı
Bu sorgu henüz desteklenmiyor (bilinen sorun).
Dikey ve yatay toplamayı birleştirme
Her iki toplama türünü de karmaşık çözümleme desenlerinde birleştirebilirsiniz:
Uyarı
Bu sorgu henüz desteklenmiyor (bilinen sorun).
-- Find average connection age by city pairs
MATCH (p1:Person)-[:isLocatedIn]->(c1:City)
MATCH (p2:Person)-[:isLocatedIn]->(c2:City)
MATCH (p1)-[e:knows]->{1,3}(p2)
RETURN c1.name AS city1,
c2.name AS city2,
count(*) AS connection_paths, -- Vertical: count paths per city pair
avg(size(e)) AS avg_degrees, -- Horizontal then vertical: path lengths
avg(avg(e.creationDate)) AS avg_connection_age -- Horizontal then vertical: connection ages
GROUP BY city1, city2
Tip
Yatay toplama her zaman dikey toplamaya göre önceliklidir. Grup listesini normal listeye dönüştürmek için kullanın collect_list(edges).
Uyarı
Ayrıntılı toplama işlevi başvurusu için bkz. GQL ifadeleri ve işlevleri.
Hata işleme stratejileri
Yaygın hata desenlerini anlamak güçlü sorgular yazmanıza yardımcı olur.
Eksik verileri düzgün bir şekilde işleme:
MATCH (p:Person)
-- Use COALESCE for missing properties
LET displayName = coalesce(p.firstName, p.lastName, 'Unknown')
LET contact = coalesce(p.locationIP, p.browserUsed, 'No info')
RETURN *
Açık null denetimleri kullanın:
MATCH (p:Person)
-- Be explicit about null handling
FILTER p.id IS NOT NULL AND p.id > 0
-- Instead of just: FILTER p.id > 0
RETURN *
Ek bilgiler
GQLSTATUS kodları
Sorgu sonuçları bölümünde açıklandığı gibi GQL, yürütmenin başarılı veya olası başarısızlığıyla ilgili zengin durum bilgilerini raporlar. Listenin tamamı için GQL durum kodları başvurusuna bakın.
Ayrılmış sözcükler
GQL, değişkenler, özellik adları veya etiket adları gibi tanımlayıcılar olarak kullanamamanıza neden olan bazı anahtar sözcükleri ayırır. Listenin tamamı için GQL ayrılmış sözcükler başvurusuna bakın.
Tanımlayıcı olarak ayrılmış sözcükler kullanmanız gerekiyorsa, bunların arka uçlarıyla kaçış yapın: `match`, `return`.
Ayrılmış sözcüklerin kaçmasını önlemek için şu adlandırma kuralını kullanın:
- Tek sözcüklü tanımlayıcılar için alt çizgi ekleyin:
:Product_ - Çok sözcüklü tanımlayıcılar için camelCase veya PascalCase kullanın:
:MyEntity,:hasAttribute,textColor
Sonraki Adımlar
GQL ile ilgili temel bilgileri anladığınıza göre, önerilen öğrenme yolunuz aşağıdadır:
GQL becerilerinizi oluşturmaya devam edin
Yeni başlayanlar için:
- Hızlı başlangıcı deneyin - Pratik deneyim elde etmek için uygulamalı hızlı başlangıcı ve öğreticiyi izleyin
- Temel sorgular alıştırması - Bu kılavuzdaki örnekleri kendi verilerinizle deneyin
- Grafik desenlerini öğrenme - Kapsamlı desen söz dizimini keşfetme
- Veri türlerini keşfetme - GQL değerlerini ve değer türlerini anlama
Deneyimli kullanıcılar için:
- Gelişmiş ifadeler - GQL ifadelerini ve işlevlerini öğrenme
- Şema tasarımı - GQL grafik türlerini ve kısıtlamalarını öğrenme
- Veri türlerini keşfetme - GQL değerlerini ve değer türlerini anlama
Başvuru malzemeleri
Hızlı aramalar için bu başvuruları kullanışlı tutun:
- GQL hızlı başvurusu - Söz dizimi hızlı başvurusu
- GQL durum kodları - Tam hata kodu başvurusu
- GQL ayrılmış sözcükleri - Ayrılmış anahtar sözcüklerin tam listesi
Grafı keşfetme
Platformu öğrenin:
- Graf veri modelleri - Graf kavramlarını ve modellemeyi anlama
- Graf ve ilişkisel veritabanları - Doğru yaklaşımı seçme
- Microsoft Fabric ücretsiz deneyin - Uygulamalı deneyim edinin
- Uçtan uca öğreticiler - Eksiksiz öğrenme senaryoları
Dahil olun
- Geri bildirim paylaşma - Belge ve araçların geliştirilmesine yardımcı olun
- Topluluğa katılın - Diğer graf veritabanı uygulayıcılarıyla bağlantı kurun
- Güncel kalın - Yeni özellikler için grafik duyurularını takip edin
Tip
Yaparak öğrenmeyi tercih ediyorsanız hızlı başlangıç öğreticisiyle başlayın veya önce sorgu dilini öğrenmek istiyorsanız grafik desenlerini inceleyin.
İlgili içerik
Nasıl yapılır kılavuzları:
- Yaygın GQL sorguları yazma - Komşular, çok atlamalı, paylaşılan bağlantılar ve daha fazlası için pratik sorgu desenleri.
- Grafik verilerini filtreleme ve toplama - FİlTRE, WHERE, GROUP BY ve toplama işlevleri.
- Graf deseni sorguları yazma - Çok atlamalı geçiş, yol modları, değişken yeniden kullanımı ve isteğe bağlı eşleştirme.
- GQL sorgu performansını iyileştirme - Verimli GQL sorguları yazmak için en iyi yöntemler.
Önemli konularla ilgili diğer ayrıntılar:
- Sosyal ağ şeması örneği - Grafik şemasının çalışma örneğini tamamlayın.
- GQL grafik desenleri - Kapsamlı desen söz dizimi ve gelişmiş eşleştirme teknikleri.
- GQL ifadeleri ve işlevleri - Tüm ifade türleri ve yerleşik işlevler.
- GQL grafik türleri - Grafik türleri ve kısıtlamaları.
- GQL değerleri ve değer türleri - Tam tür sistem başvurusu ve değer işleme.
Hızlı başvurular:
- GQL kısaltılmış başvuru - Söz dizimi hızlı başvurusu.
- GQL durum kodları - Tam hata kodu başvurusu.
- GQL ayrılmış sözcükleri - Ayrılmış anahtar sözcüklerin tam listesi.
Grafik:
- graf veri modelleri - Grafik kavramlarını ve modellemeyi anlama.
- graf ve ilişkisel veritabanları - Farklılıklar ve bunların ne zaman kullanılacağı.
- Try Microsoft Fabric ücretsiz.
- Microsoft Fabric'da uçtan uca öğreticiler
.