Имя: Пароль:
1C
1С v8
Массовое копирование из 1С в MS SQL
0 Odin-s
 
24.05.13
17:00
Приветствую!

В 1С формируется таблица из 800k строк, которую нужно выгрузить в сиквел. Создание таблицы занимает 5 минут, построчный insert через COM - 5 часов, почему-то (убийственное время для столь незначительного объема данных) :(

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

Теоретическая информация, пожалуй, не интересует.
1 Ненавижу 1С
 
гуру
24.05.13
17:01
база 1С серверная?
2 Delorn
 
24.05.13
17:09
(0) копируешь что? Особенно круто если получаешь то что копируешь одним 1сным запросом. База серверная и на том же 1с.
3 AlexTim03
 
24.05.13
17:09
Кури функцию bulk, она работает с массивами данных
4 AlexTim03
 
24.05.13
17:12
Вот так:
BULK INSERT
5 Лефмихалыч
 
24.05.13
17:15
чтобы построчности избежать - "булкин сёрт".
а, если база 1С серверая, то быстрее будет SQL-запросом напрямую select into

но вообще лучше отказать ся от затеи вскуль чо-тонапрямую писать - это от лукавого
6 Serginio1
 
24.05.13
17:19
7 Serginio1
 
24.05.13
17:20
Обычно BULK INSERT загружаю в темповую таблицу индексирую а дальше применяю Merge
8 qeos
 
24.05.13
17:23
(0) пихай по 1000 строк
9 Odin-s
 
24.05.13
17:39
База серверная, но таблица собирается сложным алгоритмом и имеет критическую важность - даже если алгоритм можно реализовать одним запросом, понадобится серьезная отладка, а косяки в реальном времени грозят значительными убытками для компании.

Всем спасибо за советы. Идею про 1000 строк мне уже озвучил админ бд, но с "булкин сёрт" рекомендовал не связываться.
10 Серго62
 
24.05.13
17:54
(0) А тебе обязательно построчно записывать? insert into ИмяТаблицыПриемника from (select ИменаПолей from ИмяТаблицыИсточника) не подойдет?
11 sttt
 
24.05.13
17:55
(9) как раз с BULK INSERT самое то
12 qeos
 
24.05.13
18:05
(9) булком кажется данные просто вливаются и все.. без всяких взаимосвязей и проверок..
13 Odin-s
 
24.05.13
18:11
C BULK может вылезти косяк - например, если символ разделителя встретился в текстовом поле. Это был основной аргумент против.

(10) Собирается таблица значений в 1С, в запрос её не вставить, к сожалению :)
14 sttt
 
24.05.13
18:21
символ разделителя можно самому задать при выгрузке и загрузке:
BULK INSERT EmployeeDB.dbo.Employees

FROM 'C:\Data\EmployeeData_n.dat'

WITH

 (
   DATAFILETYPE = 'char',
   FIELDTERMINATOR = '#',
   ROWTERMINATOR = '\r\n'
   TABLOCK

 );
15 sttt
 
24.05.13
18:22
(13) тз в файл выгружать, на сервере
16 sttt
 
24.05.13
18:28
можно и прям на сервере:

SELECT поле1, поле2
INTO НашаТаблица
FROM Таблица1С
17 Odin-s
 
24.05.13
18:32
(14) в таблице есть поле комментария, в котором может быть любой символ, теоретически.
18 Живой Ископаемый
 
24.05.13
18:35
а еще можно поместить ТЗ во временную таблицу, в результате она будет записана в темпдб  движком, нужно только узнать как она называется и выполнить команду select into from
19 Ахиллес
 
24.05.13
18:36
(17) Ну и замени этот символ предварительно на другой. Поверь, всем будет наплевать если вдруг все ";" превратятся в ","
20 Ахиллес
 
24.05.13
18:39
(18) Как назовёшь, так и будет называться :-)
Даю наводку: РЕГИСТР СВЕДЕНИЙ. Собирать данные не в какую то мифическую таблицу, а в регистр сведений, ну а далее по тексту, из одной таблицы перегрузить в другую средствами скуль сервера.
21 Odin-s
 
24.05.13
18:47
(19) и запретить ";" вообще в поле вводить?
(18),(20) спасибо, попробую
22 Ахиллес
 
24.05.13
18:50
(21) Не важно. Можно во время сбора данных замену делать.
23 Живой Ископаемый
 
24.05.13
18:55
М... Да, наверное
24 Odin-s
 
24.05.13
18:56
(22) Не, мне идея с РС больше понравилась :)
25 Ахиллес
 
24.05.13
19:00
Ток мне кажется, что РС сам по себе тормоз ещё тот. Может справочник использовать? В общем пробовать надо. В конце перегрузки грохать все записи тем же скулем, если ссылок на другие метаданные в 1С не будет, то наверное наплевать, что там унутре чё нить разъедется :-)
26 Cyberhawk
 
24.05.13
19:47
Расскажите, в каких условиях возникают подобные задачи? Только в разношерстной среде? Только в каких-нибудь холдингах?
27 Мимохожий Однако
 
24.05.13
19:54
Интернет услуги, биллинги, услуги связи, счетчики ЖКХ
28 Живой Ископаемый
 
24.05.13
20:15
2(25) в РС запись быстрее всего, даже быстрее чем в  справочник. См ветку про многопоточный тест производительности
29 Живой Ископаемый
 
24.05.13
20:16
а тормоз тот, у кого больше индексов и вспомогательных таблиц при прочих равных.
30 ado
 
24.05.13
21:44
31 Odin-s
 
27.05.13
12:47
(30) Спасибо, этот вариант тоже рассматривали, но пока отложили как не самый надёжный.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший