Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Быстрая загрузка DBF в ASE 12 (15) / 21 сообщений из 21, страница 1 из 1
14.01.2011, 12:33
    #37058767
_Drive_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
Вопрос стоит уже давно и пока решается "не просто", а именно через 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
14.01.2011, 13:53
    #37058983
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
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
14.01.2011, 16:13
    #37059372
_Drive_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
Проблема в том что клиенты присылают файлы в формате DBF РАЗНОЙ конфигурации в том смысле, что
порядок полей может быть разный. И как тогда загружать через bcp не зная заранее ПОРЯДОК полей в файле CSV ???
А "Экспорт DBF-> файл данных для BCP" ЭТО КАК??? ... писать свою прогу (лучше на С или C++)
которая будет парсить DBF файл (причем некоторые присылают в формате dBaseVI некоторые FoxPro) и
формировать из него ПРАВИЛЬНЫЙ CSV (с правильным порядком полей) ? а готовая есть?
и все равно получается 2 прохода!!! а хочется в ОДИН ...
Про триггеры и индексы мы помним, в смысле триггеров на той таблице нет, а индексы перед заливкой удаляются а после создаются.
...
Рейтинг: 0 / 0
14.01.2011, 17:31
    #37059594
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
> Проблема в том что клиенты присылают файлы в формате DBF РАЗНОЙ конфигурации в том смысле, что
>порядок полей может быть разный.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ага ... не тем и не те ... и вообще все что там (в документации) написано это так ... для общего сведение и ни в коем случае нельзя использовать как инструкцию к действию и вообще ваша (в смысле наша) задача это не задача для ASE (он же ведь "масштаба предприятия" ) а у вас (т.е. у нас) так ... мелочевка и mysql "вам в руки" !
Как то обидно однако!
Получается что Sybase за свои слова НЕ отвечает! а Вы его "выгораживаете".
...
Рейтинг: 0 / 0
18.01.2011, 15:26
    #37064797
_Drive_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините.
Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ...
Мы пока решили попробовать (вновь) загружать через 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
21.01.2011, 09:28
    #37070595
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
_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
21.01.2011, 12:29
    #37071062
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
_Drive_О предыдущем моем посте - был написан в порыве возмущения, если кого обидел, то извините.
Но ... критиковать все мастера, а вот предложить что-нибудь конкретное ...
Мы пока решили попробовать (вновь) загружать через Powerbuilder примерно следующим способом:


Я кстати так и не понял, можете вы убирать индексы и констрейнты с таблиц или нет.
Т.е. это нештатная разовая загрузка или штатная в рабочем режиме.
...
Рейтинг: 0 / 0
24.01.2011, 10:04
    #37074580
_Drive_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
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
24.01.2011, 10:18
    #37074612
_Drive_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
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
27.01.2011, 10:23
    #37081027
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
_Drive_,

пасиба, попробую :)
...
Рейтинг: 0 / 0
27.01.2011, 10:39
    #37081064
_Drive_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Быстрая загрузка DBF в ASE 12 (15)
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
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Быстрая загрузка DBF в ASE 12 (15) / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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