BigQuery ตอนนี้รองรับไวยากรณ์ SQL แบบ Pipe แล้ว
(cloud.google.com)Pipe Query Syntax คืออะไร?
- เป็นไวยากรณ์ขยายของ GoogleSQL ที่ช่วยให้เขียนคิวรีในโครงสร้างเชิงเส้นซึ่งอ่านง่ายและดูแลรักษาได้สะดวก
- รองรับการทำงานแบบเดียวกับ GoogleSQL เดิม (Standard SQL) เช่น การเลือกข้อมูล การจัดกลุ่ม การ join การกรอง เป็นต้น
- สามารถกำหนดลำดับการทำงานได้อย่างอิสระ และเขียนคิวรีที่ซับซ้อนได้โดยไม่ต้องใช้ nested subquery
Standard SQL vs Pipe Query Syntax
- Standard SQL
- ต้องทำตามลำดับไวยากรณ์ที่กำหนดไว้
- หากใช้การ aggregate หลายชั้น จำเป็นต้องใช้ CTE (Common Table Expression) หรือ nested subquery
- ต้องเขียนคอลัมน์ซ้ำใน
SELECT,GROUP BY,ORDER BY
- Pipe Query Syntax
- สามารถใช้ตัวดำเนินการ Pipe ได้ในลำดับใดก็ได้
- ทำ aggregate หลายชั้นได้ง่ายเพียงเพิ่มตัวดำเนินการ Pipe
- ประกาศคอลัมน์เพียงครั้งเดียวก็พอ
โครงสร้างพื้นฐานของ Pipe Query Syntax
-
- เริ่มต้นด้วย clause
FROM
- เริ่มต้นด้วย clause
-
- เพิ่มการทำงานต่อจาก
|>(ตัวดำเนินการ pipe)
- เพิ่มการทำงานต่อจาก
-
- เชื่อม
|>หลายตัวเข้าด้วยกันเพื่อประกอบคิวรีเป็นลำดับขั้น
(เช่น สามารถสลับลำดับระหว่างการกรอง → การ aggregate → การ join ได้)
- เชื่อม
- คุณสมบัติหลัก
- เพิ่มตัวดำเนินการ Pipe ให้กับคิวรีใดก็ได้ → ขยายคิวรี GoogleSQL เดิมได้ด้วยการเติมตัวดำเนินการ |> ต่อท้าย
- ลำดับการทำงานยืดหยุ่น → ใช้ตัวดำเนินการได้ตามลำดับและจำนวนครั้งที่ต้องการ
- ใช้ได้ในทุกสภาพแวดล้อมที่รองรับ GoogleSQL → ใช้ได้กับคิวรี, view, table-valued function เป็นต้น
- ใช้ร่วมกับไวยากรณ์ SQL เดิมได้ → subquery ใช้ Standard SQL ส่วนคิวรีหลักใช้ไวยากรณ์ Pipe ได้
- อ้างอิง alias ทั้งหมดที่นิยามไว้ในขั้นก่อนหน้าได้
- เริ่มด้วย clause
FROMได้ → แล้วค่อยเพิ่มตัวดำเนินการ|>เพื่อขยายคิวรีแบบค่อยเป็นค่อยไป
ความแตกต่างระหว่าง Pipe Query Syntax กับ Standard SQL
- เริ่มคิวรีด้วย clause
FROMได้ - ตัวดำเนินการ pipe
SELECTจะไม่ทำ aggregate โดยต้องใช้ตัวดำเนินการ pipeAGGREGATEแยกต่างหาก - ใช้ตัวดำเนินการ pipe
WHEREสำหรับการกรอง ซึ่งรวมความสามารถของWHERE,HAVING,QUALIFYใน Standard SQL ไว้ด้วยกัน สามารถกรองได้ในทุกขั้นตอน → ทำให้เขียนคิวรีได้ยืดหยุ่นมากขึ้น
ข้อดีของ Pipe Query Syntax
- เขียนคิวรีตามลำดับตรรกะได้ → ช่วยให้อ่านคิวรีได้ง่ายขึ้น
- ดูแลรักษาง่าย → ทำงานซับซ้อนได้โดยไม่ต้องใช้ nested subquery
- ลำดับการทำงานยืดหยุ่น → ใช้การทำงานในลำดับที่ต้องการได้
- การกรองเข้าใจง่ายขึ้น → ใช้
WHEREเพื่อกรองข้อมูลในหลายขั้นตอนได้ - เขียนคิวรี aggregate ที่ซับซ้อนได้ง่ายขึ้น → ใช้ตัวดำเนินการ
AGGREGATEเพื่อทำ aggregate อย่างชัดเจน
รองรับในสถานะ Pre-GA และยังมีข้อจำกัดด้านการรองรับอยู่
3 ความคิดเห็น
https://github.com/tc39/proposal-pipeline-operator
เป็นโอเปอเรเตอร์ที่คุ้นหน้าคุ้นตาพอสมควรเลยนะ
พอดู
prqlมาก่อน แล้วมาเห็นไวยากรณ์แบบไปป์ไลน์ของ Google ก็รู้สึกว่ามันดูรก ๆ นิดหน่อยนะความคิดเห็นใน Hacker News
ไวยากรณ์แบบ pipe ของ SQL ถูกนำไปใช้งานใน Databricks ตั้งแต่วันที่ 30 มกราคม 2025
PRQL เป็นแนวคิดคล้ายกันที่คอมไพล์ไปเป็น SQL
หากมีการขยายไวยากรณ์ SQL ต่อไปเรื่อย ๆ ความซับซ้อนก็อาจเพิ่มขึ้น
ตอนที่ไวยากรณ์แบบ pipe ถูกประกาศครั้งแรก ทีม SQLite ได้ลองทดสอบมัน
PRQL เป็นไวยากรณ์แบบเน้น pipe สำหรับ SQL DB แต่เพราะเป็นภาษาใหม่ จึงไม่รองรับ backward compatibility กับ SQL
ใช้ได้ใน DuckDB เช่นกัน
การพิมพ์ ">" หลัง pipe อาจน่ารำคาญได้
ภาษา Malloy ไม่ได้เป็นไวยากรณ์แบบ pipe แต่มีไวยากรณ์เชิงวิเคราะห์ที่คล้ายกัน
หลังจากใช้ Kusto Query Language ก็หวังว่า SQL จะมีความสามารถลักษณะนี้