Выбор ответа Senior Чтение и запись данных обновлено

Где считать: в базе или в pandas

Вопрос

Нужна выручка по дням за год из таблицы на 2 млрд строк в PostgreSQL. Аналитик пишет pd.read_sql("SELECT * FROM orders", engine) и считает в pandas. Что лучше?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Сделать GROUP BY по дню в SQL и вытащить 365 строк. Агрегат выгоднее посчитать там, где лежат данные: база использует индексы и не гонит 2 млрд строк по сети. pandas работает в памяти одной машины и такую таблицу не поднимет. chunksize в CSV или в readsql спасёт память, но всё равно…

Варианты ответа

  1. Так и надо: pandas быстрее базы
  2. Выгрузить в CSV и прочитать chunksize
  3. Сделать GROUP BY по дню в SQL и вытащить 365 строкправильный ответ
  4. Читать через read_sql с chunksize, чтобы не упасть по памяти

Разбор

Агрегат выгоднее посчитать там, где лежат данные: база использует индексы и не гонит 2 млрд строк по сети. pandas работает в памяти одной машины и такую таблицу не поднимет. chunksize в CSV или в read_sql спасёт память, но всё равно протащит все строки через сеть и Python.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме