Aracılığıyla paylaş


GQL dil kılavuzu

Uyarı

Bu özellik şu anda genel önizlemededir. Bu önizleme, hizmet düzeyi sözleşmesi olmadan sağlanır ve üretim iş yükleri için önerilmez. Bazı özellikler desteklenmiyor olabileceği gibi özellikleri sınırlandırılmış da olabilir. Daha fazla bilgi için bkz. Microsoft Azure Önizlemeleri için Ek Kullanım Koşulları.

GQL Graph Sorgu Dili, graf veritabanları için ISO standartlaştırılmış sorgu dilidir. Graf verilerini verimli bir şekilde sorgulamanıza ve bunlarla çalışmanıza yardımcı olur.

GQL, SQL'i standartlaştıran aynı ISO çalışma grubu tarafından geliştirilerek tutarlılık ve titizlik sağlanır. SQL'e aşinaysanız, GQL'de (ifadeler, önlemler, türler) birçok benzerlik bulacaksınız - bu da başlamayı kolaylaştırıyor. Bu kılavuz hem GQL ile ilgili temel bilgileri öğrenen yeni kişilere hem de gelişmiş teknikler ve kapsamlı başvuru bilgileri arayan deneyimli kullanıcılara hizmet eder.

Uyarı

GQL için resmi Uluslararası Standart ISO/IEC 39075 Bilgi Teknolojisi - Veritabanı Dilleri - GQL'dir.

Önkoşullar

GQL'ye girmeden önce şu kavramlara aşina olmanız gerekir:

  • Veritabanlarının temel anlayışı - İlişkisel (SQL), NoSQL veya grafik gibi herhangi bir veritabanı sistemiyle ilgili deneyim faydalıdır
  • 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 dilleriyle ilgili deneyim, GQL sözdizimini öğrenmeyi kolaylaştırır (bunlar GQL'nin kökleridir)
  • Veri modellemeyi tanıma, graf şeması tasarımına yardımcı olur
  • Graf verileri için özel kullanım örneğinizi anlama

İhtiyacınız olan şeyler:

  • Grafik özellikleriyle Microsoft Fabric'e 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, bağlı bilgilerle çalışmayı doğal ve sezgisel hale getirir.

SQL'in aksine, ilişkileri ifade etmek için tablo birleştirmelerine dayanırken, GQL görsel grafik desenleri kullanır; bu desenler varlıkların nasıl bağlantılı olduğunu doğrudan yansıtır; bu da sorguların okunmasını ve akıl yürütmesini kolaylaştırır.

Diyelim ki 1999'dan önce doğmuş insanları ve onların arkadaşlarını (birbirini tanıyanları) bulmak istiyorsunuz. GQL bunu görsel bir grafik deseni kullanarak nasıl ifade ediyor:

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 saklar, her biri etiket ve özelliklere sahip
  • Graf türleri şemalar gibi davranır ve grafiğinizde hangi düğümlerin ve kenarların bulunabileceğini tanımlar
  • Kısıtlamalar, grafik türlerinin verilerin bütünlüğünü sağlamak için grafiklere uyguladığı ek kurallar ve kısıtlamalardır
  • Sorgular, verileri işlemek ve MATCH sonuçları göstermek için , FILTERve gibi RETURNdeyimleri 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
  • Yüklemler, sorgular içinde sonuçları filtrelemek için kullanılan boolean değer 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. Düğümler bazen köşe olarak da adlandırılır.

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).
Kenarlar bazen ilişkiler olarak da adlandırılır.

Her grafik öğesi şu özelliklere sahiptir:

  • Benzersiz olarak tanımlayan bir iç kimlik
  • Bir veya daha fazla etiket; veya Persongibi knows açıklayıcı adlar. Microsoft Fabric'te grafik kenarlarının her zaman tam olarak tek bir etiketi vardır.
  • Özellikler—eleman hakkında veri depolayan isim-değer çiftleri (örneğin firstName: "Alice" veya 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şidir.

Uyarı

Microsoft Fabric'teki Graph şu anda yönlendirilmedik kenarları desteklemiyor.

Microsoft Fabric'te desteklenen özellik grafikleri her zaman iyi şekillendirilmiştir, yani her kenar iki geçerli düğümü birbirine bağlar. Grafikte bir kenar görürseniz, her iki uç noktası da aynı grafikte bulunur.

Graf modelleri ve grafik türleri

Microsoft Fabric'teki bir grafiğin yapısı, uygulama etki alanınız için veritabanı şeması gibi davranan graf modeliyle açıklanı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ğlanabilir?

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 modelleri GQL standart söz dizimi kullanılarak belirtilebilir ve bu durumda bunlara grafik türleri adı verilir.

Pratik bir örnek: sosyal ağ

Bu belgeler boyunca, GQL kavramlarını göstermek için bir sosyal ağ örneği kullanırız. Bu etki alanını anlamak, örnekleri izlemenize ve kendi verilerinize benzer desenler uygulamanıza yardımcı olur.

Sosyal ağ şemasını gösteren diyagram.

Uyarı

Sosyal ağ, GDC (Graph Veri Konseyi) tarafından yayımlanan LDBC SNB'sinden (LDBC Sosyal Ağ Karşılaştırması) türetilmiştir. Diğer ayrıntılar için "LDBC Sosyal Ağ Karşılaştırması" makalesine bakın.

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
  • "ABD" veya "Birleşik Krallık" gibi ülkeler/bölgeler
  • "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 birbirini tanır (arkadaşlıklar, :knows)
  • İnsanlar şirketlerde çalışıyor (:workAt) veya üniversitelerde okuyor (:studyAt)
  • İnsanlar gönderi ve yorum oluşturuyor (:hasCreator)
  • İnsanlar gönderileri ve yorumları beğeniyor (:likes)
  • Gönderiler, Forumlar, Yorumlar etiketlere sahip olabilir (:hasTag)
  • İnsanların belirli etiketlere ilgi duyması (:hasInterest)
  • Forumlarda gönderiler (:containerOf) bulunur ve üyeler (:hasMember) ile moderatörler () vardır (: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

En temel sorgulamayla başlayalım, grafikteki tüm kişilerin:Person isimlerini (isim, soyad) bulalım.

MATCH (p:Person)
RETURN p.firstName, p.lastName

Bu sorgu aşağıdaki şekilde yürütülür:

  1. MATCH etiketli tüm düğümleri bulur Person
  2. RETURN ad ve soyadlarını gösterir

Filtreleme ekleme: belirli kişileri bulma

Şimdi belirli özelliklere sahip insanları bulalım, bu durumda herkesin adı Alice ve isimlerini ve doğum günlerini gösterelim.

MATCH (p:Person)
FILTER p.firstName = 'Annemarie'
RETURN p.firstName, p.lastName, p.birthday

Bu sorgu aşağıdaki şekilde yürütülür:

  1. MATCH Kişi olarak etiketlenmiş tüm düğümleri (p) bulur
  2. FILTER Adı Alice olan düğümler (p)
  3. RETURN adı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 şekilde yürütülür:

  1. MATCH birbirini bilen tüm düğüm çiftlerini Person bulur
  2. FILTER yalnızca her iki kişinin de aynı doğum gününe sahip olduğu çiftleri tutar
  3. RETURN bu tür arkadaş çiftlerinin kaç tane olduğunu sayar

Tip

Filtreleme, yan tümcesi eklenerek WHERE doğrudan bir desenin parçası olarak da gerçekleştirilebilir. Örneğin, MATCH (n:Person WHERE n.age > 23) yalnızca özelliği 23'ten büyük olan Person düğümleri eşleştirecektirage.

Uyarı

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.
  • OFFSET ve LIMIT: 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, karmaşık sorguları basitleştiren net ve öngörülebilir bir veri akışı oluşturur.

Önemli

İç olarak, ifadeler yeniden düzenlenebilir ve bireysel ifadeler Microsoft Fabric tarafından paralel olarak çalıştırılıp performansı en üst düzeye çıkarabilir. Ancak bu, sonuçların doğruluğunu etkilemeyecektir.

Örnek

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 şekilde yürütülür:

  1. MATCH "Air" adında bulunan şirketlerde çalışan insanları bulur
  2. LET Tam isimler ilk ve soyadları birleştirerek oluşturur
  3. FILTER sadece Contoso çalışanlarını tutar
  4. ORDER BY Tam isimlere göre sıralamalar
  5. LIMIT İlk 10 sonucu alır
  6. RETURN Şirket isimleri ve konumları geri dönüyor

Değişkenler verilerinizi birbirine bağlar

Değişkenler (önceki örneklerde , pve c gibifullName) 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şkenler farklı şekillerde kategorilere ayırılabilir:

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 hatası durumunda, yürütme sonucuna sonuç tablosu dahil değildir.

Durum bilgileri

Sorgunun yürütülmesi sırasında çeşitli önemli koşullar (hatalar veya uyarılar gibi) algılandı. Bu tür her koşul, yürütme sonucunun durum bilgilerine bir durum nesnesi tarafından kaydedilir.

Durum bilgileri birincil durum nesnesi ve ek durum nesnelerinin (muhtemelen boş) bir listesinden oluşur. Birincil durum nesnesi her zaman vardır 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 5 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 sırasında algılanan 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. Mesajların içeriğini test etmeyin, çünkü bir durum kodu için bildirilen somut mesaj, sorguya bağlı olarak veya aynı sorgu yürütmeleri arasında gelecekte değişebilir.

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. Bulmak istediğiniz ilişkilere benzeyen sezgisel, görsel söz dizimini kullanarak aradığınız veri yapısını 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ı

Çoklu eleman etiketli grafik modelleri henüz desteklenmemektedir (bilinen sorun).

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. Bu teknik, "aynı şirkette çalışan arkadaşlar" veya "aynı şehirdeki insanlar" gibi karmaşık graf ilişkilerini ifade etme yöntemidir.

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

Döngüsüz geçiş için TRAIL desenleri:

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

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 graf desenlerini bulur, giriş değişkenlerini desen değişkenleriyle birleştirir ve eşleşen tüm birleşimleri çıkarır.

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 ile deyim düzeyi filtreleme:

-- Filter pattern matches
MATCH (p:Person)-[:workAt]->(c:Company) WHERE p.lastName = c.name

Tüm eşleşmeler kullanılarak filtrelenebilir WHEREve ayrı FILTER bir deyimden kaçınılabilir.

Giriş değişkenleriyle 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

Microsoft Fabric'teki graph henüz rastgele deyim oluşturma desteği sunmamaktadır. 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/sağ birleşim yok)
  • Filtreleme sırası: Desen eşleştirme tamamlandıktan sonra deyim düzeyi WHERE filtreler
  • 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 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)

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:

  • İfadeler her giriş satırı için değerlendirilir
  • Sonuçlar çıkış tablosunda yeni sütunlara dönüşür
  • Değişkenler yalnızca önceki deyimlerdeki mevcut değişkenlere başvurabilir
  • Birindeki LET birden çok atama paralel olarak değerlendirilir (ç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, '127.0.0.1') STARTS WITH '127.0.0' - 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:

  • İfade değerlendirmesi: İfadeler her satır için değerlendirilir, 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şturma
  • Null işleme: NULL Karşılaştırmalarda her zaman en küçük değer olarak kabul edilir
  • Varsayılan sıra: ASC (artan) varsayılandır, DESC (azalan) açıkça belirtilmelidir
  • Hesaplanan sıralama: Yalnızca depolanan özelliklere göre değil hesaplanan değerlere göre sıralayabilirsiniz

Dikkat

tarafından ORDER BY oluşturulan sıralama düzeni yalnızca hemen aşağıdaki deyim tarafından görülebilir. Bu nedenle, ORDER BY ardından RETURN * 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              */

Bunun "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 ile 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 uzunluklu 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, DOUBLE
  • Metin: STRING adlar, 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 DATETIME saat dilimi bilgilerini içeren zaman damgaları için
  • Koleksiyonlar: LIST<T> aynı türden Tbirden fazla değer için, PATH grafik dolaşımı sonuçları için
  • Graf öğeleri: NODE ve EDGE graf verilerine başvurmak için

Önemli

Bazı değer türleri, mülk değerleri türleri olarak desteklenmez. Özellikle, grafik elemanı referans değerlerini içeren tüm değerler (örneğin düğüm veya yol listeleri gibi) özellik değeri olarak kullanılamaz.

Ö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 verilerinin işlenmesi için ek özelliklere sahiptir.

Yaygın 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()
  • Metin işleme için dize işlevleri: char_length(), upper(), lower(), trim()
  • Graf işlevleri: nodes(), edges(), labels() grafik yapılarını analiz etmek için
  • Genel işlevler: coalesce() null değerleri düzgün bir şekilde işlemek için

Karmaşık ifadeler için işleç önceliği:

  1. Özellik erişimi (.)
  2. Çarpma/Bölme (*, /)
  3. Toplama/Çıkarma (+, -)
  4. Karşılaştırma (=, <>, <, >, <=, >=)
  5. Mantıksal olumsuzlama (NOT)
  6. Mantıksal bağlantı (AND)
  7. Mantıksal ayrıştırma (OR)

Yukarıdaki listede, daha düşük sayıya sahip bir operatör, daha yüksek numaraya sahip operatöre göre "daha sıkı bağlanır". Örnek: NOT n.prop OR m.prop ' (NOT n.prop) OR m.prop NOT (n.prop VEYA m.prop) değildir

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 deyimli oluşturma

Önemli

Microsoft Fabric'teki graph henüz rastgele deyim oluşturma desteği sunmamaktadır. 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.

Çok adımlı desen ilerlemesi:

-- 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 toplamanın kullanımı:

-- 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ştirmeler 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

Aynı deyimdeki değişkenler birbirine başvuramaz (grafik desenleri dışında). 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).

Önemli farklar:

  • 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:

-- 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

Uyarı

Bu sorgu henüz desteklenmiyor (bilinen sorun).

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:

Deneyimli kullanıcılar için:

Başvuru malzemeleri

Hızlı aramalar için bu başvuruları kullanışlı tutun:

Microsoft Fabric'i keşfedin

Platformu öğrenin:

Dahil olun

  • Geri bildirim paylaşın - Belgelerimizi ve araçlarımızı geliştirmeye 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 Microsoft Fabric duyurularını izleyin

Tip

Yaparak öğrenmeyi tercih ediyorsanız hızlı başlangıç öğreticisiyle başlayın veya önce sorgu dilinde ustalık yapmak istiyorsanız grafik desenlerini inceleyin.

Önemli konularla ilgili diğer ayrıntılar:

Hızlı başvurular:

Microsoft Fabric'te Graf: