DuckDB v2.0 "Cyanoptera" มาแล้ว! ส่องฟีเจอร์เด็ดที่ต้องรู้ก่อนใคร

DuckDB v2.0 กำลังจะมาถึงในฤดูใบไม้ร่วงนี้ พร้อมการเปลี่ยนแปลงครั้งใหญ่ที่น่าจับตามอง ตั้งแต่การเป็นเซิร์ฟเวอร์เต็มรูปแบบ, ทริกเกอร์, ประเภทข้อมูล VARIANT, การทำงานแบบอะซิงโครนัส, ตัวแยกวิเคราะห์ SQL ใหม่, รูปแบบการจัดเก็บข้อมูลใหม่ และอีกมากมาย

DuckDB v2.0 ที่ใช้ชื่อรหัสว่า “Cyanoptera” มาจากการผสมผสานกว่า 10,000 คอมมิตตั้งแต่เวอร์ชัน 1.5 การอัปเกรดครั้งใหญ่นี้ไม่ใช่แค่การเปลี่ยนตัวเลข แต่เป็นการยกเครื่องครั้งสำคัญ ทั้งตัวแยกวิเคราะห์ SQL ใหม่, รูปแบบการจัดเก็บข้อมูลเริ่มต้นใหม่, C API ที่ปรับปรุงใหม่ และการเปลี่ยนแปลงเล็กน้อยที่ส่งผลกระทบ แต่ที่สำคัญที่สุดคือการเปิดศักราชใหม่ของ DuckDB ในฐานะ "เซิร์ฟเวอร์"

1. DuckDB ในฐานะเซิร์ฟเวอร์: Quack และ CONNECT

จากเดิมที่เป็นฐานข้อมูลแบบ In-process DuckDB v2.0 ได้เพิ่มโหมด Client/Server เข้ามาแล้ว! ด้วยส่วนขยาย "Quack" ที่ใช้โปรโตคอล Native ของ DuckDB ทำให้ DuckDB แต่ละ Instance สามารถให้บริการฐานข้อมูลผ่านเครือข่าย และ Instance อื่นๆ สามารถเชื่อมต่อและส่งคำสั่งไปยังฐานข้อมูลเหล่านั้นได้ผ่านคำสั่ง CONNECT

-- ตัวอย่างการเชื่อมต่อ
CONNECT 'quack://user:password@host:port/database';

CONNECT เป็นตัวตายตัวแทนของ remote.query($$...$$) ที่เคยใช้ และไม่ได้จำกัดแค่ Quack เท่านั้น แต่ยังสามารถชี้ไปยังฐานข้อมูลอื่นที่รองรับได้เลย นอกจากนี้ ตัวปรับปรุงประสิทธิภาพแบบใหม่ยังสามารถส่ง SQL ไปยัง PostgreSQL และ MySQL ได้โดยตรง แทนที่จะดึงข้อมูลทั้งหมดมาประมวลผล

หลายคนอาจคิดว่า DuckDB ไม่เหมาะกับงาน Transactional แต่จริงๆ แล้ว DuckDB ถูกสร้างมาเพื่อรองรับ Transaction ตั้งแต่วันแรก ด้วย MVCC และ Transaction Isolation ที่สมบูรณ์ การทำงานแบบ Client/Server นี้จะช่วยให้ DuckDB สามารถแข่งขันกับฐานข้อมูลทั่วไปอย่าง PostgreSQL ในหลายๆ เวิร์กโหลดได้

2. VARIANT: ข้อมูลกึ่งโครงสร้างที่ทรงพลัง

ประเภทข้อมูล VARIANT ที่เคยเปิดตัวใน v1.5 ได้รับการยกระดับให้เป็น "พลเมืองชั้นหนึ่ง" ใน v2.0 คิดง่ายๆ ว่ามันคือ JSON ที่เร็วกว่าเดิม VARIANT สามารถเก็บข้อมูลที่มีโครงสร้างแตกต่างกันในแต่ละแถวได้ โดยไม่ต้องกำหนด Schema ล่วงหน้า DuckDB จะทำการ "Shred" ข้อมูลที่ซ่อนอยู่ให้โดยอัตโนมัติ ทำให้บีบอัดได้ดีและประมวลผลเร็ว เหมาะอย่างยิ่งสำหรับข้อมูล Log ที่เข้ามาแบบ Real-time

ใน v2.0 การทำงานของ VARIANT จะสมบูรณ์แบบยิ่งขึ้น ตั้งแต่การ Shred โดยตรงจาก Storage, การดึงข้อมูลแบบ Pushdown, การอ่าน/เขียน VARIANT สำหรับ Parquet ไปจนถึงฟังก์ชัน variant_* ใหม่ๆ

3. Triggers: ควบคุมการเปลี่ยนแปลงข้อมูล

Triggers ที่เป็นฟีเจอร์ที่ร้องขอมานาน ในที่สุดก็มาถึงใน DuckDB v2.0 รองรับทั้ง BEFORE และ AFTER, FOR EACH ROW และ FOR EACH STATEMENT, การใช้ REFERENCING OLD/NEW TABLE และอื่นๆ อีกมากมาย

Triggers เหมาะสำหรับงานอย่างการสร้าง Audit Trail หรือการบันทึกการเปลี่ยนแปลงที่เกิดขึ้นในระบบ ตัวอย่างเช่น:

CREATE TRIGGER audit_trigger
AFTER INSERT ON my_table
REFERENCING OLD TABLE AS old NEW TABLE AS new
FOR EACH STATEMENT
RETURN old; -- หรือ new

4. การปรับปรุง SQL Dialect

DuckDB v2.0 มาพร้อมกับฟีเจอร์ SQL ใหม่ๆ ที่น่าสนใจมากมาย:

  • NEAREST Joins: สำหรับการค้นหาความคล้ายคลึง (Similarity Search) ในงาน Vector และ Embedding
  • DML inside CTEs: สามารถใช้ INSERT, UPDATE, DELETE, COPY เป็นส่วนหนึ่งของ CTE ได้
  • Nested Schemas: รองรับการสร้าง Schema ซ้อน Schema
  • New Variable Syntax: ใช้ $x แทน getvariable(...) ในทุกที่ที่อนุญาตให้ใช้ Expression
  • JSON Mutation Functions: ฟังก์ชัน jsonset, jsoninsert, jsonreplace, jsonremove สำหรับแก้ไข JSON ในตัว
  • Recursive CTEs with USING KEY aggregation: รองรับอัลกอริทึมแบบวนซ้ำใน SQL

นอกจากนี้ยังมี FETCH FIRST 2 ROWS ONLY, OVERLAY(), UNNEST in GROUP BY และ MERGE / UPDATE ... FROM ที่จัดการกับแถวที่ซ้ำกันได้ดีขึ้น

5. Asynchronous I/O: เร็วขึ้นเมื่อทำงานกับ Object Storage

การทำงานกับ Object Storage เช่น S3 เป็นหัวใจสำคัญของ DuckDB และใน v2.0 ได้เพิ่ม Asynchronous I/O เข้ามา ทำให้การอ่านข้อมูลจาก Object Storage ทำงานแบบขนานได้ดีขึ้นมาก ส่งผลให้ Query บน Network Storage เร็วขึ้นอย่างเห็นได้ชัด

6. ประสิทธิภาพ Query ที่เร็วขึ้นทั่วกระดาน

ทุกเวอร์ชันที่ออกมา DuckDB จะพยายามทำให้ Query ที่มีอยู่เร็วขึ้นโดยอัตโนมัติ ใน v2.0 มีการปรับปรุงหลายส่วน เช่น:

  • Partial aggregates ถูก Pushdown ลงไปใต้ Joins
  • การ Rewrite Recursive CTE engine ใหม่
  • Aggregations สามารถ Spill ไปยัง Disk ได้เมื่อใช้หน่วยความจำเกิน
  • Row-group pruning ถูกขยายขอบเขตให้ครอบคลุมข้อมูลประเภท Struct, List, Decimal, UUID และ Function Predicates
  • Planner สามารถใช้ประโยชน์จากการ Partitioning ของ Lakehouse formats (Iceberg, Hive) ได้อย่างเต็มที่

มีการยกตัวอย่าง Benchmark การค้นหาเส้นทางแบบ Recursive CTE ซึ่ง DuckDB v2.0 ทำได้เร็วกว่าเวอร์ชันก่อนหน้าถึง 40 เท่า!

7. Storage Format v2.0: จัดการ Index และ Metadata ได้ดีขึ้น

Storage Format ใหม่ใน v2.0 มาพร้อมกับ Buffer-managed ART Indexes ทำให้ Index ไม่ถูก Pin ในหน่วยความจำอีกต่อไป ส่งผลให้ตารางขนาดใหญ่ที่มี Index เปิดได้ทันที และ Index จะถูกโหลดเข้ามาเมื่อต้องการใช้งานเท่านั้น

นอกจากนี้ Column Metadata ยังโหลดแบบ Lazy ทำให้ตารางที่มีคอลัมน์จำนวนมากเปิดได้เร็วขึ้น และการบีบอัด DICT_FSST ถูกเปิดใช้งานเป็นค่าเริ่มต้น

8. ตัวแยกวิเคราะห์ SQL ใหม่ (New SQL Parser)

DuckDB v2.0 ใช้ตัวแยกวิเคราะห์ SQL ที่พัฒนาขึ้นเอง (PEG-based parser) แทนที่ของเดิมที่มาจาก PostgreSQL การเปลี่ยนแปลงนี้ช่วยให้ส่วนขยาย (Extensions) สามารถ Hook เข้าไปที่ Grammar ได้ ทำให้คาดหวังได้ว่าจะเห็น Syntax SQL ใหม่ๆ จาก Extensions ในอนาคต และยังช่วยให้ข้อความแจ้งข้อผิดพลาด (Error Messages) แม่นยำขึ้นด้วย

9. จัดการ Timezones, Calendars, Collations โดยไม่ต้องพึ่ง ICU

DuckDB v2.0 ได้นำ Library ICU ออกไปทั้งหมด และพัฒนาการจัดการ Timezones, Calendars, และ Collations ขึ้นมาเอง ทำให้ขนาดของ DuckDB เล็กลงและอัปเดตได้ง่ายขึ้น ที่สำคัญคือยังคงทำงานได้เหมือนเดิมและเร็วขึ้นด้วย

10. เขียน Extension ครั้งเดียว ใช้ได้ตลอดกาล

ส่วนขยาย (Extensions) เป็นจุดเด่นของ DuckDB แต่เดิมการพัฒนา Extension ต้องปรับแก้และคอมไพล์ใหม่ทุกครั้งที่มีการอัปเกรด DuckDB แต่ใน v2.0 มีการขยาย Stable C API ทำให้ Extension ที่เขียนขึ้นมาสามารถใช้งานได้กับ DuckDB หลายเวอร์ชันโดยไม่ต้องแก้ไข

สรุป

DuckDB v2.0 "Cyanoptera" เป็นการอัปเกรดครั้งใหญ่ที่นำเสนอคุณสมบัติใหม่ๆ ที่น่าตื่นเต้นมากมาย ตั้งแต่การเป็นเซิร์ฟเวอร์, การจัดการข้อมูลที่ซับซ้อน, ประสิทธิภาพที่เร็วขึ้น, ไปจนถึงการพัฒนา Extension ที่ยั่งยืนยิ่งขึ้น เป็นการตอกย้ำว่า DuckDB ยังคงเป็นเครื่องมือวิเคราะห์ข้อมูลที่ทรงพลังและพัฒนาอย่างต่อเนื่อง

#DuckDB #Database #Analytics #SQL #OpenSource

ขอบคุณ แหล่งข้อมูล
https://duckdb.org/2026/08/17/duckdb-20-highlights

DuckDB v2.0 "Cyanoptera" มาแล้ว! ส่องฟีเจอร์เด็ดที่ต้องรู้ก่อนใครDuckDB v2.0 กำลังจะมาถึงในฤดูใบไม้ร่วงนี้ พร้อมการเปลี่ยนแปลงครั้งใหญ่ที่น่าจับตามอง ตั้งแต่การเป็นเซิร์ฟเวอร์เต็มรูปแบบ, ทริกเกอร์, ประเภทข้อมูล VARIANT, การทำงานแบบอะซิงโครนัส, ตัวแยกวิเคราะห์ SQL ใหม่, รูปแบบการจัดเก็บข้อมูลใหม่ และอีกมากมายDuckDB v2.0 ที่ใช้ชื่อรหัสว่า “Cyanoptera” มาจากการผสมผสานกว่า 10,000 คอมมิตตั้งแต่เวอร์ชัน 1.5 การอัปเกรดครั้งใหญ่นี้ไม่ใช่แค่การเปลี่ยนตัวเลข แต่เป็นการยกเครื่องครั้งสำคัญ ทั้งตัวแยกวิเคราะห์ SQL ใหม่, รูปแบบการจัดเก็บข้อมูลเริ่มต้นใหม่, C API ที่ปรับปรุงใหม่ และการเปลี่ยนแปลงเล็กน้อยที่ส่งผลกระทบ แต่ที่สำคัญที่สุดคือการเปิดศักราชใหม่ของ DuckDB ในฐานะ "เซิร์ฟเวอร์"1. DuckDB ในฐานะเซิร์ฟเวอร์: Quack และ CONNECTจากเดิมที่เป็นฐานข้อมูลแบบ In-process DuckDB v2.0 ได้เพิ่มโหมด Client/Server เข้ามาแล้ว! ด้วยส่วนขยาย "Quack" ที่ใช้โปรโตคอล Native ของ DuckDB ทำให้ DuckDB แต่ละ Instance สามารถให้บริการฐานข้อมูลผ่านเครือข่าย และ Instance อื่นๆ สามารถเชื่อมต่อและส่งคำสั่งไปยังฐานข้อมูลเหล่านั้นได้ผ่านคำสั่ง CONNECT-- ตัวอย่างการเชื่อมต่อ CONNECT 'quack://user:password@host:port/database';CONNECT เป็นตัวตายตัวแทนของ remote.query($$...$$) ที่เคยใช้ และไม่ได้จำกัดแค่ Quack เท่านั้น แต่ยังสามารถชี้ไปยังฐานข้อมูลอื่นที่รองรับได้เลย นอกจากนี้ ตัวปรับปรุงประสิทธิภาพแบบใหม่ยังสามารถส่ง SQL ไปยัง PostgreSQL และ MySQL ได้โดยตรง แทนที่จะดึงข้อมูลทั้งหมดมาประมวลผลหลายคนอาจคิดว่า DuckDB ไม่เหมาะกับงาน Transactional แต่จริงๆ แล้ว DuckDB ถูกสร้างมาเพื่อรองรับ Transaction ตั้งแต่วันแรก ด้วย MVCC และ Transaction Isolation ที่สมบูรณ์ การทำงานแบบ Client/Server นี้จะช่วยให้ DuckDB สามารถแข่งขันกับฐานข้อมูลทั่วไปอย่าง PostgreSQL ในหลายๆ เวิร์กโหลดได้2. VARIANT: ข้อมูลกึ่งโครงสร้างที่ทรงพลังประเภทข้อมูล VARIANT ที่เคยเปิดตัวใน v1.5 ได้รับการยกระดับให้เป็น "พลเมืองชั้นหนึ่ง" ใน v2.0 คิดง่ายๆ ว่ามันคือ JSON ที่เร็วกว่าเดิม VARIANT สามารถเก็บข้อมูลที่มีโครงสร้างแตกต่างกันในแต่ละแถวได้ โดยไม่ต้องกำหนด Schema ล่วงหน้า DuckDB จะทำการ "Shred" ข้อมูลที่ซ่อนอยู่ให้โดยอัตโนมัติ ทำให้บีบอัดได้ดีและประมวลผลเร็ว เหมาะอย่างยิ่งสำหรับข้อมูล Log ที่เข้ามาแบบ Real-timeใน v2.0 การทำงานของ VARIANT จะสมบูรณ์แบบยิ่งขึ้น ตั้งแต่การ Shred โดยตรงจาก Storage, การดึงข้อมูลแบบ Pushdown, การอ่าน/เขียน VARIANT สำหรับ Parquet ไปจนถึงฟังก์ชัน variant_* ใหม่ๆ3. Triggers: ควบคุมการเปลี่ยนแปลงข้อมูลTriggers ที่เป็นฟีเจอร์ที่ร้องขอมานาน ในที่สุดก็มาถึงใน DuckDB v2.0 รองรับทั้ง BEFORE และ AFTER, FOR EACH ROW และ FOR EACH STATEMENT, การใช้ REFERENCING OLD/NEW TABLE และอื่นๆ อีกมากมายTriggers เหมาะสำหรับงานอย่างการสร้าง Audit Trail หรือการบันทึกการเปลี่ยนแปลงที่เกิดขึ้นในระบบ ตัวอย่างเช่น:CREATE TRIGGER audit_trigger AFTER INSERT ON my_table REFERENCING OLD TABLE AS old NEW TABLE AS new FOR EACH STATEMENT RETURN old; -- หรือ new4. การปรับปรุง SQL DialectDuckDB v2.0 มาพร้อมกับฟีเจอร์ SQL ใหม่ๆ ที่น่าสนใจมากมาย:NEAREST Joins: สำหรับการค้นหาความคล้ายคลึง (Similarity Search) ในงาน Vector และ EmbeddingDML inside CTEs: สามารถใช้ INSERT, UPDATE, DELETE, COPY เป็นส่วนหนึ่งของ CTE ได้Nested Schemas: รองรับการสร้าง Schema ซ้อน SchemaNew Variable Syntax: ใช้ $x แทน getvariable(...) ในทุกที่ที่อนุญาตให้ใช้ ExpressionJSON Mutation Functions: ฟังก์ชัน jsonset, jsoninsert, jsonreplace, jsonremove สำหรับแก้ไข JSON ในตัวRecursive CTEs with USING KEY aggregation: รองรับอัลกอริทึมแบบวนซ้ำใน SQLนอกจากนี้ยังมี FETCH FIRST 2 ROWS ONLY, OVERLAY(), UNNEST in GROUP BY และ MERGE / UPDATE ... FROM ที่จัดการกับแถวที่ซ้ำกันได้ดีขึ้น5. Asynchronous I/O: เร็วขึ้นเมื่อทำงานกับ Object Storageการทำงานกับ Object Storage เช่น S3 เป็นหัวใจสำคัญของ DuckDB และใน v2.0 ได้เพิ่ม Asynchronous I/O เข้ามา ทำให้การอ่านข้อมูลจาก Object Storage ทำงานแบบขนานได้ดีขึ้นมาก ส่งผลให้ Query บน Network Storage เร็วขึ้นอย่างเห็นได้ชัด6. ประสิทธิภาพ Query ที่เร็วขึ้นทั่วกระดานทุกเวอร์ชันที่ออกมา DuckDB จะพยายามทำให้ Query ที่มีอยู่เร็วขึ้นโดยอัตโนมัติ ใน v2.0 มีการปรับปรุงหลายส่วน เช่น:Partial aggregates ถูก Pushdown ลงไปใต้ Joinsการ Rewrite Recursive CTE engine ใหม่Aggregations สามารถ Spill ไปยัง Disk ได้เมื่อใช้หน่วยความจำเกินRow-group pruning ถูกขยายขอบเขตให้ครอบคลุมข้อมูลประเภท Struct, List, Decimal, UUID และ Function PredicatesPlanner สามารถใช้ประโยชน์จากการ Partitioning ของ Lakehouse formats (Iceberg, Hive) ได้อย่างเต็มที่มีการยกตัวอย่าง Benchmark การค้นหาเส้นทางแบบ Recursive CTE ซึ่ง DuckDB v2.0 ทำได้เร็วกว่าเวอร์ชันก่อนหน้าถึง 40 เท่า!7. Storage Format v2.0: จัดการ Index และ Metadata ได้ดีขึ้นStorage Format ใหม่ใน v2.0 มาพร้อมกับ Buffer-managed ART Indexes ทำให้ Index ไม่ถูก Pin ในหน่วยความจำอีกต่อไป ส่งผลให้ตารางขนาดใหญ่ที่มี Index เปิดได้ทันที และ Index จะถูกโหลดเข้ามาเมื่อต้องการใช้งานเท่านั้นนอกจากนี้ Column Metadata ยังโหลดแบบ Lazy ทำให้ตารางที่มีคอลัมน์จำนวนมากเปิดได้เร็วขึ้น และการบีบอัด DICT_FSST ถูกเปิดใช้งานเป็นค่าเริ่มต้น8. ตัวแยกวิเคราะห์ SQL ใหม่ (New SQL Parser)DuckDB v2.0 ใช้ตัวแยกวิเคราะห์ SQL ที่พัฒนาขึ้นเอง (PEG-based parser) แทนที่ของเดิมที่มาจาก PostgreSQL การเปลี่ยนแปลงนี้ช่วยให้ส่วนขยาย (Extensions) สามารถ Hook เข้าไปที่ Grammar ได้ ทำให้คาดหวังได้ว่าจะเห็น Syntax SQL ใหม่ๆ จาก Extensions ในอนาคต และยังช่วยให้ข้อความแจ้งข้อผิดพลาด (Error Messages) แม่นยำขึ้นด้วย9. จัดการ Timezones, Calendars, Collations โดยไม่ต้องพึ่ง ICUDuckDB v2.0 ได้นำ Library ICU ออกไปทั้งหมด และพัฒนาการจัดการ Timezones, Calendars, และ Collations ขึ้นมาเอง ทำให้ขนาดของ DuckDB เล็กลงและอัปเดตได้ง่ายขึ้น ที่สำคัญคือยังคงทำงานได้เหมือนเดิมและเร็วขึ้นด้วย10. เขียน Extension ครั้งเดียว ใช้ได้ตลอดกาลส่วนขยาย (Extensions) เป็นจุดเด่นของ DuckDB แต่เดิมการพัฒนา Extension ต้องปรับแก้และคอมไพล์ใหม่ทุกครั้งที่มีการอัปเกรด DuckDB แต่ใน v2.0 มีการขยาย Stable C API ทำให้ Extension ที่เขียนขึ้นมาสามารถใช้งานได้กับ DuckDB หลายเวอร์ชันโดยไม่ต้องแก้ไขสรุปDuckDB v2.0 "Cyanoptera" เป็นการอัปเกรดครั้งใหญ่ที่นำเสนอคุณสมบัติใหม่ๆ ที่น่าตื่นเต้นมากมาย ตั้งแต่การเป็นเซิร์ฟเวอร์, การจัดการข้อมูลที่ซับซ้อน, ประสิทธิภาพที่เร็วขึ้น, ไปจนถึงการพัฒนา Extension ที่ยั่งยืนยิ่งขึ้น เป็นการตอกย้ำว่า DuckDB ยังคงเป็นเครื่องมือวิเคราะห์ข้อมูลที่ทรงพลังและพัฒนาอย่างต่อเนื่อง#DuckDB #Database #Analytics #SQL #OpenSourcehttps://duckdb.org/2026/08/17/duckdb-20-highlights
Shared content
DUCKDB.ORG
A Preview of DuckDB v2.0
DuckDB v2.0 is coming this fall. In this post, we preview its headline features: DuckDB as a server, triggers, the VARIANT type, asynchronous I/O, a new SQL parser, a new storage format, and much more.
4 التعليقات 0 المشاركات 997 مشاهدة 0 معاينة