Установка
Нужны две вещи: DuckDB и учебные файлы.
Работаем в терминале. Если он незнаком, пройдите курс CLI.
Шаг 1. DuckDB
Заголовок раздела «Шаг 1. DuckDB»Если DuckDB уже стоит после курса SQL, пропустите шаг. Проверьте:
duckdb --versionНужна версия 1.1 или новее. Если DuckDB нет, установите:
brew install duckdbwinget install DuckDB.clicurl https://install.duckdb.org | shПодробнее — в установке из курса SQL.
Шаг 2. Учебные файлы
Заголовок раздела «Шаг 2. Учебные файлы»cd ~curl -L -o modeling-practice.tar.gz https://dataengineer.ru/assets/practice/modeling-practice.tar.gztar xzf modeling-practice.tar.gzcd modeling-practicels dataПроверка: ls data показывает девять файлов:
categories.csv customers.csv order_items.csv products.csv stores.csvcustomer_changes.csv inventory.csv orders.csv returns.csvЧто за данные
Заголовок раздела «Что за данные»Это выгрузка из OLTP-базы магазина спортивных товаров «Волна». Период: январь–июнь 2025. У магазина есть онлайн-магазин и три точки: Москва, Санкт-Петербург, Казань.
Данные учебные. Мы их сгенерировали, но сделали похожими на настоящие: есть гости без карты, отменённые заказы, рост цен в апреле и переезды клиентов.
| Файл | Строк | Что внутри |
|---|---|---|
categories.csv | 5 | Категории товаров |
products.csv | 20 | Товары: SKU, бренд, категория, текущая цена |
stores.csv | 4 | Магазины: город, регион, тип (online / offline) |
customers.csv | 300 | Клиенты на 1 января 2025: город, сегмент |
customer_changes.csv | 30 | Журнал изменений клиентов: переезды и переход в VIP |
orders.csv | 2000 | Заказы (шапка): клиент, магазин, даты, статус, доставка |
order_items.csv | 3501 | Позиции заказов: товар, количество, цена, скидка |
inventory.csv | 2370 | Остаток товара в магазине на конец каждого дня июня |
returns.csv | 216 | Возвраты товаров (для итоговой практики) |
Так выглядит схема источника. Это нормализованная модель (3NF): каждая сущность — в своей таблице.

Шаг 3. Загружаем источник в DuckDB
Заголовок раздела «Шаг 3. Загружаем источник в DuckDB»Откройте базу modeling.duckdb (файл создастся сам):
duckdb modeling.duckdbИсточник кладём в отдельную схему src. Так сырые таблицы не смешаются с моделью, которую мы построим.
CREATE SCHEMA IF NOT EXISTS src;
CREATE OR REPLACE TABLE src.categories AS SELECT * FROM 'data/categories.csv';CREATE OR REPLACE TABLE src.products AS SELECT * FROM 'data/products.csv';CREATE OR REPLACE TABLE src.stores AS SELECT * FROM 'data/stores.csv';CREATE OR REPLACE TABLE src.customers AS SELECT * FROM 'data/customers.csv';CREATE OR REPLACE TABLE src.customer_changes AS SELECT * FROM 'data/customer_changes.csv';CREATE OR REPLACE TABLE src.orders AS SELECT * FROM 'data/orders.csv';CREATE OR REPLACE TABLE src.order_items AS SELECT * FROM 'data/order_items.csv';CREATE OR REPLACE TABLE src.inventory AS SELECT * FROM 'data/inventory.csv';CREATE OR REPLACE TABLE src.returns AS SELECT * FROM 'data/returns.csv';Проверьте, что всё загрузилось:
SELECT table_name, estimated_size AS rowsFROM duckdb_tables()WHERE schema_name = 'src'ORDER BY table_name;Проверка: девять таблиц, число строк совпадает с таблицей выше.
Посмотрите на заказы:
SELECT * FROM src.orders LIMIT 5;Таблицы остаются в файле modeling.duckdb. В следующий раз просто откройте его: duckdb modeling.duckdb. Запускайте DuckDB всегда из папки modeling-practice. Выйти: .exit.
Если что-то не работает
Заголовок раздела «Если что-то не работает»No files found that match the pattern "data/...". Вы не в папкеmodeling-practice. Выйдите (.exit), выполнитеcd ~/modeling-practiceи откройте базу снова.Could not set lock on file. База открыта в другом окне. Закройте его.- Русские буквы выглядят как
???(Windows). Выполнитеchcp 65001в терминале перед запуском DuckDB.
Дальше: OLTP и OLAP: зачем моделировать.