หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
Note
คุณลักษณะนี้อยู่ในการแสดงตัวอย่างสาธารณะ การแสดงตัวอย่างนี้จะมีให้โดยไม่มีข้อตกลงระดับบริการ และไม่แนะนําสําหรับปริมาณงานการผลิต คุณลักษณะบางอย่างอาจไม่ได้รับการสนับสนุนหรืออาจมีความสามารถที่จํากัด สําหรับข้อมูลเพิ่มเติม โปรดดู ข้อกําหนดการใช้งานเพิ่มเติมสําหรับตัวอย่าง Microsoft Azure
การจับคู่รูปแบบกราฟช่วยให้คุณอธิบายโครงสร้างของข้อมูลที่คุณต้องการค้นหาโดยใช้ไวยากรณ์ที่ใช้งานง่าย แทนที่จะรวมตาราง คุณเขียนรูปแบบที่ดูเหมือนความสัมพันธ์ - โหนดที่เชื่อมต่อกันด้วยขอบ บทความนี้แสดงวิธีการเขียนแบบสอบถามรูปแบบ GQL สําหรับสถานการณ์ทั่วไปในกราฟใน Microsoft Fabric
ตัวอย่างใช้ชุดข้อมูลตัวอย่างเครือข่ายสังคม สําหรับการอ้างอิงไวยากรณ์รูปแบบแบบเต็ม โปรดดูรูปแบบกราฟ GQL
ข้อกำหนดเบื้องต้น
- รายการกราฟที่มีข้อมูลที่โหลด หากคุณยังใหม่กับกราฟ ให้ทําบท ช่วยสอน ให้เสร็จก่อน
- ความคุ้นเคยกับพื้นฐาน
MATCHและRETURNแบบสอบถาม ดูคู่มือภาษา GQL
จับคู่ความสัมพันธ์โดยตรง
รูปแบบพื้นฐานตรงกับประเภทโหนด ประเภทขอบเฉพาะ และประเภทโหนดอื่น ไวยากรณ์มีลักษณะเหมือนไดอะแกรมของความสัมพันธ์
ตัวอย่างเช่น หากต้องการค้นหาคนสูงสุด 100 คนที่จับคู่กับบริษัทที่พวกเขาทํางานอยู่:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name
LIMIT 100
ใช้รูปแบบขอบที่ไม่มีทิศทางเมื่อคุณไม่ทราบหรือไม่สนใจทิศทาง ตัวอย่างเช่น หากต้องการค้นหาคนรู้จักร่วมกันสูงสุด 100 คน โดยไม่คํานึงถึงว่าใครเป็นผู้ริเริ่มการเชื่อมต่อ:
MATCH (a:Person)-[:knows]-(b:Person)
RETURN a.firstName, b.firstName
LIMIT 100
Note
ขณะนี้กราฟไม่สนับสนุนการสร้างขอบที่ไม่มีทิศทาง แต่คุณสามารถสืบค้นขอบในทิศทางใดก็ได้โดยใช้ -[:label]- ไวยากรณ์
กรองรูปแบบด้วย WHERE แบบอินไลน์
วาง WHERE ภายในรูปแบบเพื่อกรองโหนดและขอบตามที่ตรงกัน วิธีนี้มีประสิทธิภาพมากกว่าการกรองหลังจากข้อเท็จจริง
ตัวอย่างเช่น หากต้องการค้นหาผู้ที่เกิดก่อนปี 1990 ที่ทํางานในบริษัทที่มีชื่อขึ้นต้นด้วย 'A' ให้ทําดังนี้
MATCH (p:Person WHERE p.birthday < 19900101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
กรองคุณสมบัติขอบเพื่อจํากัดความสัมพันธ์ที่ตรงกัน ตัวอย่างเช่น หากต้องการส่งคืนเฉพาะผู้ที่เริ่มทํางานในบริษัทในปี 2010 หรือหลังจากนั้น ให้ทําดังนี้
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2010]->(c:Company)
RETURN p.firstName, c.name, w.workFrom
จับคู่ความสัมพันธ์แบบหลายฮอป
ใช้รูปแบบความยาวตัวแปรเพื่อสํารวจหลายฮ็อปในนิพจน์เดียว ระบุจํานวนฮ็อพต่ําสุดและสูงสุดด้วย {min,max} ไวยากรณ์
ตัวอย่างเช่น หากต้องการค้นหาผู้คนที่สามารถเข้าถึงได้มากถึง 100 คนภายในสองถึงสี่องศาของมิตรภาพจากอลิซ:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{2,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
หากต้องการค้นหาการเชื่อมต่อทันทีและระดับที่สองมากถึง 100 รายการ (หนึ่งหรือสองฮ็อป) จาก Alice:
MATCH (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,2}(dst:Person)
RETURN DISTINCT dst.firstName, dst.lastName
LIMIT 100
ควบคุมการเคลื่อนที่ด้วยโหมดเส้นทาง
โดยค่าเริ่มต้น GQL จะใช้ TRAIL โหมด ซึ่งจะป้องกันไม่ให้ข้ามขอบเดียวกันมากกว่าหนึ่งครั้ง ใช้โหมดเส้นทางอย่างชัดเจนเมื่อคุณต้องการการรับประกันที่แตกต่างกัน
| โหมดเส้นทาง | พฤติกรรม | ใช้เมื่อ... |
|---|---|---|
WALK |
อนุญาตให้ใช้โหนดและขอบซ้ํา | คุณต้องการการเดินทางแบบดิบโดยไม่มีข้อจํากัด ไม่ค่อยจําเป็น มีประโยชน์เป็นหลักสําหรับการสืบค้นเชิงสํารวจ |
TRAIL |
ไม่มีขอบซ้ํา (ค่าเริ่มต้น) | คุณต้องการหลีกเลี่ยงการย้อนกลับความสัมพันธ์เดียวกัน แต่โหนดเดียวกันสามารถปรากฏผ่านความสัมพันธ์ที่แตกต่างกัน ทํางานได้ดีสําหรับคิวรีการสํารวจส่วนใหญ่ |
SIMPLE |
ไม่มีโหนดซ้ํา ยกเว้นเริ่มต้นและสิ้นสุด | คุณต้องการให้โหนดไม่ปรากฏมากกว่าหนึ่งครั้งตรงกลางของเส้นทาง แต่อนุญาตให้มีเส้นทางที่ปิดกลับไปยังจุดเริ่มต้น มีประโยชน์สําหรับการตรวจจับลูป |
ACYCLIC |
ไม่มีโหนดซ้ําเลย | คุณต้องรับประกันว่าไม่มีโหนดใดปรากฏที่ใดก็ได้ในเส้นทางมากกว่าหนึ่งครั้ง ใช้สําหรับลําดับชั้นที่เข้มงวด สายข้อมูล หรือการสํารวจใดๆ ที่การกลับมาดูโหนดอีกครั้งจะให้ผลลัพธ์ที่ไม่ถูกต้อง |
WALK เป็นโหมดที่อนุญาตมากที่สุดและ ACYCLIC เข้มงวดที่สุด
TRAIL เป็นค่าเริ่มต้นและทํางานได้ดีสําหรับคิวรีส่วนใหญ่ ใช้โหมดที่เข้มงวดมากขึ้นเฉพาะเมื่อกรณีการใช้งานของคุณต้องการเท่านั้น
เพื่อแสดงให้เห็นถึงความแตกต่าง ให้พิจารณาเส้นทางของ Alice → Bob → Carol → Bob:
- เดิน — อนุญาตให้มีเส้นทางนี้ โหนดและขอบสามารถทําซ้ําได้อย่างอิสระ
- TRAIL — อนุญาตให้มีเส้นทางนี้ บ็อบปรากฏสองครั้ง แต่แต่ละขอบที่ใช้เป็นความสัมพันธ์ที่แตกต่างกัน (อลิซ→บ็อบและแครอล→บ็อบเป็นขอบที่แตกต่างกัน) ดังนั้นจึงไม่มีขอบซ้ํากัน
- ง่าย — ปิดกั้นเส้นทางนี้ Bob ปรากฏมากกว่าหนึ่งครั้ง และ SIMPLE อนุญาตให้โหนดทําซ้ําได้ก็ต่อเมื่อเป็นทั้งจุดเริ่มต้นและจุดสิ้นสุดของเส้นทาง (รอบปิด) ที่นี่อลิซเป็นจุดเริ่มต้นและบ็อบคือจุดจบดังนั้นจึงไม่มีข้อยกเว้น
- ACYCLIC — ปิดกั้นเส้นทางนี้ บ็อบปรากฏตัวมากกว่าหนึ่งครั้งที่ใดก็ได้ในเส้นทาง
ตัวอย่างต่อไปนี้แสดงวิธีใช้เพื่อนับ TRAIL จํานวนเส้นทางที่แตกต่างกันที่นําไปสู่ผู้คน 100 คนแรกที่สามารถเข้าถึงได้ในเครือข่ายของ Alice ภายใน 4 hops:
MATCH TRAIL (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName, count(*) AS pathCount
LIMIT 100
ใช้เพื่อ ACYCLIC ส่งคืนได้ถึง 100 คนที่สามารถเข้าถึงได้จากอลิซภายในสี่กระโดด โดยที่แต่ละคนในเส้นทางนั้นไม่ซ้ํากัน:
MATCH ACYCLIC (src:Person WHERE src.firstName = 'Alice')-[:knows]->{1,4}(dst:Person)
RETURN dst.firstName, dst.lastName
LIMIT 100
Tip
สําหรับกราฟขนาดใหญ่ ให้ตั้งค่าขอบเขตบนในรูปแบบความยาวตัวแปรเสมอ ({1,4} แทนที่จะเป็น {1,}) การสํารวจแบบไม่จํากัดในกราฟหนาแน่นอาจถึงขีดจํากัดการหมดเวลาของคิวรี ดูข้อจํากัดปัจจุบัน
ใช้ตัวแปรซ้ําเพื่อแสดงเอนทิตีที่ใช้ร่วมกัน
การนําตัวแปรเดียวกันกลับมาใช้ใหม่ในสองส่วนของรูปแบบจะสร้างข้อจํากัดความเท่าเทียมกันโดยปริยาย - การอ้างอิงทั้งสองต้องตรงกับโหนดเดียวกัน เทคนิคนี้ช่วยให้คุณแสดง "ค้นหาเอนทิตีที่เชื่อมต่อผ่านเอนทิตีที่สามที่ใช้ร่วมกัน"
ตัวอย่างเช่น หากต้องการค้นหาคนที่รู้จักกันและทํางานในบริษัทเดียวกันได้ถึง 100 คู่ ให้ทําดังนี้
MATCH (c:Company)<-[:workAt]-(a:Person)-[:knows]-(b:Person)-[:workAt]->(c)
RETURN a.firstName, b.firstName, c.name
LIMIT 100
ตัวแป c รจะถูกนํามาใช้ซ้ําสําหรับทั้งสอง workAt เป้าหมาย ดังนั้นแบบสอบถามจะส่งกลับเฉพาะคู่ที่ทั้งสองคนรู้จักกัน และ ทํางานในบริษัทเดียวกัน
วิธีค้นหาผู้คนสูงสุด 100 คู่ที่ทั้งคู่ถูกใจโพสต์เดียวกัน
MATCH (a:Person)-[:likes]->(post:Post)<-[:likes]-(b:Person)
WHERE a.id < b.id
RETURN a.firstName, b.firstName, post.id
LIMIT 100
Tip
เงื่อนไขนี้ WHERE a.id < b.id ป้องกันไม่ให้คู่ที่ซ้ํากัน (อลิซ + บ็อบ และบ็อบ + อลิซ) ปรากฏในผลลัพธ์
รวมหลายรูปแบบ
แสดงรายการหลายรูปแบบในครั้งเดียว MATCHคั่นด้วยเครื่องหมายจุลภาค รูปแบบทั้งหมดต้องใช้ตัวแปรร่วมกันอย่างน้อยหนึ่งตัวเพื่อให้รวมกันได้อย่างถูกต้อง
ตัวอย่างเช่น หากต้องการค้นหาผู้คนสูงสุด 100 คน พร้อมกับทั้งที่ทํางานและเมืองที่พวกเขาอาศัยอยู่:
MATCH (p:Person)-[:workAt]->(c:Company),
(p)-[:isLocatedIn]->(city:City)
RETURN p.firstName, c.name AS company, city.name AS city
LIMIT 100
ตัวแปร p ที่ใช้ร่วมกันเชื่อมต่อทั้งสองรูปแบบ แต่ละแถวผลลัพธ์แสดงถึงบุคคลหนึ่งคนที่มีบริษัทและเมืองของตน
จับคู่ความสัมพันธ์ที่ไม่บังคับ
ใช้ OPTIONAL MATCH เมื่อความสัมพันธ์อาจไม่มีอยู่สําหรับทุกโหนด แถวที่ไม่มีการจับคู่จะถูกเก็บไว้ด้วย NULL ค่า คล้ายกับ SQL LEFT JOIN.
ตัวอย่างเช่น ส่งคืนบุคคลที่มีชื่อบริษัทได้สูงสุด 100 คน รวมถึงผู้ที่ไม่มีนายจ้าง (นั่นคือ ผู้ที่กลับมา NULL ในคอลัมน์บริษัท):
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
RETURN p.firstName, p.lastName, c.name AS company
LIMIT 100
ใช้ IS NULL After OPTIONAL MATCH เพื่อค้นหาคนที่ไม่ได้ทํางานในบริษัทใดๆ ได้สูงสุด 100 คน ดังนี้
MATCH (p:Person)
OPTIONAL MATCH (p)-[:workAt]->(c:Company)
FILTER c IS NULL
RETURN p.firstName, p.lastName
LIMIT 100