|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
Вопрос стоит уже давно и пока решается "не просто", а именно через 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 ... но скорость в ДЕСЯТКИ раз медленнее. Кто нибудь сталкивался с такой же проблемой? как решали? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 12:33 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
On 14.01.2011 12:33, _Drive_ wrote: > ДЕСЯТКИ раз медленнее. Кто нибудь сталкивался с такой же проблемой? как решали? Проблему твою конкретно не понимаю, но вообще это делается так: 0) экспорт DBF -> файл данных для BCP (это может быть например CSV тот же) 1) импорт данных в базу с помощью BCP. Если нужна быстрая загрузка. (реально быстрая), то в таблице должны быть отключены триггера, отключены констрейнты и удалены индексы. Иначе BCP будет грузить транзакционно, т.е. INSERT-ами. Это -- медленно. Если тебе нельзя отключить триггера, констрейнты и индексы, загрузка любыми средствами будет медленной. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 13:53 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
Проблема в том что клиенты присылают файлы в формате DBF РАЗНОЙ конфигурации в том смысле, что порядок полей может быть разный. И как тогда загружать через bcp не зная заранее ПОРЯДОК полей в файле CSV ??? А "Экспорт DBF-> файл данных для BCP" ЭТО КАК??? ... писать свою прогу (лучше на С или C++) которая будет парсить DBF файл (причем некоторые присылают в формате dBaseVI некоторые FoxPro) и формировать из него ПРАВИЛЬНЫЙ CSV (с правильным порядком полей) ? а готовая есть? и все равно получается 2 прохода!!! а хочется в ОДИН ... Про триггеры и индексы мы помним, в смысле триггеров на той таблице нет, а индексы перед заливкой удаляются а после создаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 16:13 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
> Проблема в том что клиенты присылают файлы в формате DBF РАЗНОЙ конфигурации в том смысле, что >порядок полей может быть разный. Ну как бы это -то вопрос отдельный. Его отдельно решать надо. Как ты будешь что-то импортировать без определённого формата -- не понятно. Но вообще-то в BCP есть поддержка форматных файлов, там можно задать формат полей для BCP. > И как тогда загружать через bcp не зная заранее ПОРЯДОК полей в файле CSV ??? > А "Экспорт DBF-> файл данных для BCP" ЭТО КАК??? ... писать свою прогу (лучше на С или C++) Это как хочешь. Можно писать, можно какую-то готовую найти. > которая будет парсить DBF файл (причем некоторые присылают в формате dBaseVI некоторые FoxPro) и > формировать из него ПРАВИЛЬНЫЙ CSV (с правильным порядком полей) ? а готовая есть? > и все равно получается 2 прохода!!! а хочется в ОДИН ... Тогда пиши сам программу на BCP API. Модератор: MasterZiv, ты уж совсем обленился. Помечай цитаты, пожалуйста. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 17:31 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
я такую готовую универсальную тулзу не видел. Когда-то давно, на прошлой работе у нас была такая, местной разработки, умела импортить из dbf. Насколько же азешка деревянная в сравнению с азашкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2011, 23:35 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
On 14.01.2011 23:35, Ggg_old wrote: > Насколько же азешка деревянная в сравнению с азашкой. Она не деревянная. Она железобетонная. Энтерпрайзная. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.01.2011, 15:09 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
Все вы правы, но зачем писать в документации то что не соответствует действительности ? Конечно мы уже нашли несколько программ (в том числе скрипт на Perl) которые умеют dbf2csv, но опять таки встает вопрос о порядке полей. А вот если бы было можно сразу загрузить dbf в ASE (главное чтобы в этом dbf были ВСЕ нужные поля не важно в каком порядке), то потом ... insert into MyTable (field1, field2 ...) select field1, field2 ... from tmp_table where .... и ВСЕ!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2011, 09:34 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
под 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 ... |
|||
:
Нравится:
Не нравится:
|
|||
17.01.2011, 10:25 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
MasterZiv, )) ASE железобетонная ??? Я плакаль ... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 11:20 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
(tuy), Приведите аргументы, оспаривающие высказывание MasterZiv, а не мерзко хихикайте ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 13:07 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
Offtop: ASE - таки железобетонная, согласен, но все-таки и деревянная тоже. Одно другого не отменяет :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 13:39 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
On 18.01.2011 13:07, Компостеров wrote: > Приведите аргументы, оспаривающие высказывание MasterZiv, а не мерзко хихикайте Да пусть себе их ... Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 14:57 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
On 18.01.2011 13:39, Ggg_old wrote: > Offtop: ASE - таки железобетонная, согласен, но все-таки и деревянная тоже. Одно > другого не отменяет :) Как бы либо одно, либо другое. А что нет импорта из DBF файлов -- так на кой фиг он кому там нужен бы был в промышленном сервере СУБД ? Это делают не так и не там. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 14:58 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
MasterZivА что нет импорта из DBF файлов -- так на кой фиг он кому там нужен бы был в промышленном сервере СУБД ? Это делают не так и не там. Ага ... не тем и не те ... и вообще все что там (в документации) написано это так ... для общего сведение и ни в коем случае нельзя использовать как инструкцию к действию и вообще ваша (в смысле наша) задача это не задача для ASE (он же ведь "масштаба предприятия" ) а у вас (т.е. у нас) так ... мелочевка и mysql "вам в руки" ! Как то обидно однако! Получается что Sybase за свои слова НЕ отвечает! а Вы его "выгораживаете". ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 15:05 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините. Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ... Мы пока решили попробовать (вновь) загружать через 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 мы тоже прорабатываем. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.01.2011, 15:26 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
_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-пример? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2011, 09:28 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
_Drive_О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините. Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ... Мы пока решили попробовать (вновь) загружать через Powerbuilder примерно следующим способом: Я кстати так и не понял, можете вы убирать индексы и констрейнты с таблиц или нет. Т.е. это нештатная разовая загрузка или штатная в рабочем режиме. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.01.2011, 12:29 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
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) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2011, 10:04 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
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 Конечно машинка теперь помощнее, но все равно НЕ на столько .... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.01.2011, 10:18 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
_Drive_, пасиба, попробую :) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2011, 10:23 |
|
Быстрая загрузка DBF в ASE 12 (15)
|
|||
---|---|---|---|
#18+
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 приложение может "моргать" ... |
|||
:
Нравится:
Не нравится:
|
|||
27.01.2011, 10:39 |
|
|
start [/forum/topic.php?fid=55&msg=37081064&tid=2010425]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
others: | 317ms |
total: | 461ms |
0 / 0 |