Готовое решение для автоматизированной выгрузки данных из 1С 8.3 в базу данных ClickHouse для работы с данными 1С в Yandex Datalens, Apache Superset (и не только) - "Экстрактор данных 1С в BI".
Решение отлично работает со всеми типовыми (и не только) конфигурациями 1С 8.3 для управляемых форм.
Gозволяет автоматизировать работу бизнес-аналитика по ежедневной выгрузке данных из 1С в БД ClickHouse для последующей работы с этой БД в Yandex Datalens/
Система полностью автоматизирует работу с хранилищем данных в БД Clickhouse. Не надо быть программистом, чтобы одной кнопкой получать любые данные из 1С в Yandex Datalens
Пользуюсь решением в настоящее время. У нас как раз работает вариант с инкрементной выгрузкой. Продукт позволил значительно сократить время реализации проекта. Проект пока не сдан, но все основные механизмы уже интегрированы в базу заказчика, в настоящее время проходят тестирование.
Техподдержка работает на хорошем уровне.
Уже сейчас могу смело рекомендовать продукт к покупке и внедрению.
Пока не поддерживается (Еще не было запросов)
Если Ваша конфигурация в принципе допускает запуск в управляемых формах, то наше Расширение будет доступно и будет работать и так
(некоторые так пользуются)
Если напишете какой релиз конфигурации и платформу 1С используете, посмотрим что можно сделать
А выгрузка всегда полная или поддерживается инкремент?
В таблицу - приемник делается сейчас полная выгрузка (в 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 = "Таблица_ВСЯ"
те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?
Ну это первый вариант, который на поверхности
Другой вариант - в Наборах данных Экстрактора 1С привязываться к дате закрытия периода или еще к какому то реквизиты для секционирования данных
Изначально мы думали над автоматическим секционированием таблиц-приемников по годам/месяцам, но любовь 1С-пользователей к правкам "задним периодом" все эти схемы ломает на раз-два.
К примеру, вот 10 января - это уже новый год. А правки пользователи будут вносить еще половину всего прошлого года. Одно дело, если база небольшая, можно перегружать текущий и прошлый год, а если в базе сотни тысяч документов, то такой подход уже не подходит.
В общем пока вся история с автосекционированием - это, как мне кажется, индивидуально подбираемое решение для каждого конкретного Заказчика
Если у Вас есть какая-то идея по автоматическому сдвигу "окна", то давайте обсудим и если это будет достаточно универсально, то мы включим это в один из ближайших релизов
(4) те получается, что текущий период(текущий год) все равно придётся перегружать полностью и далее руками сдвигать «окно»(на следующий год)?
Теперь все сделано намного более удобно:
1. Выгрузка идет по партициям (причем партиции вы определяете сами при описании таблицы-приемника)
2. Выгрузка идет в указанное вами количество потоков (т.е. выгрузка распараллеливается, что очень сильно ускоряет выгрузку данных)
3. Есть предобработка и постобработка при выгрузке данных, что позволяет встраивает свои обработчики
4. Решение может внедряться в вашу 1С как "расширение" или через объединение конфигураций (для тех 1С, у кого старые релизы 1С (например 8.3.11 и ранее) или для тех у кого "кастомные" конфигурации)
(6) Универсального решения нет, но если работаем с более менее большими данными, то эффективность более приоритетна чем универсальность.
Если мы берем за аксиому, что данное решение для небольших(база не более 300-500гб) инсталляций 1С(так как на больших системах все сильно сложнее)
Задачи которые необходимо решить
1) Обеспечить консистентность данных с приемлемой задержкой(так как реалтайм для аналитике в целом не нужен).
2) Минизировать "пропадание" данных при обновлении данных(Clickhouse это не реляционная база и update в классическом смысле там нет).
Как я понимаю сейчас в момент выгрузки данные в таблице стираются и записываются заново(возможно я не прав)?
3) Минимизировать нагрузку при синхронизации, так как чем больше данных тем больше требуется напрягать базу данных для получения этих данных и сервер приложений для конвертации(json или tsv(csv) самые простые для 1С) перед выгрузкой/
Варианты решения.
Вариант с планом обмена(или его аналогами) Есть таблицы с функциональностью которая позволяет удалять дубликаты по сочетанию измерений ReplacingMergeTree
ReplacingMergeTree Те в данную таблицу можно получая изменения из плана обмена отправлять актуальные данный и ch сам удалит дубликаты и оставит только одну последнюю запись(есть нюансы, но для небольших данных(10ки миллионов строк) пойдет)
Другой вариант Предполагаем что в таблице есть Период(или любое другое поле с Датой), так как вопрос выгрузки Справочников это отдельная тема Предположим что мы не знаем, что именно пользователи поменяли, но можем понять что в данном документе произошло изменение(стандартная логика регистрации в плане обмена)
В таком случае мы можем создать таблицу которая будет партиционирована, например по дням. Далее получаем из плана обмена записи, по ним определяем день в котором данные были изменены, удаляем партицию с этим днем в ch(удаление партиции равно по ресурсам удалению одного файла, те очень быстрое и дешевое) и записываем полностью этот день заново.
Если мы хотим чтобы никто не заметил что произошло обновление данных, то мы создаем таблицу аналогичной структуры записываем в нее данные и потом "подменяем" партиции в таблицах(операция атомарная поэтому никто не заметит пропажи).
Как я понимаю сейчас в момент выгрузки данные в таблице стираются и записываются заново(возможно я не прав)
Да, сейчас именно так
Минимизировать нагрузку при синхронизации, так как чем больше данных тем больше требуется напрягать базу данных для получения этих данных и сервер приложений для конвертации(json или tsv(csv) самые простые для 1С) перед выгрузкой
Да, есть два варианта выгрузки:
1. insert.... values (...), (...)
2.через файл - вариант более быстрый и предпочтительный (используется по умолчанию)
С вами где-то согласен.
Но построение выгрузки на Плане обмена или регистрации дней/месяцев, когда данные были изменены - это уже кастомное решение под Заказчика, так как зависит от бизнес-задачи и конкретной конфигурации.
Мы не знаем, на какой раздел учета обратит внимание аналитик и пожелает выгружать:
- хоз.операции в бухучете,
- Регистры продаж
- или регистры расчета в ЗУП (вариантов масса)
Поэтому ваши, безусловно верные, методы регистрации изменений и доставки изменений в ClickHouse к сожалению не универсальны, в том числе, если рассматривать 1С в файловом (а не клиент-серверном) варианте (ведь такие пользователи тоже есть, не у всех есть "большие" данные)
Также, предполагаю, что в ваших вариантах, для некоторых конфигураций и платформ 1С придется встраиваться в саму конфигурацию клиента, а не оставаться в рамках "расширения" (тут наверное больше скажут наши программисты, нежели я)
На мой взгляд, если объемы данных велики и нужен "реалтайм", то лучше уже тогда идти по пути "прямого" доступа к БД 1С (через View), нежели используя механизм регистрации изменений и выгрузок средствами 1С платформы
В целом, спасибо за конструктивное замечание. Продукту есть куда развиваться.
Ну и это уже вопрос "кастомного" индивидуального решения под вас (готовы обсуждать)
(8) Мы эти вопросы уже решили, иначе я не смог бы не написал то что написал )
В вашем решении не хватает инкремента, так как в текущей реализации есть только прикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.
1) Полная перегрузка данных, те аналитики должны подстраиваться под технологическое окно обновления так как пока 1С выгружает данные, в DL данных нет, либо они есть, но неполные данные хуже полного отсутствия.
2) Нагрузка при выгрузке, это важный момент, так как выгружается все таки ощутимый объем данных.
3) Решение с перегрузкой текущего периода уменьшает нагрузку, но не решает 1 пункта и оно требует компетенции которой обладают далеко не все.
Но концептуально я придираюсь )
Хорошее решение для небольших организаций(1с у них и так есть, а ch в облаке стоит несколько тысяч рублей в месяц) которое позволит им выйти за пределы отчетов которые дает 1С и с минимальными усилиями воспользоваться современными low code инструментами аналитики.
рикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.
Не совсем так:
В нашем решении есть:
1.создание наборов данных (запрос или объект [в ближайшее время опишу уже выпущенный релиз])
2. автосоздание, модификация таблиц в ClickHouse с маппингом полей по Набору данных (ведь это же боль - генерировать руками таблицы-приемники)
3. добавление вычисляемых полей, параметров, отборов для удобства с повторным использованием одного Набора данных в разных выгрузках
4. создание и модификация регламентного задания по перезаполнению таблиц в ClickHouse
5. Плюс ко всему - наше решение еще и универсально по отношению к большинству конфигураций 1С, присутствующих на рынке
Спасибо вам за идею, по поводу работы с партишенами на уровне дня в базе Clickhouse. Думаю, это можно обыграть (взяли на обдумывание)
Что касается, что у нас хорошее решение для "небольших организаций" - немного нет так :)
У нас отличное решение для относительно небольших баз данных, к коим можно отнести огромное количество заводов, оптовых компаний, ритейла среднего размера, предприятий питания или сферы услуг. Т.е. сама организация может быть весьма крупной, просто в ее 1С нет сотен миллионов транзакций (это свойственно больше крупному ритейлу).
А для мега крупного ритейла из нашего решения можно сделать кастомный вариант, который будет очень быстро и красиво работать
Самое главное - наше решение (вы правы) - это возможность, используя данные 1С, перейти на работу с современным BI (Yandex Datalens)
В вашем решении не хватает инкремента, так как в текущей реализации есть только прикольный конструктор мапинга полей и в целом на этом все красивое заканчивается и начинаются минусы которые не позволяют использовать полноценно решение в проектах.
Спасибо большое за комментарии.
Обдумали возможные пути решения.
Думаю, до конца года сможем реализовать достаточно универсальную схему по регистрации изменений до уровня "Месяц/день", а значит и реализовать инкрементальную загрузку "Наборов данных" в Clickhouse.
Вы натолкнули нас на достаточно элегантное решение :)
Текущие изменения:
1. поработали над интерфейсом (теперь он удобнее и проще)
2. добавили логирование
3. исправили пару досадных недочетов
4. выполнили несколько проектов и окончательно убедились, что проект востребован и нужен, а также весьма и весьма удобен для работы с выгрузкой из 1С в Clickhouse
в запросах можно использовать временные таблицы ?
Можно передавать параметром Текущую дату ? (чтобы в запросе была возможность выгружать определенный период от сегодняшней даты)
в запросах можно использовать временные таблицы ?
Можно передавать параметром Текущую дату ? (чтобы в запросе была возможность выгружать определенный период от сегодняшней даты)
1. В Запросах можно использовать и временные таблицы. (штатный же функционал)
2. Параметром Текущую дату пока передать нельзя (для этого пока клиенты используют сейчас "Отборы"), записано в план доработки на этот квартал. Но, если надо быстрее, то данную функциональность поставим в план на ближайший релиз, если выкупите лицензию
Теперь можно, реализовали и работу с параметрами, ну а в параметрах есть стандартный набор выбора дат, в точ числе и текущая дата и начало месяца и т.д.
Вышел предрелиз нашего расширения по выгрузке данных из 1С 8.3 в БД Clickhouse с отслеживанием изменений.
Новая версия предназначена для обработки больших (реально больших) объемов данных
Новинки:
1. Выгрузка теперь для каждого "проекта" настраивается в несколько потоков, что позволяет значительно ускорить выгрузку больших данных (данные разбиваются на партиции, каждая партиция становится в очередь потоков)
2. Таблица-приемник теперь не очищается, а поток данных из Источника разбивается на партиции и каждая партиция перезаписыывается в приемнике отдельно
3. для ускорения работы, есть опциональная настройка отключения по выбранным полям выгрузки "экранирования" недопустимых символов (табуляция, одинарная кавычка, перевод каретки и т.д.). позволяет увеличить скорость выгрузки в разы
Пользуюсь решением в настоящее время. У нас как раз работает вариант с инкрементной выгрузкой. Продукт позволил значительно сократить время реализации проекта. Проект пока не сдан, но все основные механизмы уже интегрированы в базу заказчика, в настоящее время проходят тестирование.
Техподдержка работает на хорошем уровне.
Уже сейчас могу смело рекомендовать продукт к покупке и внедрению.
Update от 15/03/2023 (версия 1.3.2)
Изменения:
1. Поддержка Nullable полей при создании/модификации таблицы в clickhouse
2. Описание значений в Order By, Partition в таблицах clickhouse доступно и из списка возможных значений
3. Тестовая функциональность по таймаутам при выгрузке в БД clickhouse
4. увеличена разрядность поля "Максимальное количество потоков"
5. поправлен баг в создании Групп в списке Наборов данных
6. Возможность использовать в "Параметрах" Список значений (для конструкций запросов в отбрах и т.д.: "В (&СписокЧеголибо)")
7. Мелкие правки по интерфейсу
8. Также в документации дописаны некоторые кейсы по работе с многопоточностью
Переписали встроенную в Расширение роль "Экс_ПолныеПрава", с тем, чтобы можно было поддерживать и старые платформы 1С (типа 8.3.13)
Добавили в настройку создания "Регламентного задания" Пользователя, под которым данное задание будет запускаться (так как пользователю даже с "Полными" правами надо явно выдавать роль "Экс_ПолныеПрава")
Переделали систему лицензирования немного (ключ лицензии теперь вводится в пользовательском интерфейсе)
Переделали слегка документацию
Сделали мелкие улучшения
И готовимся к большому релизу
Выпустили новую версию 2.0.1.5, в которой поддерживается отслеживание изменений по связанным с набором данных объектам (справочники, регистры, документы
Описание есть в Инструкции