- เป็นภาษาที่มีสองลักษณะในตัว คือ ภาษาสำหรับ semantic modeling และภาษา query โดยใช้ SQL engine ที่มีอยู่เดิมในการรัน query
- Malloy query ที่เขียนขึ้นจะถูก คอมไพล์เป็น SQL ที่ปรับให้เหมาะกับ DB ที่ใช้งานอยู่ แล้วจึงรัน
- ตอนที่เปิดตัวในปี 2022 ยังเป็น ภาษาเชิงทดลองภายใต้ Looker แต่ปัจจุบันถูกย้ายแยกมาเป็น malloydata และเติบโตจนมี Star ราว 2.5k
- Backend ที่รองรับก็ขยายจากเดิม BigQuery, Postgres 2 รายการ เป็น BigQuery/Snowflake/PostgreSQL/MySQL/Trino/Presto และเพิ่ม การรองรับ DuckDB แบบเนทีฟ
- การตั้งชื่อที่กระชับและการนำกลับมาใช้ซ้ำ: ประหยัดเวลาโดยหลีกเลี่ยงการเขียนนิยามซ้ำ ๆ และปรับแต่งโมเดลแบบวนซ้ำไปพร้อมกับการ query
- ป้องกัน ผลลัพธ์ที่ดูเหมือนถูกต้องแต่จริง ๆ ผิด: ช่วยป้องกันปัญหาที่ query ซึ่งดูเผิน ๆ เหมือนถูกต้องนำไปสู่ค่าที่ผิด
- Nested Queries (query แบบซ้อน): สร้างมุมมองข้อมูลเชิงลำดับชั้นที่สมบูรณ์ได้ง่าย ตัว query เองทำงานเป็นคอมโพเนนต์ที่นำกลับมาใช้ซ้ำได้ จึงไม่ต้องเขียนใหม่เพื่อสร้างลำดับชั้น
- Symmetric Aggregates (การ aggregate แบบสมมาตร): ป้องกันการ aggregate ผิด เช่น ผลรวม/ค่าเฉลี่ย/จำนวน โดยอัตโนมัติ และแก้ปัญหา Fan/Chasm Trap ในระดับภาษา
- Freedom and Safety (อิสระและความปลอดภัย): ผสานความยืดหยุ่นเต็มรูปแบบของ SQL เข้ากับความปลอดภัยของ semantic data model ซึ่งต่างจาก LookML ที่ให้ความปลอดภัยแต่จำกัดอิสระ
- มี VS Code extension: รองรับการสร้างโมเดล, query·แปลงข้อมูล, การสร้าง visualization และ dashboard แบบง่าย ๆ และทดลองได้ทันทีในเบราว์เซอร์
- ตัวอย่างไวยากรณ์: query ที่ aggregate เที่ยวบินออกจาก SFO ตามสายการบิน กระชับกว่าโครงสร้าง SELECT/COUNT/AVG/GROUP BY ของ SQL และเรียงลำดับอัตโนมัติตาม aggregate ตัวแรก จึงไม่จำเป็นต้องใช้
ORDER BYrun: bigquery.table('malloydata-org.faa.flights') -> { where: origin = 'SFO' group_by: carrier aggregate: flight_count is count() average_flight_time is flight_time.avg() }
1 ความคิดเห็น
ผมอาจเป็นเพราะคุ้นกับ SQL ก็ได้ แต่ไม่ค่อยเห็นด้วยเท่าไรที่บอกว่ามันกระชับกว่า SQL
LINQ ของ C# ดูใช้งานสะดวกกว่าด้วย และยังรองรับฐานข้อมูลได้หลากหลายกว่ามาก