หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Note
คุณลักษณะนี้อยู่ในการแสดงตัวอย่างสาธารณะ การแสดงตัวอย่างนี้จะมีให้โดยไม่มีข้อตกลงระดับบริการ และไม่แนะนําสําหรับปริมาณงานการผลิต คุณลักษณะบางอย่างอาจไม่ได้รับการสนับสนุนหรืออาจมีความสามารถที่จํากัด สําหรับข้อมูลเพิ่มเติม โปรดดู ข้อกําหนดการใช้งานเพิ่มเติมสําหรับตัวอย่าง Microsoft Azure
บทความนี้แสดงรูปแบบคิวรี GQL ที่ใช้งานได้จริงสําหรับงานกราฟทั่วไปใน Microsoft Fabric: การค้นหาเพื่อนบ้าน การข้ามการเชื่อมต่อแบบมัลติฮอป การระบุการเชื่อมต่อที่ใช้ร่วมกัน การนับความสัมพันธ์ และการค้นหาเอนทิตีที่ไม่มีการเชื่อมต่อ
ตัวอย่างใช้ชุดข้อมูลตัวอย่างเครือข่ายสังคม สําหรับการอ้างอิงภาษาแบบเต็ม โปรดดูคู่มือภาษา GQL
ข้อกำหนดเบื้องต้น
- รายการกราฟที่มีข้อมูลที่โหลด หากคุณยังใหม่กับกราฟ ให้ทําบท ช่วยสอน ให้เสร็จก่อน
- ความคุ้นเคยกับพื้นฐาน
MATCHและRETURNแบบสอบถาม ดูคู่มือภาษา GQL
ค้นหาเพื่อนบ้านโดยตรง
ส่งคืนโหนดทั้งหมดที่เชื่อมต่อกับโหนดเริ่มต้นด้วยหนึ่งฮ็อป
ค้นหาทุกคนที่บุคคลใดบุคคลหนึ่งรู้จัก:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:knows]->(friend:Person)
RETURN friend.firstName, friend.lastName
ค้นหาบริษัททั้งหมดที่บุคคลนั้นทํางาน:
MATCH (p:Person WHERE p.firstName = 'Alice')-[:workAt]->(c:Company)
RETURN c.name, c.url
ค้นหาเพื่อนของเพื่อน (มัลติฮอป)
ใช้รูปแบบความยาวตัวแปรเพื่อ {min,max} สํารวจมากกว่าหนึ่งกระโดด
ค้นหาผู้คนที่อยู่ห่างออกไปสองกระโดด - เพื่อนของเพื่อนของอลิซที่อลิซไม่รู้จักโดยตรง:
MATCH (alice:Person WHERE alice.firstName = 'Alice')-[:knows]->{2,2}(fof:Person)
RETURN DISTINCT fof.firstName, fof.lastName
LIMIT 100
ค้นหาทุกคนที่สามารถเข้าถึงได้ภายในสามองศา:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,3}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
Tip
ตั้งค่าขอบเขตบนในการเคลื่อนที่แบบปรับความยาวได้เสมอ รูปแบบที่ไม่มีขอบเขตในกราฟขนาดใหญ่หรือหนาแน่นอาจถึงขีดจํากัดการหมดเวลาของคิวรี ดูข้อจํากัดปัจจุบัน
นับความสัมพันธ์ต่อเอนทิตี
ใช้ GROUP BY with count(*) เพื่อนับจํานวนความสัมพันธ์ที่แต่ละเอนทิตีมี
นับจํานวนเพื่อนที่แต่ละคนมี โดยเรียงลําดับจากมากไปน้อย:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
ORDER BY friendCount DESC
LIMIT 20
นับจํานวนพนักงานที่ทํางานในแต่ละบริษัท:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
ค้นหาการเชื่อมต่อที่แชร์
การนําตัวแปรกลับมาใช้ใหม่ในสองส่วนของรูปแบบจะสร้างข้อจํากัด "โหนดเดียวกัน" โดยปริยาย ใช้ข้อจํากัดนี้เพื่อค้นหาเอนทิตีที่เชื่อมต่อผ่านเอนทิตีที่สามที่ใช้ร่วมกัน
ค้นหาคู่ของคนที่รู้จักคนเดียวกัน:
MATCH (a:Person)-[:knows]->(mutual:Person)<-[:knows]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, mutual.firstName AS sharedContact
LIMIT 100
ค้นหาคู่คนที่ทํางานในบริษัทเดียวกัน:
MATCH (c:Company)<-[:workAt]-(a:Person), (c)<-[:workAt]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, c.name AS company
LIMIT 100
Tip
เงื่อนไขนี้ WHERE a.id < b.id ป้องกันไม่ให้คู่ที่ซ้ํากัน (อลิซ–บ็อบและบ็อบ–อลิซ) ปรากฏในผลลัพธ์
ค้นหาเอนทิตีที่ไม่มีความสัมพันธ์
ใช้ OPTIONAL MATCH ตามด้วยการตรวจสอบ Null เพื่อค้นหาโหนดที่ไม่มีความสัมพันธ์ที่ตรงกัน
ค้นหาคนที่ไม่ได้ทํางานในบริษัทใด ๆ :
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100
ค้นหาโพสต์ที่ไม่มีความคิดเห็น:
MATCH (post:Post)
OPTIONAL MATCH (comment:Comment)-[:replyOf]->(post)
FILTER comment IS NULL
RETURN post.id, post.content
LIMIT 100
ค้นหาเอนทิตีที่มีการเชื่อมต่อจํานวนมาก
รวม GROUP BY และ FILTER เพื่อระบุโหนดที่เชื่อมต่อกันสูง วิธีนี้มีประโยชน์สําหรับการค้นหาฮับหรือค่าผิดปกติ
ค้นหาผู้คนที่มีเพื่อนมากกว่า 10 คน:
MATCH (p:Person)-[:knows]->(friend:Person)
LET name = p.firstName || ' ' || p.lastName
RETURN name, count(*) AS friendCount
GROUP BY name
FILTER friendCount > 10
ORDER BY friendCount DESC
Note
FILTER หลังจาก GROUP BY ทํางานเหมือน HAVING ใน SQL กรองผลลัพธ์แบบรวม ไม่ใช่แต่ละแถว