Автоматическая многопоточная выгрузка данных 1С 8.3 в БД Clickhouse (для работы с данными 1С в BI-системах)

0. Техподдержка 15.11.22 12:50
Готовое решение для автоматизированной выгрузки данных из 1С 8.3 в базу данных ClickHouse для работы с данными 1С в Yandex Datalens, Apache Superset (и не только) - "Экстрактор данных 1С в BI".
Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм.
Gозволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens/
Система полностью автоматизирует работу с хранилищем данных в БД Clickhouse. Не надо быть программистом, чтобы одной кнопкой получать любые данные из 1С в Yandex Datalens

Перейти к публикации

Отзывы
17. Yozha 24.02.23 09:37 Сейчас в теме
Пользуюсь решением в настоящее время. У нас как раз работает вариант с инкрементной выгрузкой. Продукт позволил значительно сократить время реализации проекта. Проект пока не сдан, но все основные механизмы уже интегрированы в базу заказчика, в настоящее время проходят тестирование.
Техподдержка работает на хорошем уровне.
Уже сейчас могу смело рекомендовать продукт к покупке и внедрению.
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. SP2000 27 15.11.22 14:19 Сейчас в теме
Обычное приложение поддерживается?
2. Техподдержка 15.11.22 14:22
(1)
Обычное приложение поддерживается?


Пока не поддерживается (Еще не было запросов)
Если Ваша конфигурация в принципе допускает запуск в управляемых формах, то наше Расширение будет доступно и будет работать и так
(некоторые так пользуются)

Если напишете какой релиз конфигурации и платформу 1С используете, посмотрим что можно сделать
3. 1spectr 15.11.22 19:56 Сейчас в теме
А выгрузка всегда полная или поддерживается инкремент?
4. Техподдержка 15.11.22 20:02
(3)
А выгрузка всегда полная или поддерживается инкремент?


В таблицу - приемник делается сейчас полная выгрузка (в 99% в 1С нельзя определить, что за этот период времени вот эти вот данные изменились, если конечно вы не используете планы обмена, но даже с планами обмена не все просто)

Обычно мы делаем так:
0. Делаем два набора данных и соответственно две таблицы- приемника в clickHouse (генерация таблиц у нас реализована)
1. "Таблица_ИсторическиеДанные" - сюда разово загружаем данные до определенной даты (например до 01/01/2022) (просто ручками тыкаем кнопку один раз)
2. "Таблица_Текущая" - а здесь по расписанию данные перезаписываем созданным ранее регламентным заданием
3. а на уровне ClickHouse делаем такой код (пример):

Cre ate View Таблица_ВСЯ
as
sel ect * from Таблица_ИсторическиеДанные
uni on all
sel ect * fr om Таблица_Текущая

4. Далее, в Datalens уже используем для работы созданную View = "Таблица_ВСЯ"
18. Техподдержка 27.02.23 13:01
(3) Теперь поддерживается инкремент (выгрузка по партициям)
5. 1spectr 15.11.22 20:11 Сейчас в теме
(4) те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?
6. Техподдержка 15.11.22 20:35
(5)
те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?

Ну это первый вариант, который на поверхности
Другой вариант - в Наборах данных Экстрактора 1С привязываться к дате закрытия периода или еще к какому то реквизиты для секционирования данных

Изначально мы думали над автоматическим секционированием таблиц-приемников по годам/месяцам, но любовь 1С-пользователей к правкам "задним периодом" все эти схемы ломает на раз-два.
К примеру, вот 10 января - это уже новый год. А правки пользователи будут вносить еще половину всего прошлого года. Одно дело, если база небольшая, можно перегружать текущий и прошлый год, а если в базе сотни тысяч документов, то такой подход уже не подходит.
В общем пока вся история с автосекционированием - это, как мне кажется, индивидуально подбираемое решение для каждого конкретного Заказчика

Если у Вас есть какая-то идея по автоматическому сдвигу "окна", то давайте обсудим и если это будет достаточно универсально, то мы включим это в один из ближайших релизов
19. Техподдержка 27.02.23 13:06
(5)
(4) те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?

Теперь все сделано намного более удобно:
1. Выгрузка идет по партициям (причем партиции вы определяете сами при описании таблицы-приемника)
2. Выгрузка идет в указанное вами количество потоков (т.е. выгрузка распараллеливается, что очень сильно ускоряет выгрузку данных)
3. Есть предобработка и постобработка при выгрузке данных, что позволяет встраивает свои обработчики
4. Решение может внедряться в вашу 1С как "расширение" или через объединение конфигураций (для тех 1С, у кого старые релизы 1С (например 8.3.11 и ранее) или для тех у кого "кастомные" конфигурации)
7. 1spectr 15.11.22 21:56 Сейчас в теме
(6) Универсального решения нет, но если работаем с более менее большими данными, то эффективность более приоритетна чем универсальность.
Если мы берем за аксиому, что данное решение для небольших(база не более 300-500гб) инсталляций 1С(так как на больших системах все сильно сложнее)

Задачи которые необходимо решить
1) Обеспечить консистентность данных с приемлемой задержкой(так как реалтайм для аналитике в целом не нужен).

2) Минизировать "пропадание" данных при обновлении данных(Clickhouse это не реляционная база и update в классическом смысле там нет).
Как я понимаю сейчас в момент выгрузки данные в таблице стираются и записываются заново(возможно я не прав)?

3) Минимизировать нагрузку при синхронизации, так как чем больше данных тем больше требуется напрягать базу данных для получения этих данных и сервер приложений для конвертации(json или tsv(csv) самые простые для 1С) перед выгрузкой/


Варианты решения.
Вариант с планом обмена(или его аналогами)
Есть таблицы с функциональностью которая позволяет удалять дубликаты по сочетанию измерений ReplacingMergeTree
ReplacingMergeTree
Те в данную таблицу можно получая изменения из плана обмена отправлять актуальные данный и ch сам удалит дубликаты и оставит только одну последнюю запись(есть нюансы, но для небольших данных(10ки миллионов строк) пойдет)

Другой вариант
Предполагаем что в таблице есть Период(или любое другое поле с Датой), так как вопрос выгрузки Справочников это отдельная тема
Предположим что мы не знаем, что именно пользователи поменяли, но можем понять что в данном документе произошло изменение(стандартная логика регистрации в плане обмена)
В таком случае мы можем создать таблицу которая будет партиционирована, например по дням. Далее получаем из плана обмена записи, по ним определяем день в котором данные были изменены, удаляем партицию с этим днем в ch(удаление партиции равно по ресурсам удалению одного файла, те очень быстрое и дешевое) и записываем полностью этот день заново.
Если мы хотим чтобы никто не заметил что произошло обновление данных, то мы создаем таблицу аналогичной структуры записываем в нее данные и потом "подменяем" партиции в таблицах(операция атомарная поэтому никто не заметит пропажи).
8. Техподдержка 15.11.22 23:14
(7)
Как я понимаю сейчас в момент выгрузки данные в таблице стираются и записываются заново(возможно я не прав)

Да, сейчас именно так

Минимизировать нагрузку при синхронизации, так как чем больше данных тем больше требуется напрягать базу данных для получения этих данных и сервер приложений для конвертации(json или tsv(csv) самые простые для 1С) перед выгрузкой

Да, есть два варианта выгрузки:
1. insert.... values (...), (...)
2.через файл - вариант более быстрый и предпочтительный (используется по умолчанию)

С вами где-то согласен.
Но построение выгрузки на Плане обмена или регистрации дней/месяцев, когда данные были изменены - это уже кастомное решение под Заказчика, так как зависит от бизнес-задачи и конкретной конфигурации.
Мы не знаем, на какой раздел учета обратит внимание аналитик и пожелает выгружать:
- хоз.операции в бухучете,
- Регистры продаж
- или регистры расчета в ЗУП (вариантов масса)

Поэтому ваши, безусловно верные, методы регистрации изменений и доставки изменений в ClickHouse к сожалению не универсальны, в том числе, если рассматривать 1С в файловом (а не клиент-серверном) варианте (ведь такие пользователи тоже есть, не у всех есть "большие" данные)
Также, предполагаю, что в ваших вариантах, для некоторых конфигураций и платформ 1С придется встраиваться в саму конфигурацию клиента, а не оставаться в рамках "расширения" (тут наверное больше скажут наши программисты, нежели я)

На мой взгляд, если объемы данных велики и нужен "реалтайм", то лучше уже тогда идти по пути "прямого" доступа к БД 1С (через View), нежели используя механизм регистрации изменений и выгрузок средствами 1С платформы

В целом, спасибо за конструктивное замечание. Продукту есть куда развиваться.

Ну и это уже вопрос "кастомного" индивидуального решения под вас (готовы обсуждать)
9. 1spectr 15.11.22 23:36 Сейчас в теме
(8) Мы эти вопросы уже решили, иначе я не смог бы не написал то что написал )
В вашем решении не хватает инкремента, так как в текущей реализации есть только прикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.

1) Полная перегрузка данных, те аналитики должны подстраиваться под технологическое окно обновления так как пока 1С выгружает данные, в DL данных нет, либо они есть, но неполные данные хуже полного отсутствия.

2) Нагрузка при выгрузке, это важный момент, так как выгружается все таки ощутимый объем данных.

3) Решение с перегрузкой текущего периода уменьшает нагрузку, но не решает 1 пункта и оно требует компетенции которой обладают далеко не все.

Но концептуально я придираюсь )
Хорошее решение для небольших организаций(1с у них и так есть, а ch в облаке стоит несколько тысяч рублей в месяц) которое позволит им выйти за пределы отчетов которые дает 1С и с минимальными усилиями воспользоваться современными low code инструментами аналитики.
10. Техподдержка 16.11.22 08:42
(9)
рикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.


Не совсем так:
В нашем решении есть:
1.создание наборов данных (запрос или объект [в ближайшее время опишу уже выпущенный релиз])
2. автосоздание, модификация таблиц в ClickHouse с маппингом полей по Набору данных (ведь это же боль - генерировать руками таблицы-приемники)
3. добавление вычисляемых полей, параметров, отборов для удобства с повторным использованием одного Набора данных в разных выгрузках
4. создание и модификация регламентного задания по перезаполнению таблиц в ClickHouse
5. Плюс ко всему - наше решение еще и универсально по отношению к большинству конфигураций 1С, присутствующих на рынке

Спасибо вам за идею, по поводу работы с партишенами на уровне дня в базе Clickhouse. Думаю, это можно обыграть (взяли на обдумывание)


Что касается, что у нас хорошее решение для "небольших организаций" - немного нет так :)
У нас отличное решение для относительно небольших баз данных, к коим можно отнести огромное количество заводов, оптовых компаний, ритейла среднего размера, предприятий питания или сферы услуг. Т.е. сама организация может быть весьма крупной, просто в ее 1С нет сотен миллионов транзакций (это свойственно больше крупному ритейлу).
А для мега крупного ритейла из нашего решения можно сделать кастомный вариант, который будет очень быстро и красиво работать


Самое главное - наше решение (вы правы) - это возможность, используя данные 1С, перейти на работу с современным BI (Yandex Datalens)
11. Техподдержка 17.11.22 14:23
(9)
В вашем решении не хватает инкремента, так как в текущей реализации есть только прикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.


Спасибо большое за комментарии.
Обдумали возможные пути решения.
Думаю, до конца года сможем реализовать достаточно универсальную схему по регистрации изменений до уровня "Месяц/день", а значит и реализовать инкрементальную загрузку "Наборов данных" в Clickhouse.

Вы натолкнули нас на достаточно элегантное решение :)
12. Техподдержка 09.01.23 18:29
Текущие изменения:
1. поработали над интерфейсом (теперь он удобнее и проще)
2. добавили логирование
3. исправили пару досадных недочетов
4. выполнили несколько проектов и окончательно убедились, что проект востребован и нужен, а также весьма и весьма удобен для работы с выгрузкой из 1С в Clickhouse
13. DenDSMG 15 16.01.23 14:43 Сейчас в теме
в запросах можно использовать временные таблицы ?
Можно передавать параметром Текущую дату ? (чтобы в запросе была возможность выгружать определенный период от сегодняшней даты)
14. Техподдержка 16.01.23 18:22
(13)
в запросах можно использовать временные таблицы ?
Можно передавать параметром Текущую дату ? (чтобы в запросе была возможность выгружать определенный период от сегодняшней даты)


1. В Запросах можно использовать и временные таблицы. (штатный же функционал)
2. Параметром Текущую дату пока передать нельзя (для этого пока клиенты используют сейчас "Отборы"), записано в план доработки на этот квартал. Но, если надо быстрее, то данную функциональность поставим в план на ближайший релиз, если выкупите лицензию
16. Техподдержка 06.02.23 12:42
(14)
Можно передавать параметром Текущую дату ?

Теперь можно, реализовали и работу с параметрами, ну а в параметрах есть стандартный набор выбора дат, в точ числе и текущая дата и начало месяца и т.д.
15. Техподдержка 06.02.23 12:41
Нас можно поздравить:

Вышел предрелиз нашего расширения по выгрузке данных из 1С 8.3 в БД Clickhouse с отслеживанием изменений.
Новая версия предназначена для обработки больших (реально больших) объемов данных
Новинки:
1. Выгрузка теперь для каждого "проекта" настраивается в несколько потоков, что позволяет значительно ускорить выгрузку больших данных (данные разбиваются на партиции, каждая партиция становится в очередь потоков)
2. Таблица-приемник теперь не очищается, а поток данных из Источника разбивается на партиции и каждая партиция перезаписыывается в приемнике отдельно
3. для ускорения работы, есть опциональная настройка отключения по выбранным полям выгрузки "экранирования" недопустимых символов (табуляция, одинарная кавычка, перевод каретки и т.д.). позволяет увеличить скорость выгрузки в разы
17. Yozha 24.02.23 09:37 Сейчас в теме
Пользуюсь решением в настоящее время. У нас как раз работает вариант с инкрементной выгрузкой. Продукт позволил значительно сократить время реализации проекта. Проект пока не сдан, но все основные механизмы уже интегрированы в базу заказчика, в настоящее время проходят тестирование.
Техподдержка работает на хорошем уровне.
Уже сейчас могу смело рекомендовать продукт к покупке и внедрению.
20. Техподдержка 01.03.23 18:42
Обновил документацию под 1.3.1
Версию тестируем, скоро будем рассылать подписчикам
Ну и записал пару видео

Оставлю здесь ссылки:

1. Описание обновления 1.3.1
2. Для версии 1.3.1 - удобный побочный эффект при использовании (ну или возможность)
21. Техподдержка 15.03.23 18:29
Update от 15/03/2023 (версия 1.3.2)
Изменения:
1. Поддержка Nullable полей при создании/модификации таблицы в clickhouse
2. Описание значений в Order By, Partition в таблицах clickhouse доступно и из списка возможных значений
3. Тестовая функциональность по таймаутам при выгрузке в БД clickhouse
4. увеличена разрядность поля "Максимальное количество потоков"
5. поправлен баг в создании Групп в списке Наборов данных
6. Возможность использовать в "Параметрах" Список значений (для конструкций запросов в отбрах и т.д.: "В (&СписокЧеголибо)")
7. Мелкие правки по интерфейсу
8. Также в документации дописаны некоторые кейсы по работе с многопоточностью
22. Техподдержка 06.04.23 19:09
Update от 06.04.2023 (Версия 1.4.2)
Изменения:

Переписали встроенную в Расширение роль "Экс_ПолныеПрава", с тем, чтобы можно было поддерживать и старые платформы 1С (типа 8.3.13)
Добавили в настройку создания "Регламентного задания" Пользователя, под которым данное задание будет запускаться (так как пользователю даже с "Полными" правами надо явно выдавать роль "Экс_ПолныеПрава")
Переделали систему лицензирования немного (ключ лицензии теперь вводится в пользовательском интерфейсе)
Переделали слегка документацию
Сделали мелкие улучшения
И готовимся к большому релизу
23. Техподдержка 17.05.23 12:40
Выпустили новую версию 2.0.1.5, в которой поддерживается отслеживание изменений по связанным с набором данных объектам (справочники, регистры, документы
Описание есть в Инструкции
Оставьте свое сообщение
Вакансии
Аналитик-консультант 1C:ERP
Москва
зарплата от 200 000 руб. до 230 000 руб.
Полный день

Консультант 1С
Москва
зарплата от 80 000 руб. до 150 000 руб.
Полный день

Программист 1С (ERP, УХ, КА 2, УТ 11), удаленно
Москва
зарплата от 160 000 руб.
Полный день

Аналитик 1С
Москва
зарплата от 200 000 руб.
Полный день

Консультант 1С / Специалист поддержки 1C
Екатеринбург
зарплата от 70 000 руб.
Полный день