Карта курса: от SQL-диалекта до байтов storage-формата
Этот курс устроен по принципу «снаружи внутрь». Сначала вы научитесь пользоваться DuckDB как инструментом — запускать, писать запросы, читать данные. Затем спуститесь на уровень ниже: как движок исполняет эти запросы, как хранит данные на диске, как сжимает, как параллелит. Финал — практический капстоун, где всё собирается в реальный аналитический пайплайн.
Такой порядок не случаен. Понимать внутренности движка осмысленно только тогда, когда вы уже знаете, что движок делает снаружи. Иначе устройство буфер-менеджера — абстракция без опоры. Поэтому первые модули дают рабочий навык, а «до железа» начинается с пятого модуля, когда у вас уже есть контекст. Этот принцип — от знакомого к глубокому — выдержан по всему курсу: каждый новый слой объяснения опирается на уже усвоенный предыдущий.
В этом уроке — карта всех 17 модулей курса, чтобы вы видели маршрут целиком и понимали, зачем каждый следующий шаг.
Зачем вообще нужна карта в начале пути. Курс большой и идёт глубоко — без общей картины легко потерять ощущение, где вы находитесь и куда движетесь. Карта решает это: она показывает структуру заранее, чтобы каждый следующий модуль вы встречали не как изолированную тему, а как очередной шаг по понятному маршруту. Когда в пятом модуле начнётся «до железа», вы будете знать, что это запланированный переход от использования к внутренностям, а не внезапное усложнение. Потратьте несколько минут на этот урок — он окупится ориентированностью на протяжении всего курса.
Четыре больших блока
Семнадцать модулей естественно группируются в четыре блока. Каждый блок отвечает на свой вопрос.
Дальше — что именно в каждом блоке, модуль за модулем, чтобы карта стала по-настоящему детальной.
Блок 1: основы и работа (модули 00-04)
Здесь вы получаете рабочий навык. После этого блока вы сможете установить DuckDB, открыть его и решать реальные аналитические задачи на SQL. Это самодостаточный результат: даже если дальше блоков вы пока не пойдёте, после блока 1 DuckDB уже становится вашим рабочим инструментом для аналитики.
Модуль 01 «Что такое DuckDB» — позиционирование и происхождение. Откуда движок взялся: исследовательская группа CWI в Амстердаме, авторы Mark Raasveldt и Hannes Mühleisen, статья на SIGMOD 2019. Линия векторизации от MonetDB через X100/Vectorwise. Когда DuckDB уместен, а когда — анти-паттерн. Это исторический и концептуальный фундамент.
Модуль 02 «Первые шаги» — CLI и клиентские API. Запуск из командной строки, dot-команды, разница in-memory и persistent-файла. Python API как главный клиент. Обзор остальных клиентов: R, Node.js, Java, Rust, Go. Конфигурация через SET и PRAGMA. Чтение планов через EXPLAIN.
Модуль 03 «Friendly SQL» — диалект DuckDB. У DuckDB много синтаксических расширений, делающих SQL короче и удобнее: FROM-first синтаксис, SELECT * EXCLUDE, GROUP BY ALL, QUALIFY, PIVOT, list comprehensions, ASOF JOIN. Это не косметика — это инструменты, которые ускоряют ежедневную работу.
Модуль 04 «Система типов» — от примитивных типов до вложенных. STRUCT, LIST, MAP, UNION, ENUM. Новые типы VARIANT и GEOMETRY, ставшие core-типами в версии 1.5. Как дата и время хранятся внутри как Unix-смещения.
Блок 2: до железа (модули 05-08, 13)
Это сердце курса и то, что отличает его от поверхностного руководства. Здесь вы перестаёте быть пользователем и становитесь человеком, который понимает, почему DuckDB быстрый, — а понимание механизмов и есть то, что превращает рядового пользователя в эксперта.
Модуль 05 «Векторизованный движок» — как DuckDB исполняет запросы. Vector-at-a-time против обработки по одной строке. Магическое число STANDARD_VECTOR_SIZE = 2048 и почему именно столько (связь с кэшами процессора и SIMD). Vector и DataChunk. Пять физических типов вектора. Push-based исполнение и конвейер parser -> binder -> optimizer -> physical plan.
Модуль 06 «Storage-формат изнутри» — как DuckDB хранит данные на диске. Single-file формат: заголовок, магические байты DUCK, контрольная сумма. Блоки по 256 KiB. Row groups по ~122 880 строк. Колоночные сегменты и zonemaps. WAL и checkpointing. Версионирование storage-формата.
Модуль 07 «Колоночное сжатие» — алгоритмы сжатия с нуля. RLE, bit packing, Frame of Reference, dictionary, FSST для строк, Chimp/Patas/ALP для чисел с плавающей точкой. Двухпроходный analyze/compress, которым DuckDB сам выбирает схему на каждый сегмент.
Модуль 08 «Параллелизм» — morsel-driven execution. Pipeline-модель, pipeline breakers. Что такое morsel и как диспетчер раздаёт их потокам. Параллельное сканирование, параллельный hash join, параллельная агрегация.
Модуль 13 «Larger-than-memory» — out-of-core исполнение. Buffer manager. Как DuckDB спиллит на диск при нехватке памяти: external hash aggregation, external hash join, external sort. Как обработать датасет больше RAM.
Почему именно эти пять модулей образуют сердце курса. Все они отвечают на один большой вопрос — «почему DuckDB быстрый» — но с разных сторон. Векторизованный движок объясняет, почему быстро исполняются запросы. Storage-формат — почему быстро читаются данные. Сжатие — почему данных на диске и в памяти меньше, а значит, их быстрее читать. Параллелизм — почему задействуются все ядра машины. Larger-than-memory — почему движок не падает на больших данных. Вместе эти пять модулей дают полную картину производительности DuckDB. После них фраза «DuckDB быстрый» перестаёт быть лозунгом и становится набором конкретных, понятных вам механизмов. Это и есть смысл блока «до железа»: не запомнить, что движок быстрый, а понять, из чего эта скорость складывается.
Блок 3: экосистема (модули 09-12, 14-15)
Здесь DuckDB перестаёт быть изолированным движком и встраивается в реальный data-стек.
Модуль 09 «Внешние данные» — чтение файлов без импорта. DuckDB умеет запросить Parquet/CSV/JSON прямо там, где они лежат: SELECT * FROM 'file.parquet'. CSV-sniffer, который сам определяет формат. Hive-партиционирование и partition pruning.
Модуль 10 «Расширения» — модульная экосистема. Core против community расширений. httpfs для чтения из S3/GCS/Azure. Сканеры баз для federated-запросов к PostgreSQL/MySQL. Lakehouse-форматы Iceberg, Delta, Lance.
Модуль 11 «Python-стек» — глубокая интеграция с Python. Replacement scans: запрос pandas/Polars DataFrame прямо в SQL. Zero-copy interop через Arrow. Relational API. UDF.
Модуль 12 «Транзакции и оптимизатор» — ACID, MVCC, snapshot-изоляция. Модель конкурентности. Оптимизатор: rule-based и cost-based проходы. Join order optimization через алгоритм DPccp. Pushdown-оптимизации.
Модуль 14 «Запись данных» — INSERT, COPY, партиционированная запись, UPDATE/DELETE/MERGE INTO. EXPORT DATABASE. Шифрование AES-256-GCM, появившееся в 1.4.
Модуль 15 «DuckDB everywhere» — DuckDB-WASM в браузере, MotherDuck как managed cloud, и DuckLake — lakehouse-формат от DuckDB Labs, достигший версии 1.0 в апреле 2026.
Блок 4: капстоун (модуль 16)
Финальный модуль — сквозной практический проект. Вы построите локальный аналитический lakehouse: от сырых Parquet/CSV на object storage через ELT-слой на friendly SQL до партиционированных витрин с инкрементальными апдейтами через MERGE. По дороге — out-of-core агрегация датасета больше RAM, бенчмаркинг DuckDB против pandas и Spark, и публикация результата через DuckDB-WASM. Завершается разбором архитектуры и code review.
Капстоун не вводит новых тем — он соединяет уже изученное в одну работающую систему. Это важная часть обучения: знание, разложенное по отдельным модулям, и знание, собранное в сквозной проект, — разные вещи. В капстоуне вы увидите, как friendly SQL из третьего модуля, типы из четвёртого, понимание производительности из блока «до железа», чтение внешних данных, расширения и DuckLake складываются в реальный пайплайн. Именно здесь отдельные кусочки превращаются в цельную инженерную картину.
Модули не обязательно проходить строго подряд, но блок 2 («до железа») имеет смысл только после блока 1. Если ваша цель — быстро начать пользоваться DuckDB, пройдите модули 00-04 и 09, а внутренности изучите позже. Если цель — глубокое понимание движка, идите по порядку: каждый модуль блока 2 опирается на предыдущий.
Как связаны блоки между собой
Четыре блока — не четыре изолированных раздела, а последовательность, в которой каждый опирается на предыдущий. Полезно увидеть эти связи явно.
Блок 1 (основы) даёт словарь и навык. После него вы знаете, что такое запрос, результат, тип данных, план запроса. Без этого словаря остальные блоки нечитаемы: нельзя объяснять, как движок исполняет запрос, человеку, который ещё не написал ни одного запроса.
Блок 2 (до железа) даёт понимание механизмов. Он отвечает на «почему» для всего, что вы научились делать в блоке 1. Почему запрос быстрый, почему данные занимают мало места, почему задействуются все ядра. Этот блок строго опирается на блок 1 и при этом готовит почву для блока 3: например, чтобы понять filter pushdown при чтении внешних файлов, надо уже знать про zonemaps из модуля про storage.
Блок 3 (экосистема) даёт связи с внешним миром. Он показывает, как встроить DuckDB в реальный стек — файлы, облако, другие СУБД, Python. Многие вещи здесь становятся по-настоящему понятны только с механизмами из блока 2: почему zero-copy с pandas дёшев, почему чтение Parquet эффективно.
Блок 4 (капстоун) собирает всё вместе в сквозной проект.
Поэтому, хотя формально модули можно проходить выборочно, логика курса — восходящая: словарь, затем механизмы, затем интеграция, затем синтез. Двигаясь по порядку, вы каждый раз опираетесь на уже прочный фундамент.
Чего этот курс не делает
Полезно очертить и границы курса — чтобы у вас были верные ожидания.
Курс не учит SQL с абсолютного нуля. Предполагается, что базовый SQL — SELECT, WHERE, JOIN, GROUP BY — вам знаком. Курс учит DuckDB: его диалект, его движок, его экосистему. Если базового SQL пока нет, его стоит освоить отдельно — это быстро, и тогда курс ляжет ровно.
Курс не является справочником по каждой функции DuckDB. Функций в DuckDB сотни, и заучивать их список бессмысленно — для этого есть документация. Курс даёт другое: понимание устройства и принципов, с которым вы сможете осмысленно пользоваться документацией и быстро осваивать любую функцию.
Курс не превращает вас в разработчика ядра DuckDB. Мы идём «до железа», чтобы вы понимали движок как пользователь-эксперт, — но цель не написать свой движок, а грамотно и глубоко применять существующий.
Если коротко: курс делает из вас инженера, который понимает DuckDB до уровня механизмов и применяет его осознанно. Это и есть заявленная планка — лучший курс по DuckDB в своей категории.
Каждый урок устроен одинаково
Чтобы вам было легче ориентироваться, все уроки курса следуют одной структуре. Вводный абзац объясняет, какую проблему решает урок. Дальше идут смысловые разделы с диаграммами и реальными примерами кода с реальным выводом — не псевдокодом, а тем, что вы увидите, если выполните команду сами. Ближе к концу — блок «Попробуй сам» с практическим заданием. В самом конце — вопрос на понимание ключевой идеи.
После каждого урока — квиз из четырёх вопросов на закрепление. После каждого модуля — экзамен из шести вопросов, объединяющий темы всего модуля. Экзамены глубже поурочных квизов: они проверяют не запоминание, а способность применять и сравнивать.
Эта повторяющаяся структура — не формальность, а часть метода. Вводный абзац настраивает на проблему, разделы с реальными примерами объясняют решение, блок «Попробуй сам» переводит знание в навык, а финальный вопрос и квиз проверяют понимание. Знание закрепляется, только когда оно проверено и применено руками, — поэтому не пропускайте практические блоки и квизы — они и есть то, что превращает прочитанное в усвоенное.
Попробуй сам
Откройте research-источники, на которых построен курс, и составьте свой план. Зайдите на https://duckdb.org/docs/ и посмотрите оглавление официальной документации. Сравните его с картой курса из этого урока.
Затем ответьте себе на два вопроса. Первый: какой блок курса вам нужнее всего прямо сейчас — основы (блок 1), внутренности (блок 2) или интеграция (блок 3)? Второй: какие три модуля вы прошли бы первыми, если бы у вас была всего неделя? Запишите ответ — в конце курса вернётесь к нему и проверите, изменилось ли ваше представление о том, что важно. Такое сравнение «до и после» — хороший способ увидеть, чему именно курс вас научил.