Hugging Face Hub хранит более 50 000 публичных датасетов, включая наборы для обучения Falcon, Dolly, MPT и StarCoder. Обычный сценарий анализа таких данных выглядит так: найти датасет, скачать несколько гигабайт, распаковать, загрузить в pandas или Spark. Это медленно и требует свободного места на диске. Интеграция DuckDB с Hugging Face Hub меняет подход: SQL-запросы выполняются напрямую к удалённым Parquet-файлам через HTTP. Скачивание не требуется.
Технически это работает благодаря двум компонентам. Hugging Face автоматически конвертирует все публичные датасеты в колоночный формат Parquet и предоставляет эндпоинт /parquet с прямыми ссылками на файлы. DuckDB через расширение httpfs читает эти файлы по HTTP и выполняет агрегации, фильтрацию и группировку на удалённых данных. Файл размером 500 МБ обрабатывается без локального хранения. Вы получаете результат запроса, а не сам датасет.
Этот подход закрывает главную боль исследователей: не нужно ждать загрузки и чистить диск после экспериментов. Вы пишете SQL, получаете ответ и решаете, стоит ли скачивать датасет целиком для дальнейшей работы. Для быстрой проверки гипотез и разведочного анализа этого достаточно.
Как работает интеграция DuckDB с Hugging Face Hub
Связка DuckDB и Hugging Face Hub опирается на три элемента: колоночный формат Parquet, эндпоинт /parquet и расширение httpfs для чтения файлов по HTTP. Каждый элемент решает свою задачу, а вместе они дают возможность выполнять аналитические запросы без локального хранения данных.
Почему Parquet?
Parquet - колоночный формат хранения. В отличие от CSV или JSON, где строка читается целиком, Parquet позволяет обращаться только к нужным столбцам. Если в датасете 50 колонок, а для запроса нужны три, DuckDB прочитает только эти три. Это снижает сетевой трафик и ускоряет выполнение запроса.
DuckDB имеет встроенную поддержку Parquet. Функция read_parquet принимает локальный путь или URL и автоматически определяет схему. Для удалённых файлов дополнительно подключается httpfs, который обрабатывает HTTP-запросы, частичную загрузку и кэширование. Колоночная структура Parquet позволяет DuckDB пропускать ненужные блоки данных на уровне файла, что особенно важно при работе по сети.
Hugging Face конвертирует датасеты в Parquet автоматически. Для любого публичного датасета можно открыть вкладку Files и найти файлы с расширением .parquet. Эндпоинт /parquet отдаёт прямые ссылки на эти файлы, которые можно передавать в read_parquet.
Пошаговое руководство: SQL-запрос к датасету Hugging Face
Для работы понадобится DuckDB. Установить его можно через pip, brew, apt или скачать бинарный файл с официального сайта. Версия должна быть не ниже 0.8.0, так как в более ранних версиях расширение httpfs работало нестабильно с удалёнными Parquet-файлами.
Первый шаг - подключение расширения. В CLI DuckDB или в Python-клиенте выполните две команды:
INSTALL httpfs;
LOAD httpfs;Расширение устанавливается один раз, загружается при каждом новом сеансе. После этого DuckDB готов читать файлы по HTTP.
Второй шаг - получение URL Parquet-файла. Откройте страницу датасета на Hugging Face Hub, перейдите на вкладку Files и найдите файл с расширением .parquet. Либо используйте API: замените username/dataset_name на нужный идентификатор и запросите https://huggingface.co/api/datasets/username/dataset_name/parquet. Ответ вернёт список URL для train, test и validation сплитов.
Третий шаг - выполнение запроса. Передайте URL в функцию read_parquet:
SELECT *
FROM read_parquet('https://huggingface.co/datasets/username/dataset_name/resolve/main/data/train.parquet')
LIMIT 10;DuckDB скачает только метаданные и первые блоки, необходимые для вывода 10 строк. Весь файл на диск не сохраняется.
Пример: анализ датасета Falcon
Рассмотрим датасет Falcon, который содержит текстовые инструкции и ответы. Предположим, что URL файла уже получен. Запрос с группировкой и агрегацией выглядит так:
SELECT
language,
COUNT(*) AS total_rows,
AVG(LENGTH(instruction)) AS avg_instruction_length,
AVG(LENGTH(response)) AS avg_response_length
FROM read_parquet('https://huggingface.co/datasets/tiiuae/falcon-refinedweb/resolve/main/data/train.parquet')
GROUP BY language
ORDER BY total_rows DESC
LIMIT 20;Запрос считает количество записей по языкам, среднюю длину инструкций и ответов. DuckDB читает только столбцы language, instruction и response, игнорируя остальные. Для файла в несколько сотен мегабайт выполнение занимает секунды, в зависимости от скорости сети.
Можно обращаться к нескольким файлам одновременно. Если датасет разбит на шарды, передайте список URL в read_parquet:
SELECT COUNT(*)
FROM read_parquet([
'https://huggingface.co/datasets/username/dataset_name/resolve/main/data/train-00000-of-00002.parquet',
'https://huggingface.co/datasets/username/dataset_name/resolve/main/data/train-00001-of-00002.parquet'
]);DuckDB обработает оба файла как единую таблицу. Это удобно для датасетов, которые Hugging Face автоматически разбивает на части.
Производительность и ограничения
DuckDB эффективно обрабатывает сложные запросы даже на файлах размером 500 МБ. Тесты показывают, что агрегация по одному файлу такого размера выполняется за 5-15 секунд при скорости сети от 50 Мбит/с. Основная задержка приходится на первое обращение: DuckDB скачивает метаданные Parquet и определяет схему. Повторные запросы к тому же файлу используют кэш и выполняются быстрее.
Сетевая задержка - главный фактор, влияющий на скорость. При медленном соединении запросы к большим файлам могут занимать минуты. Для интерактивной работы с датасетами объёмом более 1 ГБ локальное скачивание может оказаться быстрее, если планируется много итераций. DuckDB не хранит удалённый файл целиком, но каждый новый запрос требует повторного чтения данных по сети.
Память - второй ограничивающий фактор. DuckDB загружает в оперативную память только те блоки Parquet, которые нужны для выполнения запроса. Для агрегаций с группировкой по столбцу с высокой кардинальностью потребление памяти растёт. Файл 500 МБ с миллионами уникальных ключей может занять 2-4 ГБ RAM. Это стоит учитывать при работе на машинах с ограниченными ресурсами.
Не все датасеты доступны в Parquet. Hugging Face конвертирует публичные датасеты автоматически, но приватные датасеты и датасеты с нестандартной структурой могут не иметь Parquet-версии. Перед запросом проверьте наличие файлов через вкладку Files или API.
Количество одновременных запросов к Hugging Face Hub не ограничено жёстко, но при массовых обращениях возможны задержки. Для продакшн-пайплайнов с высокой частотой запросов разумнее скачать датасет один раз и работать локально. Удалённый доступ через DuckDB оптимален для разведочного анализа и проверки гипотез.
Преимущества перед традиционным скачиванием
Скачивание датасета целиком требует времени на загрузку, места на диске и последующую очистку. Датасет Falcon RefinedWeb занимает более 500 ГБ в полном объёме. Удалённые запросы через DuckDB позволяют начать анализ сразу после получения URL. Вы тратите секунды на настройку, а не часы на загрузку.
Экономия дискового пространства критична для больших датасетов. The Stack v3, крупнейший открытый датасет кода, содержит 114 ТБ данных. Скачать его локально невозможно на обычной машине. DuckDB позволяет выполнять SQL-запросы к отдельным Parquet-файлам этого датасета без полной загрузки. Подробнее о масштабных датасетах Hugging Face читайте в разборе оптимизации потоковой загрузки.
Быстрая проверка гипотез - ещё одно преимущество. Вы можете проверить распределение значений, посчитать статистики и оценить качество данных за один запрос. Если датасет не подходит, вы не потратили время на скачивание. Если подходит, скачиваете его один раз для дальнейшей работы.
Интеграция в существующие пайплайны проста. DuckDB работает в Python, R, CLI и через JDBC/ODBC. Вы можете встроить удалённые запросы в Jupyter-ноутбук или аналитический скрипт без изменения основной архитектуры. Для пользователей, которые работают с табличными данными на GPU, сравнение cuDF и Polars GPU Engine дано в отдельном обзоре.
Удалённый доступ также снижает затраты на инфраструктуру. Вам не нужен сервер с большим диском для хранения датасетов. Достаточно машины с DuckDB и доступом в интернет. Для команд, которые анализируют множество датасетов, это сокращает расходы на облачное хранилище.
Заключение: Новые возможности для анализа данных
Интеграция DuckDB и Hugging Face Hub открывает быстрый способ анализа тысяч датасетов без локального хранения. Вы подключаете httpfs, получаете URL Parquet-файла и выполняете SQL-запрос. Результат приходит за секунды, диск остаётся чистым.
Этот подход делает анализ данных доступным для широкого круга специалистов. Не нужен кластер Spark или мощный сервер. Достаточно DuckDB, который запускается на ноутбуке. Для ML-инженеров и исследователей это способ быстрее проверять гипотезы и выбирать датасеты для обучения моделей.
Попробуйте на своих задачах. Возьмите любой публичный датасет с Hugging Face Hub, выполните первый запрос и оцените скорость. Если данных нужно много, посмотрите анализ huggingface_hub v1.0 для оптимизации загрузки больших моделей. Для интеграции с Databricks и Spark изучите материал об ускорении обучения LLM.
Документация по DuckDB доступна на официальном сайте проекта, по Hugging Face Hub - в разделе Datasets. Начните с малого: один датасет, один запрос, один результат. Дальше масштабируйте под свои задачи.