powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Быстрая загрузка DBF в ASE 12 (15)
21 сообщений из 21, страница 1 из 1
Быстрая загрузка DBF в ASE 12 (15)
    #37058767
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос стоит уже давно и пока решается "не просто", а именно через ASA9 (dbisqlc) (хотя у нас куплена 11 и 12) которая умеет "input into _table_ from c:\mytable.dbf format foxpro" а далее перелив из _table_ через proxy таблицы в ASE 12.
В документации по ASE15 (у нас есть ASE 15 x64 Win64) написано что она (в смысле его dbisql) ТОЖЕ умеет "input into ... form foxpro", однако эксперимент показал что НИХРЕНА ОНА ЭТОГО НЕ УМЕЕТ, более того даже ASA после версии 9 уже НЕ понимает "... format foxpro" а нам ОЧЕНЬ НАДО!!! у нас клиенты предают (кладут на FTP) нам DBF файлы которые надо в итоге загрузить на ASE.
В ходе эксперимента мне удалось подконнектиться dbisqlg (От ASA9) к ASE 15 ... команду "input into ... formay foxpro" она "сжевала" но выдала ошибку "cannot convert CHAR to DECIMAL" хотя в DBF файле все поля numeric а в созданной таблице поля decimal и в результате ниодной строки залито не было.
Другой эсперимент НЕ удался, а имеено не удалость приконнектить dbisqlc (от ASA9) к ASE15 говорит что сервер найден но есть ошибки в соединении ....
Пытались также заливать в ASE через прогу на PowerBuilder ... но скорость в ДЕСЯТКИ раз медленнее. Кто нибудь сталкивался с такой же проблемой? как решали?
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37058983
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.01.2011 12:33, _Drive_ wrote:

> ДЕСЯТКИ раз медленнее. Кто нибудь сталкивался с такой же проблемой? как решали?

Проблему твою конкретно не понимаю, но вообще это делается так:

0) экспорт DBF -> файл данных для BCP (это может быть например CSV тот же)
1) импорт данных в базу с помощью BCP.

Если нужна быстрая загрузка. (реально быстрая), то в таблице должны быть
отключены триггера, отключены констрейнты и удалены индексы.
Иначе BCP будет грузить транзакционно, т.е. INSERT-ами. Это -- медленно.

Если тебе нельзя отключить триггера, констрейнты и индексы, загрузка
любыми средствами будет медленной.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37059372
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема в том что клиенты присылают файлы в формате DBF РАЗНОЙ конфигурации в том смысле, что
порядок полей может быть разный. И как тогда загружать через bcp не зная заранее ПОРЯДОК полей в файле CSV ???
А "Экспорт DBF-> файл данных для BCP" ЭТО КАК??? ... писать свою прогу (лучше на С или C++)
которая будет парсить DBF файл (причем некоторые присылают в формате dBaseVI некоторые FoxPro) и
формировать из него ПРАВИЛЬНЫЙ CSV (с правильным порядком полей) ? а готовая есть?
и все равно получается 2 прохода!!! а хочется в ОДИН ...
Про триггеры и индексы мы помним, в смысле триггеров на той таблице нет, а индексы перед заливкой удаляются а после создаются.
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37059594
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Проблема в том что клиенты присылают файлы в формате DBF РАЗНОЙ конфигурации в том смысле, что
>порядок полей может быть разный.

Ну как бы это -то вопрос отдельный. Его отдельно решать надо. Как ты будешь что-то импортировать
без определённого формата -- не понятно.

Но вообще-то в BCP есть поддержка форматных файлов, там можно задать формат полей для BCP.

> И как тогда загружать через bcp не зная заранее ПОРЯДОК полей в файле CSV ???
> А "Экспорт DBF-> файл данных для BCP" ЭТО КАК??? ... писать свою прогу (лучше на С или C++)

Это как хочешь. Можно писать, можно какую-то готовую найти.

> которая будет парсить DBF файл (причем некоторые присылают в формате dBaseVI некоторые FoxPro) и
> формировать из него ПРАВИЛЬНЫЙ CSV (с правильным порядком полей) ? а готовая есть?
> и все равно получается 2 прохода!!! а хочется в ОДИН ...

Тогда пиши сам программу на BCP API.

Модератор: MasterZiv, ты уж совсем обленился. Помечай цитаты, пожалуйста.
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37060040
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я такую готовую универсальную тулзу не видел. Когда-то давно, на прошлой работе у нас была такая, местной разработки, умела импортить из dbf.
Насколько же азешка деревянная в сравнению с азашкой.
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37060424
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 14.01.2011 23:35, Ggg_old wrote:

> Насколько же азешка деревянная в сравнению с азашкой.

Она не деревянная. Она железобетонная. Энтерпрайзная.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37061072
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все вы правы, но зачем писать в документации то что не соответствует действительности ? Конечно мы уже нашли несколько программ (в том числе скрипт на Perl) которые умеют dbf2csv, но опять таки встает вопрос о порядке полей. А вот если бы было можно сразу загрузить dbf в ASE (главное чтобы в этом dbf были ВСЕ нужные поля не важно в каком порядке),
то потом ... insert into MyTable (field1, field2 ...) select field1, field2 ... from tmp_table where .... и ВСЕ!!!
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37061854
KSerega
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
под ASA 10 работает

ALTER PROCEDURE "DBA"."p_From_DBF"() /* [IN | OUT | INOUT] parameter_name parameter_type [DEFAULT default_value], ... */
/* RESULT( column_name column_type, ... ) */
begin
declare @str text;
declare @mError integer;
declare @NFile varchar(255);
declare @Path2SVh varchar(255);
declare local temporary table tmpDBF(
tmpCompany varchar(255) null,
tmpPaycod integer null,
tmpLic integer null,
tmpFIO varchar(255) null,
tmpAdress varchar(255) null,
) on commit preserve rows;
set @Path2SVh='F:\SHARE\BaseTest';
/* формируем файл скрипта для dbisqlc */
--set @str=string('-- загрузка данных --',"char"(10));
set @NFile=string('F:\SHARE\BaseTest\\SVH_DBF.sql');
/* записываем файл скрипта */
set @str=string(@str,'input into dba._DBF from ',@Path2SVh,'\\123.dbf format foxpro;',"char"(10));
set @str=string(@str,'exit;',"char"(10));
call xp_write_file(@NFile,@str);
/* закачка файлов dbf во времнные таблицы*/
set @str='start /wait dbisqlc -q -c "charset=cp866;eng=BaseTest;dbn=BaseTest;integrated=yes;commlinks=tcpip;uid=dba;pwd=sql"';
set @str=string(@str,@NFile);
commit work;
call xp_cmdshell(@str,'no_output');
commit work;
end
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064006
(tuy)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

))
ASE железобетонная ???
Я плакаль ...
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064353
Компостеров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
(tuy),
Приведите аргументы, оспаривающие высказывание MasterZiv, а не мерзко хихикайте
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064473
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Offtop: ASE - таки железобетонная, согласен, но все-таки и деревянная тоже. Одно другого не отменяет :)
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064698
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 18.01.2011 13:07, Компостеров wrote:

> Приведите аргументы, оспаривающие высказывание MasterZiv, а не мерзко хихикайте

Да пусть себе их ...
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064704
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 18.01.2011 13:39, Ggg_old wrote:

> Offtop: ASE - таки железобетонная, согласен, но все-таки и деревянная тоже. Одно
> другого не отменяет :)

Как бы либо одно, либо другое.

А что нет импорта из DBF файлов -- так на кой фиг он кому там нужен бы был
в промышленном сервере СУБД ? Это делают не так и не там.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064727
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivА что нет импорта из DBF файлов -- так на кой фиг он кому там нужен бы был
в промышленном сервере СУБД ? Это делают не так и не там.

Ага ... не тем и не те ... и вообще все что там (в документации) написано это так ... для общего сведение и ни в коем случае нельзя использовать как инструкцию к действию и вообще ваша (в смысле наша) задача это не задача для ASE (он же ведь "масштаба предприятия" ) а у вас (т.е. у нас) так ... мелочевка и mysql "вам в руки" !
Как то обидно однако!
Получается что Sybase за свои слова НЕ отвечает! а Вы его "выгораживаете".
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37064797
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините.
Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ...
Мы пока решили попробовать (вновь) загружать через Powerbuilder примерно следующим способом:
1.Разбор структуры DBF и создагние на его основе DataStore
2.Import в этот Datastore (229413 строк - 30сек.)
3.а дальше ...
execute immediate 'alter table ASSORT drop constraint PK_ASSORT' using SQLCA;
string ls
ids_assort.SetTransObject(SQLCA) // это коннект на ASE 15.0
ls=ids_assort.Modify('DataWindow.Table.UpdateKeyInPlace=No')
ls=ids_assort.Modify('DataWindow.Syntax.Modified=Yes')
ls=ids_assort.Modify('DataWindow.Table.UpdateTable="ASSORT"')
ls=ids_assort.Modify('DataWindow.Table.UpdateWhere=0')
ls=ids_assort.Modify('org_id.Key=Yes')
ls=ids_assort.Modify('drug_id.Key=Yes')
ls=ids_assort.Modify('org_id.Update=Yes')
ls=ids_assort.Modify('drug_id.Update=Yes')
ls=ids_assort.Modify('price.Update=Yes')
ls=ids_assort.Modify('qtty.Update=Yes')
ids_assort.SetItemstatus(0,0,Primary!, New!)
r=ids_assort.update()
execute immediate 'alter table ASSORT add constraint PK_ASSORT UNIQUE NONCLUSTERED (DRUG_ID,ORG_ID)' using SQLCA;

В результате update выполняется за 142 сек.

Нас такой результат пока устраивает.

Хотя альтернативный вариант с dbf2csv + bcp мы тоже прорабатываем.
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37070595
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Drive_О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините.
Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ...
Мы пока решили попробовать (вновь) загружать через Powerbuilder примерно следующим способом:
1.Разбор структуры DBF и создагние на его основе DataStore
2.Import в этот Datastore (229413 строк - 30сек.)
3.а дальше ...
execute immediate 'alter table ASSORT drop constraint PK_ASSORT' using SQLCA;
string ls
ids_assort.SetTransObject(SQLCA) // это коннект на ASE 15.0
ls=ids_assort.Modify('DataWindow.Table.UpdateKeyInPlace=No')
ls=ids_assort.Modify('DataWindow.Syntax.Modified=Yes')
ls=ids_assort.Modify('DataWindow.Table.UpdateTable="ASSORT"')
ls=ids_assort.Modify('DataWindow.Table.UpdateWhere=0')
ls=ids_assort.Modify('org_id.Key=Yes')
ls=ids_assort.Modify('drug_id.Key=Yes')
ls=ids_assort.Modify('org_id.Update=Yes')
ls=ids_assort.Modify('drug_id.Update=Yes')
ls=ids_assort.Modify('price.Update=Yes')
ls=ids_assort.Modify('qtty.Update=Yes')
ids_assort.SetItemstatus(0,0,Primary!, New!)
r=ids_assort.update()
execute immediate 'alter table ASSORT add constraint PK_ASSORT UNIQUE NONCLUSTERED (DRUG_ID,ORG_ID)' using SQLCA;

В результате update выполняется за 142 сек.

Нас такой результат пока устраивает.

Хотя альтернативный вариант с dbf2csv + bcp мы тоже прорабатываем.

у меня сейчас по сути тот же вопрос http://www.sql.ru/forum/actualthread.aspx?tid=819359 , что и у вас, можно глянуть этот PB-пример?
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37071062
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Drive_О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините.
Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ...
Мы пока решили попробовать (вновь) загружать через Powerbuilder примерно следующим способом:


Я кстати так и не понял, можете вы убирать индексы и констрейнты с таблиц или нет.
Т.е. это нештатная разовая загрузка или штатная в рабочем режиме.
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37074580
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Imperous,

В аттаче сам объект.
Пример использования:
string as_filename // имя файла для загрузки
ds_dbf ids_assort
ids_assort = create ds_dbf
ids_assort.of_ReadFile(as_filename)
ids_assort.of_ImportFile(as_filename)
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37074612
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Это штатная загрузка, в смысле периодически (раз в XX мин.) запускается.
И индексы и констрейнты мы перед загрузкой удаляем.
Мы пробовали это делать на сервере ASE 12.5.4/EBF 16822 ESD#9.1/P/NT (IX86)/OS 4.0/ase1254/2146/32-bit/OPT
получалось примерно 200тыс. строк за 7-8 мин. а сейчас тоже самое за 22 сек. на
15.5/EBF 17789 SMP ESD#1/P/X64/Windows Server/asear155/2495/64-bit/OPT
Конечно машинка теперь помощнее, но все равно НЕ на столько ....
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37081027
Imperous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Drive_,

пасиба, попробую :)
...
Рейтинг: 0 / 0
Быстрая загрузка DBF в ASE 12 (15)
    #37081064
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Imperous,

Там есть нюанс.
В конструкторе устанавливается в качестве разделителя целой и дробной части ТОЧКА
il_ThreadLocale = GetThreadLocale()
is_LocalInfoDecimal = Space(30)
GetLocaleInfoA(il_ThreadLocale, 14, is_LocalInfoDecimal, Len(is_LocalInfoDecimal))
SetLocaleInfoA(il_ThreadLocale, 14, '.')
SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)

А в деструкторе восстанавливается предыдущее значение
//
SetLocaleInfoA(il_threadlocale, 14, is_localinfodecimal)
SendMessageA(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)

из-за этого HWND_BROADCAST приложение может "моргать"
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Быстрая загрузка DBF в ASE 12 (15)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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