|
Массовое копирование из 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) Спасибо, этот вариант тоже рассматривали, но пока отложили как не самый надёжный.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |