Гость
Форумы / Java [игнор отключен] [закрыт для гостей] / парсер больших файлов. Что использовать? / 25 сообщений из 28, страница 1 из 2
05.08.2014, 12:56
    #38712949
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Имеется файл dump.sql размером 10 Гб. Внутри находятся INSERT sql-запросы. Мне нужно будет вытаскивать эти insert-ы и анализировать.
Какую технологию лучше применить чтобы распарсить подобные файлы?
...
Рейтинг: 0 / 0
05.08.2014, 12:58
    #38712953
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
https://www.google.com/search?q=Java SQL parser
Если писать самому, то через "конечный автомат"
...
Рейтинг: 0 / 0
05.08.2014, 12:59
    #38712955
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Пока ждете ответа от тех кто реально с этим сталкивался,
вот статья 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
...
Рейтинг: 0 / 0
05.08.2014, 13:03
    #38712960
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Как правильно считать этот файл, чтоб он в оперативную память не загонялся?
...
Рейтинг: 0 / 0
05.08.2014, 13:05
    #38712961
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
NixicПока ждете ответа от тех кто реально с этим сталкивался,
вот статья http://www.baeldung.com/java-read-lines-large-file

Для нубов какой-то материал. По-хорошему стоит сырые данные загрузить в память в большом количестве и там уже их стримить и парсить, догружая остальное.
...
Рейтинг: 0 / 0
05.08.2014, 13:06
    #38712964
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Оперативка у меня ограничена 3 Гб.
...
Рейтинг: 0 / 0
05.08.2014, 13:09
    #38712968
Nixic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Blazkowicz,
первая ссылка в гугл по запросу "java parse big files". Нубская она или нет - фз)
...
Рейтинг: 0 / 0
05.08.2014, 13:10
    #38712969
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringoКак правильно считать этот файл, чтоб он в оперативную память не загонялся?
Чтобы минимизировать расход памяти нужно стримить (смотри InputStream, Reader) и складывать в буфер. При обнаружении разделителя SQL выражений - буфер парсить.
Но есть ли смысл минимизировать расход по памяти? Сложно сказать, не зная всей задачи. Я бы грузил максимальный объев память, парсил бы на SQL выражения и отправлял в пул потоков парсить отдельные выражения. Во-первых чтобы максимально загрузить все ядра CPU, во-вторых, чтобы читать\перечитывать только из памяти.
...
Рейтинг: 0 / 0
05.08.2014, 13:24
    #38712990
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringo, файл с insert-ами существует только для одной цели - загрузить данные в БД.

Вот загрузи и вытаскивай и анализируй. Все прочие решения будут тебе опухолью мозка.

Успехов.
...
Рейтинг: 0 / 0
05.08.2014, 13:46
    #38713029
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
mayton, дело в том что файл косячный. При импорте в базу выскакивает ошибка. опытным путём было обнаружено, что причина в том, что текстовые поля содержат управляющие символы (например \, ", '). Поэтому я хочу сначала исправить подобные insert-ы и только потом загонять в базу
...
Рейтинг: 0 / 0
05.08.2014, 13:50
    #38713034
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringomayton, дело в том что файл косячный. При импорте в базу выскакивает ошибка. опытным путём было обнаружено, что причина в том, что текстовые поля содержат управляющие символы (например \, ", '). Поэтому я хочу сначала исправить подобные insert-ы и только потом загонять в базу
Как, обычно, саму задачу мы узнаём в самом конце. Что мешало сразу описать проблему?
...
Рейтинг: 0 / 0
05.08.2014, 14:13
    #38713062
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Неужели никто не сталкивался с подобной задачей
...
Рейтинг: 0 / 0
05.08.2014, 14:16
    #38713070
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringoНеужели никто не сталкивался с подобной задачей
Читаешь построчно (BufferedReader) - длинных строк в файле нет. Значит по памяти не страшно. Строковые литералы на несколько строк не разбиваются.
Анализируешь кавычки в каждой строке на предмет выделения строковых литералов.
Анализируешь содержимое строковых литералов на предмет символов, которые надо эскейпить.

В чем сложности?
...
Рейтинг: 0 / 0
05.08.2014, 14:34
    #38713088
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
BlazkowiczСтроковые литералы на несколько строк не разбиваются.
В чем сложности?
В самом текстовом поле присутствуют символы перехода строки (Enter-ы), ', ". Там содержится текст статьи. Проблема как их отличить от sql-управляющих символов.
Ещё сложность например INSERT INTO table VALUES (10, 'ООО РиК', 'ОАО ВП') можно понять как вставляются три поля первое=10, второе = 'ООО РиК', третье = 'ОАО ВП'. Однако в реальности должно быть два первое = 10, второе = 'ООО РиК', 'ОАО ВП'
...
Рейтинг: 0 / 0
05.08.2014, 14:40
    #38713095
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringo,

Это вы уже сами для вашего SQL должны выбирать какие правила нужно использовать. Угадывать какие у вас там косяки в файле по форуму, достаточно сложно.
...
Рейтинг: 0 / 0
05.08.2014, 14:52
    #38713118
sanringo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
кроме BufferedReader ещё идеи есть?
...
Рейтинг: 0 / 0
05.08.2014, 14:53
    #38713120
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringoкроме BufferedReader ещё идеи есть?
Есть. Но чем не устраивает BufferedReader?
...
Рейтинг: 0 / 0
05.08.2014, 15:16
    #38713159
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringoBlazkowiczСтроковые литералы на несколько строк не разбиваются.
В чем сложности?
В самом текстовом поле присутствуют символы перехода строки (Enter-ы), ', ". Там содержится текст статьи. Проблема как их отличить от sql-управляющих символов.
Ещё сложность например INSERT INTO table VALUES (10, 'ООО РиК', 'ОАО ВП') можно понять как вставляются три поля первое=10, второе = 'ООО РиК', третье = 'ОАО ВП'. Однако в реальности должно быть два первое = 10, второе = 'ООО РиК', 'ОАО ВП'
Тот кто создал проблему - сам себе злобный Буратино. И я-бы его посадил
править 10 в текстовом редакторе вручную.

Но по хорошему это делается заменой некоторого шаблона на пустую строку.
Тоесть если мы знаем что в строке table всегда два поля то делаем замену

Код: plsql
1.
'ООО РиК', 'ОАО ВП'



на

Код: plsql
1.
'ООО РиК'', ''ОАО ВП'



Вобщем хватит цыганить из разработчиков готовое решение. Ты сам предоставь
кейсы которые надо исправить и тебе скажут конкретно.
...
Рейтинг: 0 / 0
05.08.2014, 15:36
    #38713192
ART-CODE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Поскольку ОС не указана, значит Windows подходит :)
Тогда - вызвать из командной строки microsoft logparser.
он все шустро разберет как надо и в БД зальет.
...
Рейтинг: 0 / 0
05.08.2014, 15:46
    #38713205
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
Blazkowicz https://www.google.com/search?q=Java SQL parser
Если писать самому, то через "конечный автомат"

Есть же ANTLR...

А на счёт Java SQL parser ... Я бы не верил. SQL бывает разный, и у разбора этого SQL бывают разные цели.
...
Рейтинг: 0 / 0
05.08.2014, 15:48
    #38713208
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringoКак правильно считать этот файл, чтоб он в оперативную память не загонялся?

А его не нужно в память загонять, он читается как поток и на потоке парсится, за один просмотр.
Если за один просмотр не удастся (это зависит от языка), то можно сделать за несколько.
...
Рейтинг: 0 / 0
05.08.2014, 15:49
    #38713211
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
BlazkowiczsanringoНеужели никто не сталкивался с подобной задачей
Читаешь построчно (BufferedReader) - длинных строк в файле нет.
В чем сложности?

Даже не построчно. Обычно посимвольно читают.
...
Рейтинг: 0 / 0
05.08.2014, 15:52
    #38713216
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
sanringoВ самом текстовом поле присутствуют символы перехода строки (Enter-ы), ', ". Там содержится текст статьи. Проблема как их отличить от sql-управляющих символов.

Эти все проблемы решаются на раз при написании этого самого парсера.
Только его надо писать, а не на форумах о нём рассуждать.

sanringoЕщё сложность например INSERT INTO table VALUES (10, 'ООО РиК', 'ОАО ВП') можно понять как вставляются три поля первое=10, второе = 'ООО РиК', третье = 'ОАО ВП'. Однако в реальности должно быть два первое = 10, второе = 'ООО РиК', 'ОАО ВП'


А это -- надуманные сложности. Это именно три значения, указанные через две запятых.
Значение

Код: plaintext
1.
'ООО РиК', 'ОАО ВП'

невалидная лексема.

Это тоже решается всё, когда пишешь парсер.
...
Рейтинг: 0 / 0
05.08.2014, 15:57
    #38713224
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
MasterZivА на счёт Java SQL parser ... Я бы не верил. SQL бывает разный, и у разбора этого SQL бывают разные цели.
ТС очень долго "кололся" что и зачем ему парсить.
...
Рейтинг: 0 / 0
05.08.2014, 15:59
    #38713227
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
парсер больших файлов. Что использовать?
MasterZivА его не нужно в память загонять, он читается как поток и на потоке парсится, за один просмотр.
Если за один просмотр не удастся (это зависит от языка), то можно сделать за несколько.
Больше памяти может уйти на результаты парсинга.

Обычно есть желание получившееся дерево сохранить и потом как-то обрабатывать. Если уж совсем мало памяти, то как-то хитро писать в промежуточный файл некий скомпилированный пи-код.

AFAIK
MasterZivЭти все проблемы решаются на раз при написании этого самого парсера.
Только его надо писать, а не на форумах о нём рассуждать.

+ миллион
простейший парсер за пару дней сварганить можно. Хоть на чистом C, хоть на Java, хоть на PL/SQL
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / парсер больших файлов. Что использовать? / 25 сообщений из 28, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]