Некоторое время назад, анализируя запросы в SQLPrifiler, я обнаружил, что очень удобно работать с результатами, если они сохранены в таблицу. Получается, что мы легко можем, выполняя SQL запросы, фильтровать данные как угодно и строить нужную нам аналитику.
Я подумал, почему бы так не сделать для технологического журнала? К тому же я давно хотел освоить скриптовый язык.
Изначально проект начинался на perl, и параллельно я повторял функционал на python. В итоге я понял, что работа с perl гораздо сложнее и есть ряд трудно решаемых проблем, в итоге готовый результат сделан на python.
Скрипт находится на GITHUB: https://github.com/free-archer/read-tj-pl
Содержит подробное описание, как его использовать. Тут я не буду описывать как клонировать репозиторий и устанавливать python (в README.md это есть если нужно). Опишу, как использовать.
Работа со скриптом
После клонирования у вас будут доступны следующие файлы:
parse_orm.py - сам скрипт
start.bat.simple - батник для запуска (его нужно переименовать убрав .simple )
21103114.log - пример лога
full_logcfg.xml - настройки техжурнала, которые были использованы для тестов
Первое, что нужно сделать это перейти в папку проекта и создать виртуальное окружение python, чтобы не засорять модулями систему. Выполните команду:
python -m virtualenv env
Активируйте виртуальное окружение:
.\env\Scripts\activate.bat
После установите необходимы зависимости из файла:
pip install -r .\requirements.txt
Буду установлены следующие пакеты поддержки СУБД:
psycopg2==2.9.3 - поддержка postgress
pymssql==2.2.4 - поддержка MS SQL
SQLAlchemy==1.4.32 - сама ОРМ это обязательно
Лишнее можно убрать, sqlight поддерживается из коробки.
Работа с программой
Параметры запуска и параметры подключения к СУБД вынесены в переменные окружения, чтобы не держать их в коде. Все параметры содержаться в файле start.bat.simple
Переименуйте файл удалив ".simple". Останется "start.bat".
Задайте в файле необходимые параметры, они вполне понятны.
@echo off
REM Путь к файлу с логами технологического журнала 1С
set filename=21103114.log
REM Параметры соединения с базой данных. Для MSSQL и postgres совпадают.
set sql_type=sqlight
REM sql_type может принимать заначения: mssql, postgres, sqlight
set server=localhost
set database=tempdb
set username=sa
set password=pass
set table=table_name
REM Для SQLight достаточно указать только имя или путь к файлу. Файл будет создан в текущей директории запуска.
set db_file=foo2.db
После чего выполните запуск bat-файла.
Пример файла сделан для windows, но его несложно изменить для Linux.
Для просмотра результата SQLight базы удобно использовать бесплатную программу: https://sqlitebrowser.org/
Замеры времени выполнения
Ниже я приведу замеры времени, которы я выполнил на своем компьютере: Core i5-7400 3.00GHz, SSD, 16 Гб.
Был взят полный технологический журнал property=all
размером 1032 Мб (1 Гб)
Количество строк в журнале: 290760
Время выполнения с использованием модуля pyodbc
(сейчас тот скрипт не используется, находится в папке /deprecated/parse.py)
Время выполнения: 0:04:10
Потребление памяти 3,344 Gb
Время выполнения с использованием модуля SqlAlchemy
Вставка происходит в цикле по одному запросу, в качестве драйвера используется pymssql
Время выполнения: 0:09:39 mssql сервер
Время выполнения: 0:09:28 postgres сервер
Время выполнения: 0:41:00 Sqlight
Потребление памяти 3,365 Gb
Кстати в DB Browser for SQLite есть также удобные фильтры наподобие Excel, имя удобно делать выборки. Возможно этот вариант будет проще для ознакомления или для работы с небольшим объемом лога. Единственное время выгрузки значительно дольше.
Напоследок ещё раз ссылка на репозиторий:
https://github.com/free-archer/read-tj-pl
И приложу архив.