Learning Platform
Глоссарий Troubleshooting
Урок 01.02 · 18 мин
Средний
course-structurelearning-pathduckdb

Карта курса: от SQL-диалекта до байтов storage-формата

Этот курс устроен по принципу «снаружи внутрь». Сначала вы научитесь пользоваться DuckDB как инструментом — запускать, писать запросы, читать данные. Затем спуститесь на уровень ниже: как движок исполняет эти запросы, как хранит данные на диске, как сжимает, как параллелит. Финал — практический капстоун, где всё собирается в реальный аналитический пайплайн.

Такой порядок не случаен. Понимать внутренности движка осмысленно только тогда, когда вы уже знаете, что движок делает снаружи. Иначе устройство буфер-менеджера — абстракция без опоры. Поэтому первые модули дают рабочий навык, а «до железа» начинается с пятого модуля, когда у вас уже есть контекст. Этот принцип — от знакомого к глубокому — выдержан по всему курсу: каждый новый слой объяснения опирается на уже усвоенный предыдущий.

В этом уроке — карта всех 17 модулей курса, чтобы вы видели маршрут целиком и понимали, зачем каждый следующий шаг.

Зачем вообще нужна карта в начале пути. Курс большой и идёт глубоко — без общей картины легко потерять ощущение, где вы находитесь и куда движетесь. Карта решает это: она показывает структуру заранее, чтобы каждый следующий модуль вы встречали не как изолированную тему, а как очередной шаг по понятному маршруту. Когда в пятом модуле начнётся «до железа», вы будете знать, что это запланированный переход от использования к внутренностям, а не внезапное усложнение. Потратьте несколько минут на этот урок — он окупится ориентированностью на протяжении всего курса.


Четыре больших блока

Семнадцать модулей естественно группируются в четыре блока. Каждый блок отвечает на свой вопрос.

Четыре блока курса
Блок 1. Основы и работаМодули 00-04: что такое DuckDB, CLI и Python API, SQL-диалект, система типов. Отвечает на вопрос: как этим пользоваться
Блок 2. До железаМодули 05-08, 13: векторизованный движок, storage-формат, сжатие, параллелизм, larger-than-memory. Отвечает на вопрос: как это работает внутри
Блок 3. ЭкосистемаМодули 09-12, 14-15: внешние данные, расширения, Python-стек, транзакции и оптимизатор, запись данных, DuckDB everywhere. Отвечает на вопрос: как встроить DuckDB в реальный стек
Блок 4. КапстоунМодуль 16: сквозной проект — локальный аналитический lakehouse от сырых файлов до публикации результата

Дальше — что именно в каждом блоке, модуль за модулем, чтобы карта стала по-настоящему детальной.


Блок 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-стек.

Блок интеграции: что соединяет DuckDB с миром
Внешние данныеМодуль 09: чтение Parquet, CSV, JSON напрямую с диска без импорта, с projection и filter pushdown
РасширенияМодуль 10: httpfs для S3/GCS, сканеры postgres/mysql/sqlite, форматы Iceberg/Delta, spatial, fts, vss
Python-стекМодуль 11: replacement scans для pandas/Polars, zero-copy через Arrow, relational API
Запись и DuckLakeМодули 14-15: INSERT/COPY/MERGE, шифрование, DuckDB-WASM, MotherDuck, lakehouse-формат DuckLake

Модуль 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 складываются в реальный пайплайн. Именно здесь отдельные кусочки превращаются в цельную инженерную картину.

TIP

Модули не обязательно проходить строго подряд, но блок 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)? Второй: какие три модуля вы прошли бы первыми, если бы у вас была всего неделя? Запишите ответ — в конце курса вернётесь к нему и проверите, изменилось ли ваше представление о том, что важно. Такое сравнение «до и после» — хороший способ увидеть, чему именно курс вас научил.


Проверка знанийKnowledge check
Почему курс устроен по принципу «снаружи внутрь» — сначала использование, потом внутренности движка — а не наоборот?
ОтветAnswer
Внутреннее устройство движка осмысленно изучать только тогда, когда уже понятно, что движок делает снаружи. Если начать с буфер-менеджера, векторов и storage-формата, эти абстракции повисают без опоры: непонятно, какую наблюдаемую задачу они решают. Поэтому первый блок курса (модули 00-04) даёт рабочий навык — установить DuckDB, писать SQL, читать данные — и формирует контекст. Только после этого, с пятого модуля, курс спускается «до железа»: теперь, когда читатель знает, что такое запрос и результат, становится осмысленным вопрос, как движок исполняет этот запрос, как хранит и сжимает данные, как параллелит. Такой порядок превращает изучение внутренностей из заучивания терминов в понимание причин: каждый внутренний механизм объясняется как ответ на уже знакомую читателю задачу.

Проверьте понимание

Результат: 0 из 0
Концептуальный
Вопрос 1 из 4. Почему курс изучает внутреннее устройство движка (блок «до железа») только после блока про использование DuckDB?

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 3