Project

General

Profile

Импорт из внешней БД

Компонент - задача планировщика, предназначен для автоматической односторонней синхронизацией элементов из внешней SQL БД в МБД.
Получает данные мз внешней БД через написанный вручную запрос SQL.
При каждом выполнении проверяет, существует ли парный элемент в МБД и не изменились ли его поля.
Если в МБД элемента нет - он создается, если поля изменились - они обновляются. Если в исходной БД элемент удалили - он удаляется и в МБД.

Также, задача может быть использована для однократного импорта содержимого в МБД при миграции или обновлении комплекса.

Синхронизация построена на хранении в элементе МБД дополнительных пользовательских свойств

  • ext_db_id - идентификатор внешней БД, полученный через поле db_id
  • ext_db_modify - контрольная сумма значений полей внешней БД, сохраненная в МБД

Настройки

  • ODBC источник - указывается строка подключения в формате ODBC.
    • Если подключение происходит через заранее сформированный ODBC-источник, то то он задается в виде
      DSN=<название истоника>
    • Имя пользователя, UID
    • пароль PWD
    • пример строки
      DSN=TEST_DSN;UID=sa;PWD=password;
    • при Windows Auth строка подключения выглядит так:
      DSN=TEST_DSN;Trusted_Connection=yes;
    • Внимание: Digispot2 использует 32-bit ODBC, для его настройки необходимо на 64 битной Windows использовать C:\Windows\SysWOW64\odbcad32.exe, находящийся в каталоге C:\Windows\SysWOW64.
  • Файл SQL запроса - Файл, в котором лежит SQL-запрос для получения элементов из внешней БД
  • Категория мбд в которую производить импорт - Название категории в которую будут импортированы элементы из внешней бд.
    Это обязательное поле, если его не указать - импорт не будет выполнен.
    Все категории импортируемого материала будут создаваться внутри этой категории. Если такой категории и нет в МБД, она будет создана. Имя категории будет одинаково для всех типов материала.

Алгоритм работы.

При выполнении задачи на внешней БД выполняется запрос, результатом которого является набор полей с предопределенными названиями (см. таблицу ниже). Каждому названию соответствует одно из полей элемента МБД.
По результатам запроса выполняется обновление, добавление или удаление элементов МБД. Все импортируемые элементы хранятся внутри категории, которая задается в настройках задачи.

В каждом импортируемом элементе запоминается его идентификатор во внешней БД (в качестве пользовательского свойства). При повторном выполнении задачи соответствие между элементами МБД и внешней базы устанавливается по этому идентификатору.

Удаление элементов из МБД. При каждом выполнении задачи элементы, которые находятся в категории в которую осуществляется импорт, или ее подкатегории, и были импортированы данной задачей, но не имеет связанного с ним элемента во внешней БД удаляются.

В текущей реализации при выполнении задачи файлы элементов в хранилище не копируются.

Импорт из баз данных с десятками тысяч записей

Для импорта из баз данных с десятками тысяч записей, запрос нужно разбить на 2 части. При этом запрос в итоге будет выполняться в цикле несколько раз, и будет выбирать данные для импорта порциями последовательно.
1 часть - это запрос, который выводит количество порций для импорта:

[parts]
select CAST(max(t_rotation.num_rotation + 999)/ 1000 as signed) as parts from t_rotation

Такой запрос маркируется атрибутом [parts].

2 часть - это тело запроса, осуществляющего импорт данных:

[select]
select
t_rotation.num_rotation as db_id,
t_rotation.Name as attrib_Artists,
t_rotation.Title as title,

from t_rotation
left outer join t_type on t_type.num_type=t_rotation.num_type
where t_rotation.num_rotation >= ([@part] * 1000) AND t_rotation.num_rotation < (([@part] * 1000)+1000)
order by t_type.name

Такой запрос маркируется атрибутом [select].
При выполнении запроса, в качестве [@part] будет передаваться вычисленное значения скрипта с атрибутом [parts].

Список полей SQL запроса

Название поля Тип Описание
db_id int Идентификатор элемента во внешней БД. Это поле обязательно присутствовать в наборе полей запроса.
Оно сохраняется в созданном элементе в пользовательском свойстве с названием ext_db_id
type int Тип элемента (1-реклама 2-джингл 3-музыка 4-передача 5-новости). Обязательное поле (так же можно вместо type можно использовать type_str (типа string))
title str Название элемента
comment str Комментарий
category str Категория. Категория элемента. Является подкатегорией относительно категории в которую осуществляется импорт. Обязательное поле иначе будет создана пустая категория
artist str Исполнитель
author str Автор
album str Альбом
file_full_name str Полный путь к файлу
start_ms int Метка Start в миллисекундах (от начала файла)
stop_ms int Метка Stop в миллисекундах (от конца файла)
duration_ms int Метка Stop в миллисекундах (от метки Start)

plan_duration_ms

int

Планируемая длительность, ms. Игнорируется, если указан и успешно считан файл. Игнорируется, если указано поле duration_ms

start_this_ms int Метка StartThis в миллисекундах (от метки Start)
start_next_ms int Метка StartNext в миллисекундах (от метки Stop)
fade_in_ms int Метка FadeIn в миллисекундах (от метки Start)
fade_out_ms int Метка FadeOut в миллисекундах (от метки Stop)
intro1_ms int Метка Intro1 в миллисекундах (от метки Start)
intro2_ms int Метка Intro2 в миллисекундах (от метки Start)
intro3_ms int Метка Intro3 в миллисекундах (от метки Start)
outro_ms int Метка Outro в миллисекундах (от метки Stop)
publisher str Pudlisher
media str Носитель
rds str RDS
track_num int Трек
id_number str ID_NUMBER строчный идентификатор элемента
year_num int Год
attrib_* str Значение пользовательского атрибута. Названием атрибута является имя поля после префикса attrib_. Значение поля, значение атрибута. Значение атрибута будет добавлено в БД только если сам атрибут существует для данного типа. При использовании символа "_" в названии атрибута (например attrib_single_name), он при создании атрибута в базе будет заменен на пробел (например single name)
modify_str_* any Все значения полей с таким префиксом сохраняются в элемент МБД в качестве пользовательского свойства и используются для определения был ли элемент изменен с прошлого выполнения задачи. Элемент мбд обновляется только в случае, если значение хотя бы одного из полей изменилось с прошлого раза.

Примеры

Пример скрипта для импорта из внешней БД на MS-Access jazler.sql

Add picture from clipboard (Maximum size: 742 MB)