Как да свържете голям брой редове чрез сумиране на данни в еднакви редове

50 csv файла във формат документ;колона1;колона2;колона3 Общо около милиард реда във всички файлове. Документите могат да се повтарят както в рамките на един файл, така и между няколко файла (броят на идентичните документи не е известен предварително).

Обединете всички файлове в един (или в една база данни) чрез сумиране на данни в колона1, колона2 и колона3 за идентични документи.

Можете ли да ми кажете как може да стане за най-кратко време? Слагам SQL тагове, защото смятам, че тук не може без някакъв SQL сървър.

Писането на парсер за CSV файлове не е трудно. По-трудно е да накараш този анализатор да премине през милиард редове, да изчисли едни и същи и да обобщи данните в тях. Къде да съхраняваме междинните резултати? Те няма да се поберат в паметта (файловете заемат около 150 GB), така че трябва да го направите на вашия твърд диск. Така че се интересувам от готови решения - може би някой преди мен е попадал на такъв обем данни и ще ви каже как да го направите за минимално време.

Представете си дори само добавяне към SQL базата данни - трябва да направите SELECT за всеки документ от 1 милиард, за да разберете дали е в базата данни или не и ако е, тогава сумирайте данните. 1 милиард SELECT ще отнеме цяла вечност и колкото по-голяма е базата, толкова повече време ще отнеме всеки SELECT.