DuckDB สำหรับ Ad-Hoc Analytics: แปลง CSV นับพันไฟล์เป็น Dashboard
Amazon Seller Central สร้างข้อมูลในอัตราที่เกินความสามารถของเครื่องมือ analyst ส่วนใหญ่ รายงาน traffic, ข้อมูล conversion, สรุปสุขภาพ inventory, การส่งออกประสิทธิภาพธุรกิจ, รายละเอียด campaign โฆษณา – แต่ละรายการ deliver เป็นไฟล์ CSV หรือ TSV สะสมเดือนแล้วปีเล่าเป็นพัน ๆ ไฟล์ การตอบสนองมาตรฐานคือ import ทุกอย่างลงใน database แต่ในความเป็นจริง การตั้งค่าและดูแล PostgreSQL instance สำหรับ analytical workload ที่เน้น read และมี schema ที่เปลี่ยนแปลงนำ operational overhead มากกว่าที่ปัญหาต้องการ
เราสร้าง reporting pipeline สำหรับ Amazon seller ที่ดำเนินการใน marketplace ยุโรปห้าแห่ง ข้อมูลดิบ: การส่งออก Seller Central หกปี, 4,200 ไฟล์ ครอบคลุม business report, ประสิทธิภาพโฆษณา, snapshot inventory และ FBA fee ledger
DuckDB เปลี่ยนการคำนวณนั้น มันเป็น embedded analytical database – รัน in-process ควบคู่กับ analysis code ของคุณ ไม่ต้องการ server, daemon, connection string และอ่านโดยตรงจากไฟล์บน disk query interface เป็น standard SQL คุณสมบัติด้านประสิทธิภาพเป็นของ columnar engine ที่ optimize สำหรับ aggregation ในระดับขนาดใหญ่
DuckDB คืออะไรกันแน่
ความแตกต่างที่สำคัญที่สุดคือ columnar storage กับ row storage PostgreSQL จัดระเบียบข้อมูลเป็น row: ทุก field สำหรับ record ที่กำหนดจะถูกเก็บต่อเนื่องบน disk เมื่อคุณรัน SELECT revenue, units_sold FROM orders WHERE marketplace = 'DE' database อ่านทุก field สำหรับทุก row ทิ้งสิ่งที่คุณไม่ได้ขอ และ return สองตัวที่คุณต้องการ
DuckDB จัดระเบียบข้อมูลตาม column ทุก value สำหรับ revenue จะถูกเก็บไว้ด้วยกัน query เดียวกันอ่านเฉพาะ two column chunk ที่ต้องการ ข้ามส่วนที่เหลือทั้งหมด บน dataset ที่มีสี่สิบ column นี่ไม่ใช่การ optimize เล็กน้อย – มันลด I/O ประมาณ 95% สำหรับ analytical query ทั่วไป
SQL โดยตรงบนไฟล์
Feature ที่ทำให้ DuckDB ใช้งานได้จริงสำหรับข้อมูล Seller Central โดยเฉพาะคือ glob-based file scanning คำสั่ง SQL เดียว query CSV นับพันไฟล์พร้อมกัน:
SELECT
date_trunc('month', "Date") AS month,
SUM("Units Ordered") AS units,
SUM("Ordered Product Sales") AS revenue
FROM read_csv_auto('/data/seller-central/business-reports/*.csv')
GROUP BY 1
ORDER BY 1;
read_csv_auto อนุมาน schema จากเนื้อหาไฟล์ – มัน sample row ตรวจจับประเภท column จัดการ delimiter ที่แตกต่างกัน และ merge schema ข้ามไฟล์ที่ column set แตกต่างกัน สำหรับข้อมูล Seller Central ที่ Amazon แก้ไขชื่อ column อย่างน้อยสี่ครั้งในสามปีที่ผ่านมา นี่มีความสำคัญ
คุณสมบัติด้านประสิทธิภาพ
บน reference dataset – 4,200 ไฟล์, ประมาณ 2.8GB แบบไม่บีบอัด – revenue aggregation แบบเต็มที่จัดกลุ่มตาม marketplace, ASIN และเดือนเสร็จสิ้นใน 4.1 วินาทีบน laptop มาตรฐาน (Apple M2, 16GB RAM) PostgreSQL query ที่เทียบเท่าบนข้อมูลที่ import และ index เสร็จสิ้นใน 2.8 วินาที แต่การเปรียบเทียบนั้นไม่รวม import เริ่มต้น 40 นาที
การสร้าง standalone dashboard ด้วย Chart.js
pipeline ทำงานในสามขั้นตอน DuckDB export ผลลัพธ์ query เป็น JSON จากนั้น Python script อ่านไฟล์ JSON และ embed ข้อมูลโดยตรงใน HTML template ที่อ้างอิง Chart.js ผ่าน CDN จากนั้นไฟล์ HTML เปิดใน browser โดยไม่ต้องการ web server
เมื่อใด DuckDB ชนะ PostgreSQL
DuckDB ไม่ใช่ตัวแทนของ PostgreSQL การเปรียบเทียบมีความหมายเฉพาะเมื่อ workload เป็น analytical จริง ๆ DuckDB ชนะเมื่อ: ข้อมูลมีอยู่แล้วเป็นไฟล์บน disk, schema ไม่ทราบล่วงหน้าหรือเปลี่ยนแปลงบ่อย, query เป็น ad-hoc และ access pattern ไม่สามารถคาดเดาล่วงหน้า หรือค่าใช้จ่ายในการปฏิบัติงานของ database server ไม่ได้รับการพิสูจน์โดยอายุหรือขนาดโปรเจค
บทความที่เกี่ยวข้อง
- tva-fetch | How Complete Data Ownership Transforms Amazon Selling Operations
- Building Production-Ready Data Infrastructure for Amazon Sellers: Introducing tva-fetch
- Traefik Reverse Proxy: The Complete Self-Hosting Guide for HTTPS and SSL Automation
- Self-Hosting Windmill on Ubuntu: Complete Docker Setup Tutorial with PostgreSQL Troubleshooting