powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Informix [игнор отключен] [закрыт для гостей] / Парсить файл в процедуре?
11 сообщений из 11, страница 1 из 1
Парсить файл в процедуре?
    #34103451
Сергей Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте, уважаемые!

Сразу оговорюсь, что я далек от Informix, но вот какая задача нарисовалась к срочной реализации.

Есть файл, который содержит строки (около 300 тыс). Каждая строка представляет собой набор значений с разделителем ('|'). Нужно выбрать определенное поле из каждой строки, запросить значение из таблицы, выбрать нужные значения из связанных таблиц (имя, баланс, итд), подсчитать 1 формулу, и сформировав новую строку стаким же разделителем записать в новый файл. Я написал программу MFC. Она обращается к представлению, созданному специаьлно для моих нужд и которое содержит все необходимые поля. Через CRecordset обращаюсь к представлению и выбираю данные по каджой строке файла. Программа все делает правильно, но исключительно долго (по предварительным подсчетам около 20 часов).

1. Можно ли реализовать данный механизм средствами SPL? Если да - то где читать?
2. Если нет, то как мне модифицировать алгоритм работы, чтобы процессинг был приемлемым (к примеру 20-30 минут).

Заранее искренне благодарен
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34104099
лшк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ни все исходные данные понятны, но я бы закачал этот файл в TEMP TABLE и далее делал, что хотел
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34104666
Сергей Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я просто честно сказать не знаю как программно ихз MFC создать объект а потом к нему еще и класс CRecordset привязать ...
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34104731
лшк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я не имел ввиду никаких языков программирования, а только SQL-скрипт и команду dbaccess.
Насколько я понимаю, основная задержка у вас приходится на обращение к VIEW с параметром.
Смотрите на оптимальность построения VIEW, есть ли индекс по полю с которым вы заходите.
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34105204
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей СергеевичЗдравствуйте, уважаемые!

Сразу оговорюсь, что я далек от Informix, но вот какая задача нарисовалась к срочной реализации.

Есть файл, который содержит строки (около 300 тыс). Каждая строка представляет собой набор значений с разделителем ('|'). Нужно выбрать определенное поле из каждой строки, запросить значение из таблицы, выбрать нужные значения из связанных таблиц (имя, баланс, итд), подсчитать 1 формулу, и сформировав новую строку стаким же разделителем записать в новый файл. Я написал программу MFC. Она обращается к представлению, созданному специаьлно для моих нужд и которое содержит все необходимые поля. Через CRecordset обращаюсь к представлению и выбираю данные по каджой строке файла. Программа все делает правильно, но исключительно долго (по предварительным подсчетам около 20 часов).

1. Можно ли реализовать данный механизм средствами SPL? Если да - то где читать?
2. Если нет, то как мне модифицировать алгоритм работы, чтобы процессинг был приемлемым (к примеру 20-30 минут).

Заранее искренне благодарен

Да, можно. И нужно.
Загрузить файл - команда LOAD FROM <file> INSERT INTO <table>, выполняемая из dbaccess
Создаете хранимую процедуру, в которой либо либо пишите крутой SELECT на страницу, либо открываете курсор и идете по нему .
Читать - Informix Guide to SQL, Syntax, раздел SPL statements
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34105211
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хранимая процедура должна делать update нужного вам поля.
Потом в dbaccess выполняете UNLOAD TO '/tmp/aaa' DELIMITER '|' SELECT <нужные поля> FROM <table>

В таком вот аксепте
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34108320
Сергей Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. получается что я создаю 2 временные таблицы, в одну загружаю мой файл, во вторую результаты запросов и вычислений. И вторую таблицу выгружаю в файл. Я верно Вас понял?
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34108322
Сергей Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
лшкЯ не имел ввиду никаких языков программирования, а только SQL-скрипт и команду dbaccess.
Насколько я понимаю, основная задержка у вас приходится на обращение к VIEW с параметром.
Смотрите на оптимальность построения VIEW, есть ли индекс по полю с которым вы заходите.

Даже если индекса нет, изменения в структуре БД производить не имею права. Могу создать временную таблицу или представление, воспользоваться ими и удалить.
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34110324
Выбегалло
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей СергеевичТ.е. получается что я создаю 2 временные таблицы, в одну загружаю мой файл, во вторую результаты запросов и вычислений. И вторую таблицу выгружаю в файл. Я верно Вас понял?

В общем верно. Если не можете обойтись одной временной таблицей - используйте две.
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34110401
Сергей Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально все сделал в 1 таблице.. загружал в нее нужные поля из файла, остальные потом UPDATE'ом вставлял выборкой из таблиц. Меня не устроила скорость работы (9 строк за 6 секунд) и я решил что INSERT отработает быстрее. Но не тут то было., и запрос кривой и руки.. в общем подробности здесь : оптимизация запроса
...
Рейтинг: 0 / 0
Парсить файл в процедуре?
    #34116127
Сергей СергеевичИзначально все сделал в 1 таблице.. загружал в нее нужные поля из файла, остальные потом UPDATE'ом вставлял выборкой из таблиц. Меня не устроила скорость работы (9 строк за 6 секунд) и я решил что INSERT отработает быстрее. Но не тут то было., и запрос кривой и руки.. в общем подробности здесь : оптимизация запроса

По-видимому, Вы не строите индексы на временные таблицы, а это возможно и нужно, коль скоро таблица имеет 300 тыс. строк. После этого желательно ещё и UPDATE STATISTICS LOW FOR TABLE <tab_name> выполнить, чтобы оптимизатор понял масштабы бедствия.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Informix [игнор отключен] [закрыт для гостей] / Парсить файл в процедуре?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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