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.
Filtreleme sonuçlarınızı önemli olan satırlara daraltıyor. Toplama, bu satırları sayılar, toplamlar ve ortalamalar halinde özetler. Bu makalede, GQL sorgularındaki her iki tekniğin de Microsoft Fabric'daki graflara nasıl uygulanacağı gösterilmektedir.
Örneklerde sosyal ağ örnek veri kümesi kullanılır. Sorgu akışı ve ifadelerinin uçtan uca açıklaması için GQL dil rehberine bakınız.
Bu makaleyi satır ve desen filtreleme, gruplanmış ve gruplanmamış toplama, toplu filtreler ve koşullu yönlendirme için kullanın. Çok sıçramlı desenler oluşturmak ve yol seçmek için bkz. Graf desen sorguları yaz. Uyarlamaya hazır iş görevleri için Yaygın GQL sorguları yazma bölümüne bakın.
Prerequisites
- Sosyal ağ örnek veri setinden oluşturulan, düğüm türleri, kenar tipleri ve özellikler sosyal ağ şeması örneğinde tanımlanan bir grafik öğesidir.
- Temel
MATCHveRETURNsorgular hakkında bilgi. Bkz. GQL dil kılavuzu.
FİlTRE ile satırları filtreleme
Yalnızca bir koşulu karşılayan satırları tutmak için kullanın FILTER . Eşleşen sonuçları daraltmak için FILTER ardından MATCH yerleştirin.
Aşağıdaki sorgu, tüm kadınların adını ve doğum gününü döndürür.
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Birden çok koşulu AND ve OR ile birleştirin. Örneğin, aşağıdaki sorgu 1990'da doğan tüm kadınların adlarını döndürür:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tavsiye
Koşul, hangi düğümün veya kenarın eşleşmeye katılabileceğini belirlediğinde satır içi WHERE ifade kullanın.
FILTER öğesini, koşul önceki bir ifade tarafından üretilen satır için geçerliyse kullanın. Koşulların yerleştirilmesi, en kısa yol sonuçlarını değiştirebilir; bkz. Koşulları yol seçiminden önce veya sonra yerleştirme.
Desen eşleştirme sırasında filtre uygulama
Bir MATCH desen içindeki satır WHERE içi cümleler, hangi düğümlerin ve kenarların eşleşmeye uygun olduğunu sınırlar. Sorgu optimizatoru, tarama sırasında eşdeğer önlemleri uygulayabilir, yani satır içi sözdizimi ayrı bir FILTER'dan daha hızlı değildir. Amaçlanan anlamanlamı ifade eden biçimi seçin.
Örneğin, 1994 yılından önce doğan kişileri ve çalıştıkları şirketi bulmak için sonuçları adı 'A' ile başlayan şirketlerle sınırlandırın:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Kenar özelliklerini aynı şekilde filtreleyin. Örneğin, yalnızca 2000 veya sonraki bir tarihte bir şirkette çalışmaya başlayan kişileri döndürmek için:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Hat içi ve maç sonrası filtreleme arasında seçim hakkındaki daha fazla bilgi için bakınız: GQL sorgu performansını optimize et.
Filtrelerde null değerleri işleme
GQL üç değerli mantık kullanır: koşullar TRUE, FALSE veya UNKNOWN olarak değerlendirilir. Özellik değeri null olduğunda karşılaştırmalar döndürür UNKNOWN.
FILTER, UNKNOWN eşleşmiyormuş gibi davranır, bu nedenle satır dışlanır.
Null değerlerini açıkça test etmek için IS NULL ve IS NOT NULL kullanın:
-- Only include people whose browser is known
MATCH (p:Person)
FILTER p.browserUsed IS NOT NULL
RETURN p.firstName, p.browserUsed
Bir özellik null olabileceğinde varsayılan değeri değiştirmek için kullanın coalesce() :
MATCH (p:Person)
RETURN p.firstName, coalesce(p.browserUsed, 'Unknown browser') AS browser
Caution
NULL = NULL
UNKNOWN olarak değerlendirilir, TRUE değil. Her zaman eşitlik kontrolü yerine null değerlerini test etmek için IS NULL kullanın.
RETURN ile sonuçları toplama
Sonuçlarınızı özetlemek için içindeki RETURN toplama işlevlerini kullanın. Grafik aşağıdaki toplam fonksiyonları destekler: COUNT, SUM, AVG, COLLECT_LISTCOLLECT_ONEMINMAXve .COLLECT_ELEMENTS
Örneğin, grafikteki tüm kişileri saymak için:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Kaç ayrı şirketin kişi çalıştırması gibi farklı değerleri saymak için:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Bir agregat için filtre girişi
Yalnızca o toplamanın girdisini filtrelemek için bir toplamanın ardından FILTER (WHERE predicate) ekleyin. Aynı RETURN alandaki diğer agregalar hâlâ tüm giriş satırlarını alır.
MATCH (p:Person)
RETURN count(*) AS allPeople,
count(*) FILTER (WHERE p.birthday < 19900101) AS peopleBornBefore1990
Koşulu sağlayan satırlardan en fazla bu kadarını kullanmak için LIMIT öğesini aggregate filtresinin içine ekleyin. Sorgu, toplamaya özgü sınırdan önce yüklemi uygular.
MATCH (p:Person)
RETURN count(*) FILTER (WHERE p.birthday < 19900101 LIMIT 100) AS sampleCount
Toplamaya özgü FILTER ve LIMIT, sorgunun geri kalanından satırları kaldırmaz. Satır akışını filtrelemek istediğinizde, bir FILTER ifadesi veya eşleşme düzeyinde bir WHERE yan tümcesi kullanın.
Değerleri topla
COLLECT_LIST, null değerler de dahil olmak üzere her giriş değeri için bir liste öğesi döndürmek amacıyla kullanılır. Kopyaları kaldırmak için ekle DISTINCT .
MATCH (p:Person)
RETURN collect_list(DISTINCT p.browserUsed) AS browsers
COLLECT_ONE bir sıfır olmayan giriş değeri döndürür. Seçilen değer deterministik değildir, bu yüzden sadece gruptan herhangi bir değer kabul edilebilir olduğunda kullanın.
COLLECT_ELEMENTS liste değerli girdileri kabul eder ve elemanlarını tek bir listeye birleştirir:
MATCH (p:Person)
RETURN collect_elements([p.firstName, p.lastName]) AS names
Sütunlar gruplanmadığında, girdi satırı olmayan bir toplu sorgu COLLECT_LIST ve COLLECT_ELEMENTS için boş bir liste, COLLECT_ONE için ise null döndürür.
GROUP BY ile sonuçları gruplandırma
Paylaşılan değerlere göre satırları gruplandırmak ve her grup içinde toplamları hesaplamak için GROUP BY içinde RETURN kullanın. Bu gruplandırma, SQL'in GROUP BYGQL eşdeğeridir.
Örneğin, şirket başına çalışanları saymak için:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
ORDER BY employeeCount DESC
Birden çok sütuna göre gruplandırma ve aynı anda birkaç toplama işlemi yapma. Örneğin, kişi sayısını ve doğum günü aralığını cinsiyete ve tarayıcıya göre ayırarak en yaygın 10 bileşimi döndürerek:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Note
RETURN içindeki tüm toplama olmayan ifadeler, GROUP BY içinde görünmelidir. içinde GROUP BY olmayan ifadeler bir toplama işlevi kullanmalıdır.
Toplanan sonuçları sıralama ve sınırlama
top-N sonuçlarını bulmak için ORDER BY ve LIMIT'i birlikte GROUP BY ile kullanın.
Örneğin, yerleşik kişi sayısına göre ilk beş şehri bulmak için:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityId = city.id, cityName = city.name
RETURN cityId, cityName, count(*) AS residentCount
GROUP BY cityId, cityName
ORDER BY residentCount DESC
LIMIT 5
Important
ORDER BY öğesini LIMIT önüne yerleştirin.
LIMIT her zaman zaten sıralanmış sonuç kümesi için geçerlidir.
Satırları koşullu ifadelerle yönlendirin
Her gelen satırı ilk eşleşen dala yönlendirmek için bir koşul ifadesi kullanın. Girdi, sadece bir toplama değil, önceki herhangi bir sorgu aşamasından gelebilir. Örneğin, aşağıdaki sorgu, çalışan sayıları hesaplandıktan sonra şirketleri kategorize eder:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyId = c.id, companyName = c.name
RETURN companyId, companyName, count(*) AS employeeCount
GROUP BY companyId, companyName
NEXT
WHEN employeeCount >= 100u THEN
RETURN companyId, companyName, employeeCount, 'Large' AS category
WHEN employeeCount >= 10u THEN
RETURN companyId, companyName, employeeCount, 'Medium' AS category
ELSE
RETURN companyId, companyName, employeeCount, 'Small' AS category
Dallar, sadece ifadeleri döndürmek yerine tam sorgu ifadeleri ve iç içe işlem işlemleri çalıştırabilir. Aşağıdaki örnek, farklı dal şekilleri üzerinden üç giriş satırı gönderir. Bir dal bir MATCH çalıştırır, biri UNION ALL ile iki agregayı birleştirip ardından sonuçlarını toplulaştırır ve yedek dal sabit bir değer döndürür:
FOR selector IN [1, 2, 3]
RETURN selector
NEXT
WHEN selector = 1 THEN
MATCH (:Person)-[:knows]->(:Person)
RETURN count(*) AS total, 'Knows edges' AS category
WHEN selector = 2 THEN {
MATCH (:Person)-[:workAt]->(:Company)
RETURN count(*) AS partialCount
UNION ALL
MATCH (:Person)-[:studyAt]->(:University)
RETURN count(*) AS partialCount
NEXT
RETURN sum(partialCount) AS total, 'Affiliation edges' AS category
}
ELSE
RETURN 0u AS total, 'No selected metric' AS category
Sorgu motoru, her satır için koşulları sırayla değerlendirir. Sadece ilk eşleşen şubeyi çalıştırır. Bir yüklem UNKNOWN olarak değerlendirilirse, değerlendirme sonraki dalla devam eder. Bir ELSE olmadan, bir WHEN dalıyla eşleşmeyen satırlar atlanır.
Koşullu ifadeler ifadelerden CASE farklıdır. Graph, eşitlik temelli değer seçimi için basit CASE <expression> WHEN <value> ifadeleri destekler. Aranan CASE WHEN <predicate> ifadeler desteklenmiyor. Daha fazla bilgi için Koşullu ifadeler sayfasına bakınız.