👨💻 Как использовать DuckDB с Python: практическое руководство по аналитике
DuckDB — это современная in-process аналитическая СУБД, разработанная как “SQLite для аналитики”. Она идеально подходит для обработки больших объёмов данных на локальной машине без необходимости поднимать сервер или использовать тяжёлые хранилища.
Что делает DuckDB особенной?
- Работает как библиотека внутри Python (через `duckdb`)
- Поддерживает SQL-запросы напрямую к pandas DataFrame, CSV, Parquet, Arrow и другим источникам
- Оптимизирована под аналитические запросы: агрегации, группировки, фильтрации
- Мгновенно работает с большими файлами без предварительной загрузки
Пример рабочего сценария:
1⃣ Чтение и анализ Parquet-файла:
import duckdb
duckdb.sql("SELECT COUNT(*), AVG(price) FROM 'data.parquet'")
2⃣ Интеграция с pandas:
import pandas as pd
df = pd.read_csv("data.csv")
result = duckdb.sql("SELECT category, AVG(value) FROM df GROUP BY category").df()
3⃣ Объединение нескольких источников:
duckdb.sql("""
SELECT a.user_id, b.event_time
FROM 'users.parquet' a
JOIN read_csv('events.csv') b
ON a.user_id = b.user_id
""")
Почему это важно:
- Вы можете использовать SQL и pandas одновременно
- DuckDB быстрее pandas в большинстве аналитических задач, особенно на больших данных
- Поддержка стандартов данных (Parquet, Arrow) даёт нативную интеграцию с экосистемой Data Science
- Не требует настройки: просто установите через
pip install duckdbПрименения:
🔵 Локальный анализ данных (до десятков ГБ) — без Spark
🔵 Объединение таблиц из разных форматов (Parquet + CSV + DataFrame)
🔵 Прототипирование ETL-пайплайнов и построение дашбордов
🔵 Быстрая агрегация и отчёты по логам, BI-данным, IoT-стримам и пр.
Советы
🟡 Используйте
read_parquet, read_csv_auto и from_df() для гибкой загрузки данных 🟡 Результаты запросов можно конвертировать обратно в pandas через
.df()🟡 DuckDB поддерживает оконные функции,
GROUP BY, JOIN, UNION, LIMIT, подзапросы и многое другое — это полноценный SQL-движокПодробный гайд
👉Новости 👉База вопросов