Задать вопрос
devspec
@devspec
Помогло? Отметь решением

Как объединить большое количество строк, суммируя данные по одинаковым строкам?

Здравствуйте!

Исходные данные:

50 csv-файлов в формате
документ;колонка1;колонка2;колонка3
Всего около миллиарда строк во всех файлах.
Документы могут повторяться как в пределах одного файла, так и между несколькими файлами (заранее количество одинаковых документов неизвестно).

Необходимо:

Объединить все файлы в один (или в одну БД), суммируя данные в колонке1, колонке2 и колонке3 для одинаковых документов.

Подскажите, пожалуйста, как это можно сделать за минимальное время?
Поставил теги SQL, так как думаю, что без какого-то SQL-сервера здесь не обойтись.
  • Вопрос задан
  • 3661 просмотр
Подписаться 2 Оценить Комментировать
Решения вопроса 2
Наверное стоит начать разговор с языка программирования?)
Ответ написан
DmitriyEntelis
@DmitriyEntelis
Думаю за деньги
Вашу задачу можно разбить на 2 части:
1. Вам нужно сделать импорт из CSV в SQL.
Если использовать mysql то есть замечательная команда dev.mysql.com/doc/refman/5.1/en/load-data.html
В postgresql тоже способ есть stackoverflow.com/questions/2987433/how-to-import-...

2. Объединить данные не сложно вообще.
Если Вам данные нужны больше 1 раза (а так и есть, то логично записать новые агрегированные данные в новую таблицу с аналогичной структурой)
insert into `table2` (doc,col1,col2,col3)
(
select doc, sum(col1),sum(col2),sum(col3) from `table1`
group by doc
)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mgyk
@mgyk
Быстрее будет сделать LOAD DATA INFILE dev.mysql.com/doc/refman/5.1/en/load-data.html и импортировать сразу из CSV.
Можно попробовать engine=ARCHIVE если операция одноразовая. Будет больший шанс влезть в память при следующем GROUP BY
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы