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

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

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

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

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

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

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

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



на

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



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

Есть же ANTLR...

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

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

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

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

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


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

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

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

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

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

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

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


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