|
Выгрузка данных в MS SQL | ☑ | ||
---|---|---|---|---|
0
Amfiaray
09.06.20
✎
09:26
|
Добрый день!
Есть необходимость выгружать данные из 1С в стороннюю базу MS SQL. Объем данных большой и постоянно растет, на данный момент около 4кк строк. Пробовал несколько вариантов: 1. Построчно INSERT - работает очень медленно. 2. Сформировать файл csv с последующей загрузкой с помощью BULK INSERT - Ещё медленнее на больших объемах, такое ощущение что при формировании текстового документа чем больше строк, тем дольше добавление новой строки. 3. Загрузка с помощью csv и BULK INSERT порциями по 200к записей - Пока это самый быстрый вариант(2.5-3 часа). Может есть какой то более быстрый способ загрузки данных в MS SQL? |
|||
1
ДенисЧ
09.06.20
✎
09:37
|
"при формировании текстового документа чем больше строк, тем дольше добавление"
Как создаёшь документ? |
|||
2
ДенисЧ
09.06.20
✎
09:40
|
А вообще - напрямую из скуль-базы 1с в скуль-базу стороннюю через линкед-сервер
|
|||
3
МихаилМ
09.06.20
✎
09:44
|
причем тут 1с
при булк инсерт должно быть минимум 100к записей в секунду (зависит от индексов) те загрузка должна длиться в районе минуты можно использовать многопоточную запись с помощью ssis. почитайте про загрузку данный номеров недействительный паспортов из файла list_of_expired_passports.csv.bz2 |
|||
4
Кирпич
09.06.20
✎
09:45
|
загружать вот самый быстрый способ
https://docs.microsoft.com/ru-ru/sql/tools/bcp-utility?view=sql-server-ver15 а быстро выгружать из 1с это отдельная песня |
|||
5
Кирпич
09.06.20
✎
09:52
|
Быстро выгружать из 1с. Я бы запрос сбрасывал на диск функцией ЗначениеВФайл(), а потом этот текст парсил на быстром языке и выдавал файл для загрузки для bcb или BULK INSERT.
|
|||
6
Amfiaray
09.06.20
✎
10:00
|
(1) Документ создаю вот так:
ФайлCSV = Новый ТекстовыйДокумент; ФайлCSV.ДобавитьСтроку(ТекстШапки); Для Каждого СтрокаТ Из ТаблицаДанных Цикл ТекстСтроки = ""; Для Каждого Колонка Из ТаблицаДанных.Колонки Цикл Если ТекстСтроки = "" Тогда ТекстСтроки = СокрЛП(СтрокаТ[Колонка.Имя]); Иначе ТекстСтроки = ТекстСтроки+Разделитель+СокрЛП(СтрокаТ[Колонка.Имя]); КонецЕсли; КонецЦикла; ФайлCSV.ДобавитьСтроку(ТекстСтроки); КонецЦикла; ФайлCSV.Записать(ИмяФайла, КодировкаТекста.UTF16); |
|||
7
Amfiaray
09.06.20
✎
10:01
|
(2) Там ТЗ получается в мудреном и большом запросе а не просто из таблицы в таблицу
|
|||
8
Amfiaray
09.06.20
✎
10:02
|
(3) Долго файл csv формируется
|
|||
9
ДенисЧ
09.06.20
✎
10:02
|
(6) Используй ЗаписьТекста, она быстрее
|
|||
10
Amfiaray
09.06.20
✎
10:03
|
(9) Ок, сейчас попробую, по результату отпишусь
|
|||
11
arsik
гуру
09.06.20
✎
10:06
|
(10) Еще и перебор колонок лучше из цикла убрать. Например перед циклом в массив загоните названия колонок. Внутри цикла уже этот массив используйте.
|
|||
12
arsik
гуру
09.06.20
✎
10:07
|
+ (11) И зачем вам там имя, можно по индексу обращаться.
|
|||
13
Amfiaray
09.06.20
✎
10:11
|
(10) Всё это быстро отрабатывает. С каждой новой строкой вот этот код работает всё дольше: ФайлCSV.ДобавитьСтроку(ТекстСтроки);
|
|||
14
ДенисЧ
09.06.20
✎
10:13
|
(13) Это в записи текста?
|
|||
15
Кирпич
09.06.20
✎
10:13
|
(13) ну дак ты все в память пихаешь, да еще и каждый раз память перевыделяется при добавлении. пиши сразу в файл и не парься
используй ЗаписьДанных.ЗаписатьСимволы, например. |
|||
16
Amfiaray
09.06.20
✎
10:14
|
(14) нет, в текстовом документе
|
|||
17
ДенисЧ
09.06.20
✎
10:14
|
(16) не удивительно
|
|||
18
arsik
гуру
09.06.20
✎
10:14
|
(14) Не. В записи всегда линейно. Это в текстовомДокументе так работает.
|
|||
19
ДенисЧ
09.06.20
✎
10:26
|
(18) На это я и намекаю. Ещё с (9)
|
|||
20
Кирпич
09.06.20
✎
10:39
|
Так вот попробуй
|
|||
21
rsv
09.06.20
✎
11:23
|
(0) есть мастер импорта и експорта в скуле родной (правой кнопокой на табличке скуля контекстное меню)
. Если одинэска на скуле - выгрузите через него данные в текст или еще куда там в мастере Много форматов . На стронней базе сделайте импорт |
|||
22
МихаилМ
09.06.20
✎
11:24
|
я бы посмотрел в сторону https://its.1c.ru/db/metod8dev#content:2584:hdoc
|
|||
23
rsv
09.06.20
✎
11:28
|
Когда через промежуточные файлы надоест гонять - создайте на строннем скуле
линк на 1с скуль и .... select * into табличка from линк. База.dbo. Табличка |
|||
24
Кирпич
09.06.20
✎
11:30
|
(23) он какой то хитроумный запрос выгружает, а не просто справочник
|
|||
25
rsv
09.06.20
✎
11:31
|
(24) придется переписать под скуль... или как и ранее промежуточный файл
|
|||
26
Кирпич
09.06.20
✎
11:34
|
(25) да кто там будет писать то
|
|||
27
МихаилМ
09.06.20
✎
11:41
|
(23)
человек за 10 лет не узнал про https://speshuric.livejournal.com/163665.html |
|||
28
rsv
09.06.20
✎
11:42
|
Как вариант минимизации это сделать табличку простенького
Регистра сведений в 1ске с выходными полями запроса строка число дата Регистр.загрузить(запрос. Выполнить.выгрузить) - по скорости это к движку 1с Будет таблица - ее уже можно выгружать и гнать напрямки селектом простым |
|||
29
rsv
09.06.20
✎
11:50
|
(27) по ссылке наверное автор любит все выгружать либо в текст или xml и
Обратно загружать ... |
|||
30
Ёпрст
09.06.20
✎
11:52
|
(27) да..через ЗаписьXML реально быстро
|
|||
31
МихаилМ
09.06.20
✎
11:55
|
(30)
в 16 релизе переписали работу с памятью. так что возможно что-то изменилось. |
|||
32
Ёпрст
09.06.20
✎
11:57
|
(31) на 15 пока..лень смотреть новые релизы
|
|||
33
Ёпрст
09.06.20
✎
11:59
|
(0) а че за данные то хоть ?
Мот того, не выгружать ничего в текст, а все сразу в сторонний скуль, напрямую, как ужо неоднократно советовали |
|||
34
Конструктор1С
09.06.20
✎
12:25
|
4kk строк это ниочем. Что-то вы делаете не так
|
|||
35
Кирпич
09.06.20
✎
12:46
|
(34) И правда. Попробовал (6)
200000 строк типа "Колонка1;Колонка2;Колонка3;Колонка4;Колонка5;Колонка6;Колонка7;Колонка8;Колонка9;Колонка10" за 40 сек выгружает чота автор понапрограммировал неправильно |
|||
36
Amfiaray
09.06.20
✎
20:23
|
(33) Данные для bi системы, там движения по регистру бухгалтерии по доходам, расходам и производству за 1.5 года по 300+ организациям в разрезе аналитики(+ анализ аналитики и замена при необходимости).
|
|||
37
Престарелый Заяц
09.06.20
✎
20:50
|
(23) И что быстро работает?
|
|||
38
Amfiaray
09.06.20
✎
21:22
|
(37) В итоге переделал на ЗаписьТекста и стало работать быстрее, 1,5 года выгружаются меньше чем за час.
|
|||
39
Ёпрст
09.06.20
✎
22:40
|
(38) записьXML еще быстрее будет
|
|||
40
Ёпрст
09.06.20
✎
22:40
|
+39 см (27)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |