Решение реальной проблемы при помощь MySQL, Pandas (pd.concat)
Проблема: пишет маркетолог — у нас перестали отправляться emails пользователям из CRM (!)
Я сижу и думаю, ситуация странная — алерты о том что лежит сервис не приходит. Зашел в CRM, там тоже все спокойно и рассылки уходят. Думаю, а что же это может быть... Пошел в кабинет сервиса (mandrill) проверить что там происходит — и каково было мое удивление, когда мы исчерпали все лимиты 🙁
На проблему отреагировал — лимиты добавил, работу восстановили. А теперь нужно понять, что это такое случилось, что мы вышли за месячные лимиты
Исследование!
Итак, открыл БД и попробовать понять в чем проблема. Сразу оговорюсь, что речь идет о 1 000 000 млн строк с множеством колонок...
Написал пару SQL запросов — не работает, не вывозит MySQL сервер группировки и подсчеты (возможно сервер реплики слабовал).
Думаю дальше... Что же делать... Ответ прост — Pandas!
Начал выгружать данные... Опять проблема — не могу выгрузить строки, большей объем данны.
Решил выгрузить все данные в разные файлы, а потом их объеденить через Pandas (Microsoft Excel у меня нет, а OpenOffice просто не может открыть такой объем данных).
Решение проблемы
Запустил Jupiter Lab (установка на Mac, установка на Win)
Импортировал pandas и прочитал все файлы
import pandas as pd df1 = pd.read_csv('001.csv', sep=';') df2 = pd.read_csv('002.csv', sep=';') df3 = pd.read_csv('003.csv', sep=';') # у меня было 10 файлов
Объеденил через функцию pd.concat (вот тут хорошая статья)
# тут нужно перечислить все прочитанные файлы frames = [df1, df2, df3] # далее положить все в новый датафрейм df = pd.concat(frames)
Ну а далее начал делать анализ через Mito(рассказано как установить и есть видео урок)
Что можно сказать про Mito — если вам лень писать код Pandas, вы просто скармливаете ему датафрейм и анализируете в удобном окне. Рекомендую
Итог.
Проблема найдена, ошибок инженера нет. Радость — стали много писать контента, следовательно много писем 🙂