|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Имеется файл dump.sql размером 10 Гб. Внутри находятся INSERT sql-запросы. Мне нужно будет вытаскивать эти insert-ы и анализировать. Какую технологию лучше применить чтобы распарсить подобные файлы? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 12:56 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
https://www.google.com/search?q=Java SQL parser Если писать самому, то через "конечный автомат" ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 12:58 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Пока ждете ответа от тех кто реально с этим сталкивался, вот статья http://www.baeldung.com/java-read-lines-large-file ну и в гугле можно варианты посмотреть https://www.google.ru/search?https://www.google.ru/search?q=java parse large file&oq=java parse big file ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 12:59 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Как правильно считать этот файл, чтоб он в оперативную память не загонялся? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:03 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
NixicПока ждете ответа от тех кто реально с этим сталкивался, вот статья http://www.baeldung.com/java-read-lines-large-file Для нубов какой-то материал. По-хорошему стоит сырые данные загрузить в память в большом количестве и там уже их стримить и парсить, догружая остальное. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:05 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Оперативка у меня ограничена 3 Гб. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:06 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Blazkowicz, первая ссылка в гугл по запросу "java parse big files". Нубская она или нет - фз) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:09 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringoКак правильно считать этот файл, чтоб он в оперативную память не загонялся? Чтобы минимизировать расход памяти нужно стримить (смотри InputStream, Reader) и складывать в буфер. При обнаружении разделителя SQL выражений - буфер парсить. Но есть ли смысл минимизировать расход по памяти? Сложно сказать, не зная всей задачи. Я бы грузил максимальный объев память, парсил бы на SQL выражения и отправлял в пул потоков парсить отдельные выражения. Во-первых чтобы максимально загрузить все ядра CPU, во-вторых, чтобы читать\перечитывать только из памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:10 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringo, файл с insert-ами существует только для одной цели - загрузить данные в БД. Вот загрузи и вытаскивай и анализируй. Все прочие решения будут тебе опухолью мозка. Успехов. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:24 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
mayton, дело в том что файл косячный. При импорте в базу выскакивает ошибка. опытным путём было обнаружено, что причина в том, что текстовые поля содержат управляющие символы (например \, ", '). Поэтому я хочу сначала исправить подобные insert-ы и только потом загонять в базу ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:46 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringomayton, дело в том что файл косячный. При импорте в базу выскакивает ошибка. опытным путём было обнаружено, что причина в том, что текстовые поля содержат управляющие символы (например \, ", '). Поэтому я хочу сначала исправить подобные insert-ы и только потом загонять в базу Как, обычно, саму задачу мы узнаём в самом конце. Что мешало сразу описать проблему? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 13:50 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Неужели никто не сталкивался с подобной задачей ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 14:13 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringoНеужели никто не сталкивался с подобной задачей Читаешь построчно (BufferedReader) - длинных строк в файле нет. Значит по памяти не страшно. Строковые литералы на несколько строк не разбиваются. Анализируешь кавычки в каждой строке на предмет выделения строковых литералов. Анализируешь содержимое строковых литералов на предмет символов, которые надо эскейпить. В чем сложности? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 14:16 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
BlazkowiczСтроковые литералы на несколько строк не разбиваются. В чем сложности? В самом текстовом поле присутствуют символы перехода строки (Enter-ы), ', ". Там содержится текст статьи. Проблема как их отличить от sql-управляющих символов. Ещё сложность например INSERT INTO table VALUES (10, 'ООО РиК', 'ОАО ВП') можно понять как вставляются три поля первое=10, второе = 'ООО РиК', третье = 'ОАО ВП'. Однако в реальности должно быть два первое = 10, второе = 'ООО РиК', 'ОАО ВП' ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 14:34 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringo, Это вы уже сами для вашего SQL должны выбирать какие правила нужно использовать. Угадывать какие у вас там косяки в файле по форуму, достаточно сложно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 14:40 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
кроме BufferedReader ещё идеи есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 14:52 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringoкроме BufferedReader ещё идеи есть? Есть. Но чем не устраивает BufferedReader? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 14:53 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringoBlazkowiczСтроковые литералы на несколько строк не разбиваются. В чем сложности? В самом текстовом поле присутствуют символы перехода строки (Enter-ы), ', ". Там содержится текст статьи. Проблема как их отличить от sql-управляющих символов. Ещё сложность например INSERT INTO table VALUES (10, 'ООО РиК', 'ОАО ВП') можно понять как вставляются три поля первое=10, второе = 'ООО РиК', третье = 'ОАО ВП'. Однако в реальности должно быть два первое = 10, второе = 'ООО РиК', 'ОАО ВП' Тот кто создал проблему - сам себе злобный Буратино. И я-бы его посадил править 10 в текстовом редакторе вручную. Но по хорошему это делается заменой некоторого шаблона на пустую строку. Тоесть если мы знаем что в строке table всегда два поля то делаем замену Код: plsql 1.
на Код: plsql 1.
Вобщем хватит цыганить из разработчиков готовое решение. Ты сам предоставь кейсы которые надо исправить и тебе скажут конкретно. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:16 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Поскольку ОС не указана, значит Windows подходит :) Тогда - вызвать из командной строки microsoft logparser. он все шустро разберет как надо и в БД зальет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:36 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
Blazkowicz https://www.google.com/search?q=Java SQL parser Если писать самому, то через "конечный автомат" Есть же ANTLR... А на счёт Java SQL parser ... Я бы не верил. SQL бывает разный, и у разбора этого SQL бывают разные цели. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:46 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringoКак правильно считать этот файл, чтоб он в оперативную память не загонялся? А его не нужно в память загонять, он читается как поток и на потоке парсится, за один просмотр. Если за один просмотр не удастся (это зависит от языка), то можно сделать за несколько. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:48 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
BlazkowiczsanringoНеужели никто не сталкивался с подобной задачей Читаешь построчно (BufferedReader) - длинных строк в файле нет. В чем сложности? Даже не построчно. Обычно посимвольно читают. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:49 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
sanringoВ самом текстовом поле присутствуют символы перехода строки (Enter-ы), ', ". Там содержится текст статьи. Проблема как их отличить от sql-управляющих символов. Эти все проблемы решаются на раз при написании этого самого парсера. Только его надо писать, а не на форумах о нём рассуждать. sanringoЕщё сложность например INSERT INTO table VALUES (10, 'ООО РиК', 'ОАО ВП') можно понять как вставляются три поля первое=10, второе = 'ООО РиК', третье = 'ОАО ВП'. Однако в реальности должно быть два первое = 10, второе = 'ООО РиК', 'ОАО ВП' А это -- надуманные сложности. Это именно три значения, указанные через две запятых. Значение Код: plaintext 1.
невалидная лексема. Это тоже решается всё, когда пишешь парсер. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:52 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
MasterZivА на счёт Java SQL parser ... Я бы не верил. SQL бывает разный, и у разбора этого SQL бывают разные цели. ТС очень долго "кололся" что и зачем ему парсить. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:57 |
|
парсер больших файлов. Что использовать?
|
|||
---|---|---|---|
#18+
MasterZivА его не нужно в память загонять, он читается как поток и на потоке парсится, за один просмотр. Если за один просмотр не удастся (это зависит от языка), то можно сделать за несколько. Больше памяти может уйти на результаты парсинга. Обычно есть желание получившееся дерево сохранить и потом как-то обрабатывать. Если уж совсем мало памяти, то как-то хитро писать в промежуточный файл некий скомпилированный пи-код. AFAIK MasterZivЭти все проблемы решаются на раз при написании этого самого парсера. Только его надо писать, а не на форумах о нём рассуждать. + миллион простейший парсер за пару дней сварганить можно. Хоть на чистом C, хоть на Java, хоть на PL/SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2014, 15:59 |
|
|
start [/forum/topic.php?fid=59&tid=2126772]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 177ms |
0 / 0 |