Бесплатный вебинар
«как найти любимую работу»
Подарки на 150 000 ₽ за участие
Живой эфир
Записи не будет!
00:00:00:00
дн.ч.мин.сек.

Способы чтения больших данных из SQL в pandas DataFrame

Быстрый ответ

Для загрузки больших объемов данных из SQL по частям, адаптированным к объему вашей памяти, применяйте функцию pd.read_sql_query() с параметром chunksize. Вот эффективный способ:

Python
Скопировать код
import pandas as pd

# SQL-запрос и строка подключения
query = '#MyDataIsBigButMyMemoryIsSmall'
con = 'db_connection_string'

# Осуществляем загрузку данных
chunks = [] 
for chunk in pd.read_sql_query(query, con, chunksize=1000): # 1000 приведено просто как пример; подберите размер, наиболее подходящий для ваших нужд!
    print('Обрабатываем очередной блок данных 🍔')
    chunks.append(chunk)

# Объединяем все блоки данных в единый DataFrame
df = pd.concat(chunks, ignore_index=True)

Размер блока данных выбирайте исходя из доступного объема памяти и размера обрабатываемых данных.

Кинга Идем в IT: пошаговый план для смены профессии

Эффективная обработка данных с учетом нюансов выборки

Когда вам нужно работать с большими наборами данных, прибегайте к следующим стратегиям, чтобы эффективно выполнить задачу:

Оптимизация SQL-запроса

Еще до того, как вы начинаете работать с данными, убедитесь в оптимальности вашего SQL-запроса. Удалите ненужные колонки и ограничьте выборку только необходимым объемом данных.

Подробнее об этом расскажет наш спикер на видео
skypro youtube speaker

Балансировка размера блоков

Выбор подходящего значения для chunksize напоминает поиск идеальной температуры каши. Избегайте слишком больших блоков, которые могут перегрузить память, и слишком маленьких, обработка которых потребует много времени.

Синхронизация соединений

Для объединения отдельных блоков данных используйте pandas.concat(), но при этом слежите за использованием памяти в процессе.

Использование продвинутых инструментов

Для работы с очень большими наборами данных применяйте такие инструменты, как Dask или Apache Spark, которые специально разработаны для обработки данных вне оперативной памяти.

Потоковый вывод с SQLAlchemy

Для баз данных, совместимых с SQLAlchemy, используйте потоковый вывод результатов, активируя execution_options(stream_results=True).

Рациональное использование памяти при хранении данных

Храня данные в списке, не забывайте о возможных затратах памяти.

Упрощение и оптимизация DataFrames

Обработка меньших блоков данных может существенно снизить нагрузку на систему и позволяет проводить сложные преобразования без риска перегрузки.

Визуализация

Воспринимайте потоковую загрузку данных в DataFrame как наливание воздуха в воздушные шары:

Набор данных: 🚰 -> 🎈

Небольшой SQL запрос:      🚰 -> 🎈 (Данные помещаются без затруднений)
Огромный SQL запрос:       🚰 -> 🎈💥 (Объем данных превышает объем памяти, шар лопается!)

Решение:

Потоковая загрузка данных: 🚰 -> 🎈(Наполняем, завязываем, повторяем)

Результат:

✅ Набор управляемых "шариков" (DataFrames): [🎈,🎈,🎈] (Эффективное использование памяти)

Мощные инструменты для решения геркулесовых задач в программировании

Для обработки внушительных объемов данных воспользуйтесь следующими подходами:

Использование смещений в SQL-запросах

Применяйте смещения в SQL-запросах для точного контроля над блоками данных.

Dask и Modin на страже оптимизации

Для оптимизации загрузки данных распределение задач с помощью Dask или Modin может быть весьма полезно.

Колоночные базы данных

Колоночные базы данных позволяют оптимизировать доступ к данным, что может существенно ускорить выполнение запросов при работе с большими данными.

Простота во главе угла

Прежде всего, следуйте принципу упрощения. Сложные задачи становятся гораздо более управляемыми, если разделить их на более мелкие этапы.

Полезные материалы

  1. pandas.read_sql — документация pandas — официальное руководство по использованию pandas.read_sql.
  2. Работа с движками и соединениями — документация SQLAlchemy — инструкция по потоковой обработке данных в SQLAlchemy.
  3. DataFrame Dask — документация Dask — руководство по использованию Dask для работы с большими данными.
  4. Масштабирование pandas с Modin — документация Modin — как увеличить производительность pandas с помощью Modin.
  5. SQLite – Python Wiki — об использовании SQLite в Python для создания эффективных баз данных.
  6. Pandas API на Spark — документация PySpark — о соединении DataFrame Pandas с Apache Spark для масштабной обработки данных.
Проверь как ты усвоил материалы статьи
Пройди тест и узнай насколько ты лучше других читателей
Какой метод в pandas позволяет загружать большие данные из SQL по частям?
1 / 5