Apache Drill на собеседовании Data Engineer

Проверь себя · 1/3разбор после ответа
В EXPLAIN вашего отчёта видно, что выполняется Sort по created_at на очень большом наборе строк. Какое действие чаще всего помогает уменьшить работу сортировки?

Что такое Drill

Apache Drill — это движок SQL-запросов поверх множества источников сразу: файлов, NoSQL-хранилищ и обычных баз. Идея в том, чтобы писать привычный SQL к данным, которые лежат где угодно — в Parquet-файлах, в MongoDB, в HBase — не перегружая их предварительно в единое хранилище.

SELECT * FROM dfs.`/data/file.parquet` WHERE col > 100;
SELECT * FROM mongo.users.profiles;
SELECT * FROM hbase.events;

Drill вдохновлён Google Dremel и стал проектом Apache примерно в 2014–2015 годах. На собесе про него вспоминают редко и обычно в контексте федеративных запросов (federated query) и работы с полуструктурированными данными. Если Drill всплыл, интервьюер, скорее всего, хочет проверить, понимаете ли вы идею schema-on-read и чем такой движок отличается от Trino.

Schema-free

Главная фишка Drill — работа без заранее заданной схемы (schema-free, или schema-on-read). Движок определяет структуру данных прямо во время чтения, поэтому не нужно описывать таблицы через DDL перед запросом.

SELECT * FROM dfs.`/data/file.json`;
-- Drill сам выводит схему из структуры JSON.
  • Плюсы. Быстрый разведочный анализ: можно направить SQL на сырой JSON или каталог файлов и сразу что-то посчитать, не тратя время на определение схемы.
  • Минусы. Автоопределение типов ошибается — например, число может быть прочитано как строка, а вложенные структуры интерпретированы неоднозначно. Без объявленной схемы страдает и производительность: движку приходится выводить типы на лету.

Кластер drillbit'ов

Drillbit — это процесс-демон, который выполняет запросы; на каждом узле кластера работает свой drillbit. Между собой узлы координируются через ZooKeeper, и любой из них может стать координатором (foreman) для конкретного запроса — выделенного мастер-узла нет.

Каждый запрос разбивается на фрагменты, которые выполняются параллельно на разных drillbit'ах, а обработка идёт в памяти в колоночном виде. Архитектурно это близко к Trino: тоже распределённое выполнение без промежуточной записи на диск между стадиями.

Готовишься к собесу Data Engineer?
Spark, Airflow, ClickHouse, SQL для DE — вопросы с разборами в Telegram
Тренировать DE в Telegram

Drill против Trino / Presto

Drill — нишевый инструмент. В пространстве федеративного SQL сегодня доминирует Trino (бывший PrestoSQL), и именно его чаще встречают в проде.

В чём Drill сильнее:

  • Schema-free по полуструктурированным данным. Drill исторически удобнее для запросов к «грязному» JSON и вложенным структурам без предварительной схемы.
  • Простота на разведочных задачах. Меньше настройки, чтобы просто заглянуть в файлы.

В чём сильнее Trino:

  • Экосистема больше. Вокруг Trino сложилось заметно больше инструментов, интеграций и коммьюнити.
  • Коннекторы лучше. Богаче и стабильнее набор коннекторов к источникам.
  • Активнее развивается. Trino получает регулярные релизы, тогда как активность вокруг Drill заметно ниже.

В большинстве случаев на проде выбирают Trino. Правильный вывод для собеса: Drill полезно знать как альтернативу для schema-free сценариев, но по умолчанию для федеративной аналитики берут Trino.

Частые ошибки

  • Считать Drill заменой хранилищу. Drill — это движок запросов поверх источников, а не место хранения данных. Он не заменяет ClickHouse или DWH, а ходит в них и в файлы поверху.
  • Полагаться на автоопределение типов в проде. Schema-on-read удобен для разведки, но на регулярных пайплайнах ошибки вывода типов и просадка производительности делают его рискованным без объявленной схемы.
  • Путать Drill с Trino по популярности. На собесе стоит честно сказать, что де-факто стандартом стал Trino, а Drill — нишевый вариант.

Связанные темы

FAQ

Что такое Apache Drill простыми словами?

Это распределённый движок SQL-запросов, который умеет ходить в разные источники — файлы (Parquet, JSON, CSV), NoSQL (MongoDB, HBase), реляционные базы — и запрашивать их обычным SQL без предварительной загрузки в единое хранилище.

Что значит schema-free и в чём подвох?

Drill определяет структуру данных во время чтения, поэтому не нужно заранее описывать таблицы. Плюс — быстрый разведочный анализ сырых данных. Подвох — ошибки автоопределения типов и просадка производительности без объявленной схемы, из-за чего для стабильных пайплайнов подход рискованный.

Что такое drillbit?

Это процесс-исполнитель Drill, работающий на каждом узле кластера. Узлы координируются через ZooKeeper, любой drillbit может стать координатором запроса, а сам запрос дробится на фрагменты и выполняется параллельно в памяти.

Drill или Trino — что выбрать?

В большинстве случаев Trino: у него больше экосистема, лучше коннекторы и активнее развитие. Drill имеет смысл рассматривать в нишевых schema-free сценариях с полуструктурированными данными, но как стандарт для федеративной аналитики берут Trino.

Это официальная информация?

Нет. Статья основана на документации Apache Drill и опыте кандидатов. Конкретные требования зависят от компании, команды и уровня позиции.


Тренируйте Data Engineering — откройте тренажёр с 1500+ вопросами для собесов.