กรองและรวมข้อมูลกราฟใน Microsoft Fabric

Note

คุณลักษณะนี้อยู่ในการแสดงตัวอย่างสาธารณะ การแสดงตัวอย่างนี้จะมีให้โดยไม่มีข้อตกลงระดับบริการ และไม่แนะนําสําหรับปริมาณงานการผลิต คุณลักษณะบางอย่างอาจไม่ได้รับการสนับสนุนหรืออาจมีความสามารถที่จํากัด สําหรับข้อมูลเพิ่มเติม โปรดดู ข้อกําหนดการใช้งานเพิ่มเติมสําหรับตัวอย่าง Microsoft Azure

การกรองจะจํากัดผลลัพธ์ให้แคบลงเป็นแถวที่สําคัญ การรวมจะสรุปแถวเหล่านั้นเป็นจํานวน ผลรวม และค่าเฉลี่ย บทความนี้แสดงวิธีการใช้เทคนิคทั้งสองในคิวรี GQL กับกราฟใน Microsoft Fabric

ตัวอย่างใช้ชุดข้อมูลตัวอย่างเครือข่ายสังคม สําหรับการอ้างอิงแบบเต็มของคําสั่งและนิพจน์ GQL โปรดดูคู่มือภาษา GQL

ข้อกำหนดเบื้องต้น

  • รายการกราฟที่มีข้อมูลที่โหลด หากคุณยังใหม่กับกราฟ ให้ทําบท ช่วยสอน ให้เสร็จก่อน
  • ความคุ้นเคยกับพื้นฐาน MATCH และ RETURN แบบสอบถาม ดูคู่มือภาษา GQL

กรองแถวด้วย FILTER

ใช้เพื่อ FILTER เก็บเฉพาะแถวที่ตรงตามเงื่อนไข วาง FILTER หลังจาก MATCH เพื่อจํากัดผลลัพธ์ที่ตรงกันให้แคบลง

แบบสอบถามต่อไปนี้จะส่งกลับผู้หญิงทั้งหมดพร้อมชื่อและวันเกิด

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

รวมหลายเงื่อนไขกับ AND และ OR. ตัวอย่างเช่น แบบสอบถามต่อไปนี้ส่งกลับชื่อของผู้หญิงทั้งหมดที่เกิดก่อนปี 1990:

MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName

Tip

เพื่อประสิทธิภาพที่ดีขึ้น ให้กรองระหว่างการจับคู่รูปแบบกับส่วนคําสั่งแบบอินไลน์WHEREแทนที่จะเป็นคําสั่งแยกต่างหากFILTER ดูตัวกรองระหว่างการจับคู่รูปแบบ

กรองระหว่างการจับคู่รูปแบบ

ส่วนคําสั่งแบบอินไลน์ WHERE ภายใน MATCH รูปแบบจะจํากัดโหนดและขอบที่ตรงกันก่อนที่จะสร้างผลลัพธ์ใดๆ วิธีการนี้มีประสิทธิภาพมากกว่าส่วนคําสั่งหลังการจับคู่ FILTER เนื่องจากกลไกจัดการแบบสอบถามจะตัดแถวก่อนหน้านี้

ตัวอย่างเช่น หากต้องการค้นหาผู้ที่เกิดก่อนปี 1994 พร้อมกับบริษัทที่พวกเขาทํางาน โดยจํากัดผลลัพธ์ไว้เฉพาะบริษัทที่มีชื่อขึ้นต้นด้วย 'A':

MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name

กรองคุณสมบัติขอบในลักษณะเดียวกัน ตัวอย่างเช่น หากต้องการส่งคืนเฉพาะผู้ที่เริ่มทํางานในบริษัทในปี 2000 หรือหลังจากนั้น ให้ทําดังนี้

MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom

หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับความแตกต่างด้านประสิทธิภาพระหว่างการกรองแบบอินไลน์และหลังการจับคู่ โปรดดู เพิ่มประสิทธิภาพการสืบค้น GQL ให้เหมาะสม

จัดการค่า Null ในตัวกรอง

GQL ใช้ตรรกะสามค่า: เพรดิเคตประเมินเป็น TRUE, FALSEหรือ UNKNOWN. เมื่อค่าคุณสมบัติเป็น null การเปรียบเทียบจะส่งกลับUNKNOWN FILTER ถือว่า UNKNOWN ไม่ตรงกัน ดังนั้นแถวจึงถูกแยกออก

ใช้ IS NULL และ IS NOT NULL เพื่อทดสอบค่า Null อย่างชัดเจน:

-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname

ใช้เพื่อ coalesce() แทนที่ค่าเริ่มต้นเมื่อคุณสมบัติอาจเป็น null

MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName

ข้อควรระวัง

NULL = NULL ประเมินเป็น UNKNOWNไม่ใช่ TRUE. ใช้เพื่อ IS NULL ทดสอบค่า Null เสมอ ไม่ใช่ความเท่าเทียมกัน

รวมผลลัพธ์ด้วย RETURN

ใช้ฟังก์ชันการรวมเพื่อ RETURN สรุปผลลัพธ์ของคุณ GQL รองรับ count(), sum(), , avg(), min()และ max().

ตัวอย่างเช่น เมื่อต้องการนับจํานวนคนทั้งหมดในกราฟ ให้ทําดังนี้

MATCH (p:Person)
RETURN count(*) AS totalPeople

ในการนับค่านิยมที่แตกต่างกัน เช่น จํานวนบริษัทที่แตกต่างกันที่จ้างคน:

MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount

จัดกลุ่มผลการค้นหาด้วย GROUP BY

ใช้เพื่อGROUP BYRETURNจัดกลุ่มแถวตามค่าที่ใช้ร่วมกันและคํานวณการรวมภายในแต่ละกลุ่ม การจัดกลุ่มนี้เทียบเท่ากับ GQL ของ SQL GROUP BY.

ตัวอย่างเช่น เมื่อต้องการนับพนักงานต่อบริษัท:

MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC

จัดกลุ่มตามหลายคอลัมน์และคํานวณการรวมหลายรายการพร้อมกัน ตัวอย่างเช่น แบ่งจํานวนบุคคลและช่วงวันเกิดตามเพศและเบราว์เซอร์ โดยส่งคืนชุดค่าผสมที่พบบ่อยที่สุด 10 ชุด:

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ต้องปรากฏในGROUP BY นิพจน์ที่ไม่ได้อยู่ใน GROUP BY ต้องใช้ฟังก์ชันการรวม

จัดเรียงและจํากัดผลลัพธ์แบบรวม

ใช้ ORDER BY และ LIMIT ร่วมกับ GROUP BY เพื่อค้นหาผลลัพธ์ N อันดับแรก

ตัวอย่างเช่น เมื่อต้องการค้นหาเมืองห้าอันดับแรกตามจํานวนผู้อยู่อาศัย:

MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5

สำคัญ

วางORDER BYก่อนLIMIT LIMIT นําไปใช้กับชุดผลลัพธ์ที่เรียงลําดับแล้วเสมอ

ใช้ CASE สําหรับค่าตามเงื่อนไขในผลลัพธ์

ใช้เพื่อCASE/ELSETHENWHEN//คํานวณค่าตามเงื่อนไขใน หรือLETRETURN

ตัวอย่างเช่น เมื่อต้องการจัดหมวดหมู่ผู้คนออกเป็นยุคตามปีเกิด:

MATCH (p:Person)
RETURN p.firstName,
       CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
            WHEN p.birthday < 20000101 THEN '1980–1999'
            ELSE '2000 or later'
       END AS era