Я работаю с очень большой (5,9 миллиардов строк) таблицей в AWS (RDS m4.large), и у меня возникают некоторые проблемы с получением данных до уровня, с которым я могу эффективно работать и выполнять запросы.
Данные имеют временную переменную в секундах с начала записи (тип: bigint), но я хотел бы иметь возможность агрегировать данные на дневном уровне (т. Е. GROUP BY day).
Я начал этот процесс с простого создания столбца дня и обновления таблицы для заполнения поля дня путем преобразования секунд в дни:
ALTER TABLE tbl
ADD COLUMN day INTEGER;
UPDATE tbl
SET day=tbl.eventtime/86400+1;
, который отлично работал в среде тестирования (первые 10 дней 90-дневной записи), но, возможно, неожиданно, он не так хорошо работает с полным набором данных из 5 миллиардов строк.
После нескольких попыток этого процесса я понял, что мои ранее созданные индексы значительно замедляли процесс (запросы на обновление никогда не завершались). С тех пор я удалил все индексы и пытаюсь обновить снова. Вот через 20 часов, и запрос все еще выполняется, мне интересно, не подходит ли этот подход к количеству данных, с которыми я работаю.
Я понимаю, что другим подходом было бы преобразование времени в секундах в некоторый тип меток времени postgres - но я незнакомые метки времени и не уверен, с чего начать.
Выполняет ли обновление таблицы настолько большое значение? Есть ли другой подход, который был бы более эффективным, чтобы получить данные второго разрешения до точки, где я мог бы агрегировать их по дням?
Пожалуйста, дайте мне знать, если требуется какая-либо дополнительная информация.