DuckDB

Бэкап DuckDB: версии аналитических баз в облаке

DuckDB хранит всё в одном файле — и это одновременно удобство и риск. dbsend сохраняет файлы .duckdb версиями в российском облаке, показывает, какие таблицы и сколько строк в каждой версии, и возвращает нужную версию одной командой.

Почему файлы DuckDB теряются чаще, чем кажется

DuckDB часто живёт на ноутбуке аналитика, в папке проекта с Jupyter или на сервере ETL. Такие файлы редко попадают в обычную систему бэкапов: они слишком большие для git, а в облачный диск их копируют вручную и нерегулярно.

Пересчёт витрин бывает дорогим: исходные выгрузки могли устареть или исчезнуть, а скрипты загрузки — измениться. Потеря файла с накопленными агрегатами означает часы или дни повторной работы.

Есть и техническая тонкость: если скопировать файл, пока в него пишет процесс, часть изменений может остаться в WAL-файле. Перед копированием нужен CHECKPOINT или закрытие соединений.

Как dbsend работает с DuckDB

Версии файла .duckdb

Каждая загрузка — версия vN с размером, SHA-256 и меткой. Повторная загрузка неизменённого файла не создаёт дубль.

Инспекция без скачивания

Для каждой версии видно список таблиц, DDL и оценку числа строк — можно понять, что внутри, не открывая файл локально. Тарифы от «Старт».

Diff между версиями

Сравните две версии и увидите, какие таблицы появились, исчезли или изменились по числу строк. Удобно после ночного пересчёта витрин.

Из ETL и CI

Одна команда после пайплайна: dbsend backup analytics.duckdb. Коды выхода и повторы при сбоях сети позволяют встраивать её в Airflow, Dagster, cron или GitHub Actions.

Настройка бэкапа DuckDB

Создайте в панели базу с типом duckdb и API-ключ, установите CLI (Node.js 22.12+) и сохраните ключ командой dbsend login.

1. Подготовка и загрузка

# Сбросьте WAL в основной файл перед копированием
duckdb analytics.duckdb -c "CHECKPOINT;"

dbsend init --database <id базы> --engine duckdb
dbsend backup ./analytics.duckdb -l "после пересчёта витрин"

Если файл открыт другим процессом на запись, сначала завершите его работу или выполните CHECKPOINT из него.

2. После ETL-пайплайна

python etl/build_marts.py \
  && duckdb warehouse.duckdb -c "CHECKPOINT;" \
  && dbsend backup ./warehouse.duckdb -l "marts-$(date +%F)"

3. В GitHub Actions

- run: npm install -g @dbsend/sdk
- run: dbsend backup ./warehouse.duckdb -d ${{ vars.DBSEND_DATABASE_ID }} -e duckdb
  env:
    DBSEND_API_KEY: ${{ secrets.DBSEND_API_KEY }}

Переменная DBSEND_API_KEY имеет приоритет над сохранённым ключом — удобно для CI.

4. Восстановление

dbsend log
dbsend restore <id версии> ./analytics.duckdb --yes

CLI скачивает версию во временный файл, сверяет SHA-256 и атомарно заменяет целевой файл.

Бэкап файла или EXPORT DATABASE?

DuckDB умеет выгружать базу командой EXPORT DATABASE в набор Parquet- или CSV-файлов. Это хороший способ переноса между версиями DuckDB, но для регулярного бэкапа удобнее хранить сам файл .duckdb: он восстанавливается мгновенно, а dbsend показывает его содержимое и diff.

Формат хранения DuckDB стабилен начиная с версии 1.0, но при крупных обновлениях движка всё равно полезно периодически делать и экспорт. Каталог экспорта можно упаковать в архив и хранить в dbsend как generic-файл — с версиями и контрольной суммой.

dbsend или копирование файла вручную

cp / rclone в бакетdbsend
Таблицы и оценка строк для каждой версииот «Старт»
Встраивание в ETL с кодами выходасвой скрипт
Время на настройкускрипт, бакет, ключи, ротация — часы3 команды — несколько минут
История версий с меткамиимена файлов по датеv1…vN, метки, закрепление
Не плодит одинаковые копии
Diff между версиями (таблицы, строки, схема)на платных тарифах
Проверка SHA-256 при восстановленииесли написали сами
Алерт, если бэкап не пришёлTelegram и email
Шифрование и хранение в РФзависит от бакетаAES-256-GCM, РФ
Доступ из Claude Code и Cursor (MCP)
Стоимостьхранилище + ваше времяот 0 ₽

Тарифы и лимиты — на странице «Тарифы». Документация: CLI, форматы файлов, MCP.

Частые вопросы

Какие расширения файлов поддерживаются?

Файлы DuckDB с расширениями .duckdb, .ddb и .db. Тип базы при создании — duckdb.

Нужно ли останавливать процесс, который пишет в DuckDB?

Желательно выполнить CHECKPOINT или закрыть соединения перед бэкапом: тогда все изменения окажутся в основном файле, а не во временном WAL. Для read-only файлов ничего делать не нужно.

Можно ли хранить Parquet-файлы?

Да, как generic-файлы: с версиями, SHA-256 и восстановлением, но без разбора таблиц. Для набора файлов упакуйте каталог в архив.

Какой максимальный размер файла?

До 100 МБ на бесплатном тарифе, 500 МБ на «Старт», 2 ГБ на «Про» и «Команде». Файлы больше 32 МБ CLI загружает частями автоматически.

Можно ли посмотреть версии из Claude Code или Cursor?

Да. Подключите hosted MCP dbsend — агент сможет показать список версий, сравнить две версии и подготовить ссылку на скачивание нужной.

Статьи по теме

Все статьи →

Другие сценарии

Сохраните первую версию DuckDB

Бесплатный тариф: 1 база, 500 МБ и 3 версии навсегда. Карта не нужна.

Начать бесплатно →