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.
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
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
- 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
Persongibiknowsaçı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"veyabirthday: "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.
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:
-
MATCHetiketli tüm düğümleri bulurPerson -
RETURNad 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:
-
MATCHKişi olarak etiketlenmiş tüm düğümleri (p) bulur -
FILTERAdı Alice olan düğümler (p) -
RETURNadı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:
-
MATCHbirbirini bilen tüm düğüm çiftleriniPersonbulur -
FILTERyalnızca her iki kişinin de aynı doğum gününe sahip olduğu çiftleri tutar -
RETURNbu 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. -
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, 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:
-
MATCH"Air" adında bulunan şirketlerde çalışan insanları bulur -
LETTam isimler ilk ve soyadları birleştirerek oluşturur -
FILTERsadece Contoso çalışanlarını tutar -
ORDER BYTam isimlere göre sıralamalar -
LIMITİlk 10 sonucu alır -
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
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 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
LETbirden ç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:
NULLKarşı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:
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
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:
- Özellik erişimi (
.) - Çarpma/Bölme (
*,/) - Toplama/Çıkarma (
+,-) - Karşılaştırma (
=,<>,<,>,<=,>=) - Mantıksal olumsuzlama (
NOT) - Mantıksal bağlantı (
AND) - 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:
- Hızlı başlangıcı deneyin - Pratik deneyim için uygulamalı öğreticimizi izleyin
- Temel sorgular alıştırması - Bu kılavuzdaki örnekleri kendi verilerinizle deneyin
- Grafik desenlerini öğrenme - Kapsamlı desen söz diziminde ustalaşın
- Veri türlerini keşfetme - GQL değerlerini ve değer türlerini anlama
Deneyimli kullanıcılar için:
- Gelişmiş ifadeler - Ana GQL ifadeleri ve işlevleri
- Ş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
Microsoft Fabric'i keşfedin
Platformu öğrenin:
- Graf veri modelleri - Graf kavramlarını ve modellemeyi anlama
- Graf ve ilişkisel veritabanları - Doğru yaklaşımı seçme
- Microsoft Fabric'i ücretsiz deneyin - Uygulamalı deneyim edinin
- Uçtan uca öğreticiler - Eksiksiz öğrenme senaryoları
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.
İlgili içerik
Önemli konularla ilgili diğer ayrıntılar:
- Sosyal ağ şeması örneği - Grafik şemasının tam çalışma örneği
- 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
Microsoft Fabric'te Graf:
- Graf veri modelleri - Graf kavramlarını ve modellemeyi anlama
- Graf ve ilişkisel veritabanları - Farklılıklar ve her birinin ne zaman kullanılacağı
- Microsoft Fabric'i ücretsiz deneyin
- Microsoft Fabric'de uçtan uca öğreticiler