Распаковка встраиваемой аналитической базы данных.
DuckDB — это недавнее дополнение в мире аналитических баз данных. И он использует интересный подход: он хочет быть SQLite для аналитики.

DuckDB был разработан Марком Раасвельдтом и Ханнесом Мюлейзеном, двумя исследователями баз данных из Centrum Wiskunde & Informatica (CWI) в Амстердаме, Голландского национального исследовательского института математики и компьютерных наук.
CWI — это не просто исследовательский институт. Вот уже несколько десятилетий команда продвигает аналитическую базу данных. MonetDB показала преимущества колоночного хранения для аналитики, а Vectorwise внедрила векторизованное выполнение запросов.
Есть даже прямая ссылка на актуальные звезды аналитических баз данных. Марчин Жуковски, главный автор Vectorwise, стал соучредителем Snowflake и Databricks, в 2017 году открыл офис в Амстердаме, чтобы нанять ряд экспертов из проектов Vectorwise и MonetDB.
Кроме того, некий Гвидо Ван Россум был в CWI, когда он создал язык программирования под названием Python, который может прозвенеть.
Благодатная почва для инноваций в области баз данных!
Мотивацией для создания DuckDB является наблюдение авторов, что специалисты по данным в основном работают с библиотеками фреймов данных, такими как Pandas и dplyr, и не используют надлежащую базу данных, основанную на многолетних фундаментальных исследованиях баз данных. Использование базы данных означает новые зависимости для подключения, аутентификацию для управления, передачу данных и т. д. Эти трения необходимо устранить, чтобы база данных рассматривалась. Поэтому они вернулись к самой простой в использовании базе данных: SQLite. Они взяли концепцию базы данных в процессе, но построили ее для аналитики.
Но что мы подразумеваем под аналитикой? Как поясняется на веб-сайте DuckDB: такие рабочие нагрузки характеризуются сложными, относительно длительными запросами, которые обрабатывают значительные части хранимого набора данных, например, агрегирование целых таблиц или объединение нескольких больших таблиц. Ожидается, что изменения в данных также будут довольно масштабными, с добавлением нескольких строк или одновременного изменения или добавления больших частей таблиц.
DuckDB следует подходу SQLite, но не имеет ничего общего с ним. DuckDB основывается на ряде предшественников с открытым исходным кодом. Например, он использует синтаксический анализатор PostgreSQL, первоначальный дизайн был вдохновлен Peloton (исследовательский проект базы данных из Карнеги-Меллона), а первоначальный многоверсионный контроль параллелизма был основан на Hyper (опять же исследовательская база данных из Технического университета). Munchen, приобретенная Tableau).
Ключевым компонентом является механизм выполнения запросов с векторизацией по столбцам. Это означает, что при обработке запроса работа ведется с данными в столбцах, а построение реальных строк откладывается до самого конца выполнения запроса. Это позволяет более эффективно обрабатывать центральным процессором большие объемы данных. В сочетании с рядом других методов и функций, таких как параллельное выполнение, современный оптимизатор и поддержка SQL для произвольных и вложенных коррелированных подзапросов, оконных функций и сложных типов, DuckDB действительно хорошо подходит для аналитических рабочих нагрузок.
DuckDB также имеет собственный столбчатый формат хранения одного файла. Это может быть легко для некоторых встроенных сценариев. Однако я лично не верю, что это будет часто использоваться для сценария науки о данных.
Заработная плата авторов выплачивается из налогов, и они считают своим долгом перед обществом сделать результаты своей работы бесплатными для всех. Поэтому DuckDB выпускается под очень разрешительной лицензией MIT.
Существует также некоммерческая организация DuckDB Foundation, которая собирает средства для дальнейшего развития и владеет большей частью интеллектуальной собственности. Кроме того, теперь есть еще и DuckDB Labs, основанная двумя авторами, которая предоставляет некоторые услуги по продукту.
Аспект, который я больше всего ценю, — это стремление сделать все это легким и простым в эксплуатации. Внешних зависимостей нет, и весь код доступен в виде двух файлов: заголовка и файла реализации, так называемого «объединения».
Разрешающая лицензия и легкость означают, что в будущем DuckDB может появиться в некоторых неожиданных местах. места.
Один из вариантов использования, с которым мы недавно работали, заключался в необходимости выполнения произвольного сложного анализа паркетных данных в хранилище объектов, но с жесткими требованиями к доступности. При этом суммарные данные по отдельным запросам всегда были разумными. Включение DuckDB в качестве библиотеки в существующую настройку микросервисов означает, что мы можем полагаться на существующие механизмы, чтобы поддерживать доступность сервиса и масштабировать его в зависимости от нагрузки. Получить нечто подобное, например, с Presto было бы сложнее и потребовало бы введения ряда новых компонентов.
Наконец, что касается первоначального варианта использования: наука о данных с одним узлом. Работает как заявлено: просто и быстро. Обратите внимание, что помимо явного SQL в Python и R также есть программный API, который позволяет вам шаг за шагом выполнять преобразование. Однако, особенно в Python, сейчас уже существует ряд проектов, пытающихся улучшить панд: Dask, Polars, Clickhouse и многие другие. Стрелка тоже в какой-то степени. Однако необходимость думать о том, когда использовать эти разные двигатели, и манипулирование ими также добавляет трения.
Я с нетерпением жду, как Substrait поможет устранить это трение. Он направлен на предоставление стандартизированного промежуточного языка запросов (более низкого уровня, чем SQL) для подключения внешних пользовательских интерфейсов, таких как SQL или библиотеки фреймов данных, с внутренними аналитическими вычислительными механизмами. Он связан с экосистемой Arrow.
Что-то вроде Ibis или Fugue может стать передним, а DuckDB — внутренним движком.