DuckDB и DuckLake: путь инженера
История data engineer Matt Martin о переходе от сложных big data-платформ к простому SQL-инструменту DuckDB и его расширению DuckLake для аналитики без тяжёлой инфраструктуры.
privacy
Эта заметка участвует в semantic memory.
AI Summary
🚀 TL;DR Matt Martin, data engineer с 2008 года, после Teradata, BigQuery и Spark перешёл на DuckDB и DuckLake: они позволяют выполнять аналитику над CSV, Parquet, Iceberg и S3 без JVM, сложной настройки и тяжёлой инфраструктуры.
📖 Что это такое DuckDB — встраиваемая аналитическая СУБД с SQL-интерфейсом, работающая локально и с облачными хранилищами. DuckLake — надстройка над DuckDB, хранящая метаданные lakehouse в обычной SQL-БД вместо множества JSON-файлов Iceberg.
🔑 Ключевые факты
- Карьера началась в 2008 с Excel → VBA → SQL Server → Teradata → BigQuery → Spark.
- DuckDB: импорт CSV двумя строками, работа с S3 через s3://, поддержка Iceberg.
- DuckLake: метаданные в SQL → планирование запросов <1 мс вместо секунд.
- DuckDB 2.0: динамический ATTACH (env-переменные), асинхронный I/O (67–70 % ускорение), протокол Quack.
- Автор пишет книгу про DuckLake и ведёт Substack.
⚙️ Как это работает
- Установка:
import duckdb; duckdb.sql("FROM 'sales.csv'"). - S3:
CREATE SECRET (TYPE s3, PROVIDER credential_chain);. - Iceberg:
INSTALL iceberg; LOAD iceberg;. - DuckLake:
ATTACH 'ducklake:metadata.ducklake' AS my_lake (DATA_PATH 's3://bucket/prefix/');. - Glue-каталог: три команды вместо 20+ строк Spark-конфигурации.
- DuckDB 2.0:
ATTACH getenv('AWS_ACCOUNT_ID'), чтение 1000–10 000 файлов на 67–70 % быстрее.
💡 Вывод и значение DuckDB и DuckLake показывают, что для большинства аналитических задач не нужна распределённая инфраструктура: достаточно SQL, объектного хранилища и минимальной настройки. Принцип: добавлять сложность только когда требования workload это оправдывают.
📌 Важные детали
- Matt Martin, Substack: статьи про DuckDB/DuckLake.
- Контакт для историй: stories@duckdb.org.
- DuckDB 2.0 LTS “Cinnamon Teal” в стадии alpha-тестирования.
- Quack: HTTP-протокол для удалённого подключения DuckDB-инстансов.