DuckDB 2.0 mở file CSV quá giới hạn Excel: 3 triệu dòng tính trong 0,2 giây
Dunggi chạy DuckDB 2.0.0 một ngày sau khi ra mắt trên file CSV giả 3.000.000 dòng (123 MB), gần gấp ba giới hạn 1.048.576 dòng của Excel. Câu GROUP BY mất 0,17–0,22 giây, vòng lặp Python thường mất 4,04 giây, hai cách ra cùng tổng. Một thay đổi API ở bản 2.0 làm script cũ báo lỗi.
- Đã thử thật
- Có nguồn chính thức
Bài của Dunggi · Cách chúng tôi làm bài · Báo thông tin sai
Cách làm: AI soạn bài; Dunggi kiểm theo quy trình ở trang Phương pháp trước khi đăng. Bài có phần Dunggi tự làm thử thật và ghi lại kết quả. Nguồn của bài có trang hoặc tài liệu chính thức của hãng. Nguồn tham khảo ghi ở cuối bài.
Trả lời nhanh
DuckDB 2.0 đọc một file CSV 3 triệu dòng (123 MB) và tính tổng theo nhóm trong khoảng 0,2 giây trên PC của Dunggi. File này nhiều gần gấp ba số dòng Excel mở được. Vòng lặp Python thường (module csv) làm đúng phép tính đó mất 4,0 giây. Bạn chỉ cần viết câu hỏi bằng SQL, không phải nhập dữ liệu vào đâu cả, không cần dựng máy chủ.
Thử ngày 22/10/2026, một ngày sau khi DuckDB ra bản mới, bằng duckdb 2.0.0 từ PyPI (Python 3.13, PC 12 luồng, 7 GB RAM trong WSL). Dữ liệu là dữ liệu giả: 3.000.000 đơn hàng tự sinh với hạt giống ngẫu nhiên cố định. Dunggi không mở file này bằng Excel, nên mọi điều nói về Excel dưới đây là giới hạn Microsoft công bố, không phải số tự đo.
Kết quả chính
- Thời gian truy vấn: gom nhóm theo khu vực và danh mục trên 3.000.000 dòng, chạy ba lần: 0,22 giây, 0,18 giây, 0,17 giây. Đếm tổng số dòng: 0,13 giây.
- So với vòng lặp Python: cùng phép tính mất 4,04 giây, chậm hơn khoảng 20 lần. Hai cách ra cùng nhóm đứng đầu (North / Phone) và cùng tổng tiền 228.363.763,10 tới từng xu, nên SQL không tính sai.
- Kích thước file: 122,8 MB, sáu cột. Không cần nhét file vào bảng tính, DuckDB đọc thẳng từ ổ đĩa.
- Một thay đổi làm hỏng code cũ: ở bản 2.0, đối tượng truy vấn không còn
fetchone(). Script của Dunggi viết theo thói quen bản 1.x báo lỗi và gợi ý dùngrel.limit(1).fetchall().
Cách thử
- Bản phát hành: DuckDB 2.0.0 LTS "Cinnamon Teal", công bố 21/10/2026. Đội DuckDB nói bản 2.0 được hỗ trợ ít nhất tới tháng 10/2027, bản 1.4 tới cuối tháng 11/2026 (thông báo).
- Cài đặt:
uv run --with duckdb python script.py, không cần gì thêm. Thư viện Python có ngay hôm ra bản; thông báo nói một số thư viện khác (Go, R, Java) có thể chậm vài ngày. - Dữ liệu:
orders.csvgồmorder_id, region, category, qty, unit_price, order_date, 3.000.000 dòng, sinh bằng script hạt giống 7. Script nằm trong repo của Dunggi. - Câu truy vấn:
SELECT region, category, sum(qty * unit_price) AS revenue, count(*) AS n
FROM read_csv('orders.csv')
GROUP BY ALL
ORDER BY revenue DESC
LIMIT 3;
read_csv tự đoán kiểu dữ liệu từng cột, còn GROUP BY ALL gom theo mọi cột bạn không tính tổng.
Vì sao file CSV cỡ này là vấn đề với Excel
Một trang tính Excel chứa tối đa 1.048.576 dòng (Microsoft: Excel specifications and limits). File của Dunggi có 3.000.000 dòng dữ liệu, nên Excel không hiện hết trong một trang. Dunggi chỉ so số dòng, không chạy thử trong Excel. Nếu bạn có file CSV xuất từ cửa hàng, ngân hàng hay hệ thống log mà vượt mức này, thường phải chia thủ công thành nhiều file hoặc truy vấn ngay trên file gốc.
Điều làm được
- Không cần cài đặt cho câu hỏi dùng một lần. Một dòng Python hoặc một lệnh
duckdb, file vẫn là file. Không phải tạo cơ sở dữ liệu. - Nhanh mà không phải tinh chỉnh. Không tạo chỉ mục, không đổi CSV sang Parquet trước. Cả ba lần chạy đều dưới một phần tư giây.
- Kết quả khớp. Kết quả SQL bằng kết quả vòng lặp Python độc lập, đúng tới từng xu.
Điều chưa tốt
- Đổi API ở bản 2.0. Code gọi
.fetchone()trên đối tượng truy vấn sẽ hỏng. Dùng.fetchall()hoặc.limit(1).fetchall(). Nếu bạn có đoạn mã DuckDB cũ từ bản 1.x, hãy tìmfetchonetrước khi nâng cấp. - Không phải bảng tính. Bạn nhận về các dòng kết quả, không phải ô để sửa tay. Muốn đưa cho người quen làm việc trong Excel thì vẫn phải xuất kết quả nhỏ (vài trăm dòng) ra file, thêm một bước.
- Một máy, một dạng file. Sáu cột đơn giản, không có ô xuống dòng trong dấu ngoặc kép, không lỗi mã hoá. File xuất thật có thể xấu hơn và Dunggi chưa thử. Dunggi cũng chưa thử pandas hay Polars, nên "nhanh hơn 20 lần" chỉ là so với vòng lặp Python thuần.
Các tính năng mới của 2.0 chưa thử
Bản này còn có kiểu dữ liệu VARIANT cho dữ liệu bán cấu trúc, trigger, giao thức máy chủ Quack với lệnh CONNECT, đọc bất đồng bộ cho Parquet và CSV trên kho lưu trữ từ xa, và "chế độ agent" ở CLI: in bảng Markdown gọn khi có agent lập trình điều khiển. Dunggi chưa thử mục nào. Theo thông báo, trong thí nghiệm TPC-H của chính đội DuckDB, chế độ agent giảm 59% lượng kết quả model phải đọc.
Kết luận của Dunggi
Nếu câu hỏi của bạn là "cộng, đếm hoặc lọc file CSV rất lớn" và bạn gõ được SQL cơ bản, DuckDB 2.0 trả lời trong chưa tới nửa giây trên một máy để bàn, trong khi vòng lặp Python tự viết mất bốn giây. Hãy kiểm số dòng file của bạn so với giới hạn Excel trước; nếu còn dưới mức đó thì Excel vẫn ổn, bạn không cần cái này. Nếu có code DuckDB cũ, tìm fetchone trước khi nâng cấp.



