นิพจน์ GQL เพรดิเคต และฟังก์ชัน

บทความนี้มีการอ้างอิงที่ครอบคลุมสําหรับนิพจน์ GQL เพรดิเคต และฟังก์ชันภายในที่พร้อมใช้งานในกราฟในคิวรี่ Microsoft Fabric ใช้การอ้างอิงนี้เพื่อทําความเข้าใจวิธีการคํานวณ กรองผลลัพธ์ และแปลงข้อมูลในคิวรีกราฟของคุณ

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

สัญพจน์

สัญพจน์เป็นนิพจน์แบบง่ายที่ประเมินโดยตรงไปยังค่าที่ระบุ บทความ ค่า GQL และชนิดค่า อธิบายสัญพจน์ของค่าแต่ละชนิดโดยละเอียด

ตัวอย่าง:

1
1.0d
TRUE
"Hello, graph!"
[ 1, 2, 3 ]
NULL

สําหรับไวยากรณ์สัญพจน์โดยละเอียดสําหรับแต่ละชนิดข้อมูล ให้ดู ค่า GQL และชนิดของค่า

เพรดิเคต

เพรดิเคตคือนิพจน์บูลีนที่คุณมักใช้เพื่อกรองผลลัพธ์ในคิวรี GQL ซึ่งจะประเมินเป็น TRUE, FALSEหรือ UNKNOWN (null)

ข้อควรระวัง

เมื่อคุณใช้เพรดิเคตเป็นตัวกรอง เพรดิเคตจะเก็บเฉพาะรายการที่เพรดิเคตประเมินเป็น TRUEเท่านั้น

เพรดิเคตการเปรียบเทียบ

ใช้ตัวดําเนินการเหล่านี้เพื่อเปรียบเทียบค่า:

  • = (เท่ากับ)
  • <> (ไม่เท่ากับ)
  • < (น้อยกว่า)
  • > (มากกว่า)
  • <= (น้อยกว่าหรือเท่ากับ)
  • >= (มากกว่าหรือเท่ากับ)

GQL ใช้ตรรกะแบบสามค่าที่การเปรียบเทียบกับค่าส่งกลับ UNKNOWNnull :

นิพจน์ ผลลัพธ์
5 = 5 TRUE
5 = 3 FALSE
5 = NULL UNKNOWN
NULL = NULL UNKNOWN

สําหรับพฤติกรรมการเปรียบเทียบเฉพาะ โปรดดูเอกสารสําหรับค่าแต่ละชนิดในค่า GQL และชนิดของค่า

ตัวอย่าง:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915
RETURN p.firstName

กฎการเข้ารหัสตัวเลข:

ใช้กฎต่อไปนี้ตามลําดับลําดับความสําคัญ:

  1. นิพจน์การเปรียบเทียบที่เกี่ยวข้องกับอาร์กิวเมนต์ของชนิดตัวเลขโดยประมาณ coerce อาร์กิวเมนต์ทั้งหมดให้เป็นชนิดตัวเลขโดยประมาณ
  2. นิพจน์การเปรียบเทียบที่เกี่ยวข้องกับอาร์กิวเมนต์ของชนิดจํานวนเต็มที่มีเครื่องหมายและไม่มีเครื่องหมายแสดงถึงอาร์กิวเมนต์ทั้งหมดให้เป็นชนิดจํานวนเต็มที่มีเครื่องหมาย

นิพจน์เชิงตรรกะ

รวมเงื่อนไขด้วยตัวดําเนินการตรรกะ:

  • AND (เงื่อนไขทั้งสองเป็นจริง)
  • OR (เงื่อนไขอย่างใดอย่างหนึ่งเป็นจริง)
  • NOT (เงื่อนไขค่าลบล้าง)
  • XOR (การแยกเฉพาะ — จริง เมื่อตัวถูกดําเนินการตัวหนึ่งเป็นจริง)

ตัวอย่าง:

MATCH (p:Person)
FILTER WHERE p.birthday <= 20050915 AND p.firstName = 'John'
RETURN p.firstName || ' ' || p.lastName AS fullName

เพรดิเคตการมีอยู่ของคุณสมบัติ

เมื่อต้องการตรวจสอบว่ามีคุณสมบัติหรือไม่ ให้ใช้เพรดิเคตเหล่านี้:

p.locationIP IS NOT NULL
p.browserUsed IS NULL

Note

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

เพรดิเคตสมาชิกรายการ

ทดสอบถ้าค่าอยู่ในรายการ:

p.firstName IN ['Alice', 'Bob', 'Charlie']
p.gender NOT IN ['male', 'female']

เพรดิเคตรูปแบบสตริง

จับคู่สตริงโดยใช้เทคนิคการจับคู่รูปแบบ:

p.firstName CONTAINS 'John'
p.browserUsed STARTS WITH 'Chrome'
p.locationIP ENDS WITH '.1'

นิพจน์ทางคณิตศาสตร์

ใช้ตัวดําเนินการทางคณิตศาสตร์มาตรฐานที่มีค่าตัวเลข:

  • + (เพิ่มเติม)
  • - (การลบ)
  • * (การคูณ)
  • / (หาร)

ตัวดําเนินการทางคณิตศาสตร์เป็นไปตามหลักทั่วไปทางคณิตศาสตร์

ก่อนหน้า:

โดยทั่วไปแล้ว ตัวดําเนินการจะเป็นไปตามกฎลําดับความสําคัญของตัวดําเนินการที่กําหนดไว้ เช่น * ก่อน+ ใช้วงเล็บเพื่อควบคุมลําดับการประเมินตามความจําเป็น

ตัวอย่าง:

(p.birthday < 20050915 OR p.birthday > 19651231) AND p.gender = 'male'

กฎการเข้ารหัส:

ใช้กฎต่อไปนี้ตามลําดับลําดับความสําคัญ:

  1. นิพจน์ทางคณิตศาสตร์ที่เกี่ยวข้องกับอาร์กิวเมนต์ของชนิดตัวเลขโดยประมาณจะส่งกลับผลลัพธ์ของชนิดตัวเลขโดยประมาณ
  2. นิพจน์ทางคณิตศาสตร์ที่เกี่ยวข้องกับอาร์กิวเมนต์ของชนิดจํานวนเต็มที่มีเครื่องหมายและไม่มีเครื่องหมายส่งกลับผลลัพธ์ของชนิดจํานวนเต็มที่มีเครื่องหมาย

ตัวอย่าง:

LET birth_year = p.birthday / 10000
RETURN birth_year

การเข้าถึงคุณสมบัติ

เข้าถึงคุณสมบัติโดยใช้สวรรคจุด:

p.firstName
edge.creationDate

การเข้าถึงรายการ

เข้าถึงองค์ประกอบรายการโดยใช้การจัดทําดัชนีแบบฐานศูนย์:

interests[0]    -- first element
interests[1]    -- second element

ฟังก์ชันที่มีอยู่ภายใน

GQL สนับสนุนฟังก์ชันในตัวต่าง ๆ สําหรับการประมวลผลข้อมูลและการวิเคราะห์

ฟังก์ชันการรวม

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

  • count(*) - นับจํานวนแถว
  • sum(expression) - รวมค่าตัวเลข
  • avg(expression) - ค่าตัวเลขเฉลี่ย
  • min(expression) - ค้นหาค่าต่ําสุด
  • max(expression) - ค้นหาค่าสูงสุด
  • collect_list(expression) - รวบรวมค่าลงในรายการ

โดยทั่วไป ฟังก์ชันการรวมจะละเว้นค่า null และส่งกลับค่า null เสมอเมื่อไม่มีค่าป้อนเข้าของวัสดุ คุณสามารถใช้ coalesce เพื่อรับค่าเริ่มต้นอื่นได้: coalesce(sum(expr), 0) ข้อยกเว้นเดียวคือ count ฟังก์ชันการรวม ซึ่งนับค่าที่ไม่ใช่ null ที่ให้ไว้เสมอ โดยแสดงค่า 0 ถ้าไม่มีค่าใด ๆ ใช้ count(*) เพื่อรวมค่า null ในการนับจํานวน

ใช้ฟังก์ชันการรวมในสามวิธีที่แตกต่างกัน:

  • เมื่อต้องการคํานวณ (แนวตั้ง) รวมทั่วทั้งตาราง
  • เมื่อต้องการคํานวณ (แนวตั้ง) รวมผ่านตารางย่อยที่กําหนดโดยคีย์การจัดกลุ่ม
  • เมื่อต้องการคํานวณ (แนวนอน) รวมผ่านองค์ประกอบของรายการกลุ่ม

การรวมแนวตั้ง:

-- Vertical aggregate over whole table
MATCH (p:Person)
RETURN count(*) AS total_people, avg(p.birthday) AS average_birth_year
-- Vertical aggregate with grouping
MATCH (p:Person)-[:isLocatedIn]->(c:City)
RETURN c.name, count(*) AS population, avg(p.birthday) AS average_birth_year
GROUP BY c.name

ค่ารวมแนวนอน:

การรวมแนวนอนจะคํานวณผลรวมผ่านองค์ประกอบของตัวแปรรายการกลุ่มจากรูปแบบความยาวตัวแปร:

-- Horizontal aggregate over a group list variable
MATCH (p:Person)-[edges:knows]->{1,3}(:Person)
RETURN p.firstName, avg(edges.creationDate) AS avg_connection_date

การรวมแนวนอนจะมีความสําคัญมากกว่าการรวมแนวตั้งเสมอ เมื่อต้องการแปลงรายการกลุ่มเป็นรายการปกติ ให้ใช้collect_list(edges)

Note

สําหรับความครอบคลุมของเทคนิคการรวมที่ครอบคลุม รวมถึงการผูกขอบความยาวตัวแปรและการรวมการรวมแนวนอน/แนวตั้ง โปรดดู เทคนิคการรวมขั้นสูง

นิพจน์เงื่อนไข

ใช้นิพจน์เงื่อนไขเพื่อส่งกลับค่าที่แตกต่างกันตามเงื่อนไข

กรณีที่ค้นหา:

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ELSE default_result
END

กรณีอย่างง่าย:

CASE expression
  WHEN value1 THEN result1
  WHEN value2 THEN result2
  ELSE default_result
END

NULLIF:

NULLIF(a, b)แสดง NULL หาก a เท่ากับ bหรือระบบจะแสดงเป็นa

ตัวอย่าง:

MATCH (p:Person)
RETURN p.firstName,
       CASE
         WHEN p.gender = 'male' THEN 'M'
         WHEN p.gender = 'female' THEN 'F'
         ELSE 'Other'
       END AS gender_code,
       NULLIF(p.browserUsed, 'Unknown') AS browser

ฟังก์ชันสตริง

  • char_length(string) - ส่งกลับความยาวสตริง
  • upper(string)- ส่งกลับตัวแปรตัวพิมพ์ใหญ่ของสตริงที่ระบุ (US ASCII เท่านั้น)
  • lower(string)- ส่งกลับตัวแปรตัวพิมพ์เล็กของสตริงที่ระบุ (US ASCII เท่านั้น)
  • trim(string) - เอาช่องว่างนําหน้าและต่อท้ายออก
  • string_join(list, separator) - รวมองค์ประกอบรายการด้วยตัวคั่น

ตัวอย่าง:

MATCH (p:Person)
WHERE char_length(p.firstName) > 5
RETURN upper(p.firstName) AS name_upper

ฟังก์ชันกราฟ

  • nodes(path) - แสดงโหนดจากค่าเส้นทาง
  • edges(path) - ส่งกลับขอบจากค่าเส้นทาง
  • elements(path) - ส่งกลับโหนดและขอบทั้งหมดจากเส้นทางเป็นรายการเดียวในลําดับเส้นทาง
  • labels(node_or_edge) - ส่งกลับป้ายชื่อของโหนดหรือขอบเป็นรายการของสตริง
  • path_length(path) - ส่งกลับจํานวนขอบในเส้นทาง

ตัวอย่าง:

MATCH p=(:Company)<-[:workAt]-(:Person)-[:knows]-{1,3}(:Person)-[:workAt]->(:Company)
RETURN nodes(p) AS chain_of_colleagues, path_length(p) AS hops

ฟังก์ชันรายการ

  • size(list) - แสดงขนาดของค่ารายการ
  • trim(list,n)- ตัดแต่งรายการให้เป็นส่วนใหญ่ของขนาดn

ตัวอย่าง:

MATCH (p:Person)-[:hasInterest]->(t:Tag)
WHERE size(collect_list(t)) > 3
RETURN p.firstName, collect_list(t.name) AS interests

ฟังก์ชันชั่วคราว

  • zoned_datetime() - ส่งกลับวันที่เวลาที่กําหนดเขตปัจจุบัน
  • zoned_datetime("2025-09-12T10:10:52Z") - ส่งกลับวันที่เวลาที่กําหนดโดยอาร์กิวเมนต์ในรูปแบบ ISO 8601

ตัวอย่าง:

RETURN zoned_datetime() AS now

ฟังก์ชันทั่วไป

  • coalesce(value1, value2, ...) - ส่งกลับค่าแรกที่ไม่ใช่ null
  • to_json_string(value) - แปลงค่าเป็นการแสดงสตริง JSON

ตัวอย่าง:

MATCH (p:Person)
RETURN coalesce(p.firstName, 'Unknown') AS display_name,
       to_json_string(p) AS person_json