مطلب «Ducks in a Column» با یک مجموعه داده نمونه درباره ۴۰۰ اردک، شیوه کار DuckDB با ستونها و فایلها را توضیح میدهد. نقطه شروع، Columnar Storage است: هر ستون جدا ذخیره میشود، نه اینکه هر ردیف یک رکورد یکپارچه باشد. بنابراین queryای که از میان ۵۰ ستون فقط سه ستون را لازم دارد، همان سه ستون را میخواند. یکسانبودن نوع مقادیر هر ستون و تکرار آنها نیز به فشردهسازی کمک میکند. موتور DuckDB هر بار دستهای شامل ۲٬۰۴۸ مقدار از هر ستون را پردازش میکند.
برای اجرای query روی فایل، لازم نیست ابتدا دادهها وارد جدول شوند. DuckDB مسیر فایل را مانند جدول میپذیرد و نام و نوع ستونها را تشخیص میدهد؛ برای نمونه، SELECT * FROM 'ponds.csv' مستقیماً فایل CSV را میخواند. الگوی مسیر میتواند چند فایل Parquet را پوشش دهد و گزینه filename = true نام فایل را هم به نتیجه اضافه میکند. خواندن فایلهای دوردست از طریق HTTPS یا S3 نیز ممکن است و در این حالت، extension با نام httpfs خودکار بارگذاری میشود.
Parquet هم داده را به تفکیک ستون ذخیره میکند. DuckDB فقط ستونهای موردنیاز query را میخواند و با استفاده از zonemap، بخشهایی را که کمینه و بیشینه مقادیرشان با شرط query سازگار نیست کنار میگذارد. در مسیرهایی مثل year=2026/pond=north/ نیز نام پوشهها میتواند به ستون تبدیل شود؛ شرط روی این ستونها امکان کنارگذاشتن کامل پوشهها را فراهم میکند.
بخش دیگری از مطلب به کار گروهی روی ستونها اختصاص دارد. EXCLUDE ستونها را از انتخاب حذف میکند و REPLACE مقدار آنها را در خروجی تغییر میدهد. COLUMNS() ستونها را با الگو، فهرست نامها یا lambda انتخاب میکند؛ مثلاً برای محاسبه بیشترین دما یا جایگزینی مقدارهای NULL با صفر. GROUP BY ALL نیز در Aggregation، ستونهای انتخابشدهای را که محاسبه تجمیعی ندارند مبنای گروهبندی قرار میدهد.
نکته عملی مطلب، بررسی تشخیص خودکار نوعهاست. با DESCRIBE میتوان نوع تشخیصدادهشده برای CSV را دید و با گزینه types آن را صریح تعیین کرد. در مثال مقاله، شناسه برکه متن باقی میماند تا صفرهای ابتدایی حفظ شوند. دستور SUMMARIZE هم برای هر ستون اطلاعاتی مانند نوع، کمینه، بیشینه و درصد مقدارهای NULL ارائه میدهد.




