SymmetricDS: преобразовать столбец в EXTERNAL_ID

У меня есть сценарий, в котором я синхронизирую таблицу PLU со всеми магазинами (HQ -> Store). Но мой столбец стоимости и цены будет учитываться конкретно для каждого магазина на основе значения в справочной таблице. Таким образом, один и тот же PLU может иметь разную стоимость и цену для каждого магазина. Я пытаюсь преобразовать столбец поиска, но это не сработало для EXTERNAL_ID. Как я могу заставить этот сценарий работать?

Eg.

Исходная таблица (HQ): PLU

Исходный столбец: plucode, имя, стоимость, цена


Справочная таблица (HQ): PLUPrice

Исходный столбец: storecode, plucode, стоимость, цена.


Целевая таблица (МАГАЗИН): PLU

Целевой столбец: код продукта, имя, стоимость, цена.

insert into SYM_TRANSFORM_COLUMN (transform_id, include_on, target_column_name, source_column_name, pk, transform_type, transform_expression, transform_order, last_update_time, last_update_by, create_time) values (
    'plu', '*', 'cost', 'cost', 0,
    'lookup', 'SELECT cost FROM PLUPrice WHERE PLUCODE = :PLUCODE AND STORECODE = :EXTERNAL_ID', 1, current_timestamp, 'Administrator', current_timestamp);

person CSL    schedule 14.04.2017    source источник


Ответы (1)


Сделайте маршрутизацию по справочной таблице. Если один из столбцов содержит externalId, сделайте маршрутизацию на основе столбца, в противном случае выберите маршрутизацию.

person Boris Pavlović    schedule 14.04.2017
comment
До этого я синхронизировал две таблицы отдельно в одну, исключив стоимость и цену из исходной таблицы и взяв стоимость и цену из справочной таблицы. Это нормально, но есть одна проблема во время перезагрузки: иногда, если справочная таблица отсутствует, данные не синхронизируются. Поэтому я думал синхронизировать только одну таблицу в вопросе, но безуспешно. Я тоже пытаюсь использовать концепцию виртуального столбца, но безуспешно. Любая идея, если это работа? - person CSL; 17.04.2017
comment
Синхронизируйте две таблицы с другими именами на целевом узле, используя преобразование для их переименования. Затем на целевом узле создайте запланированную задачу в своем приложении, которая будет периодически проверять, синхронизированы ли обе таблицы, и копировать данные в единую таблицу, используемую приложением. - person Boris Pavlović; 17.04.2017
comment
Ваше предложение в порядке, но мы не хотим создавать дополнительную таблицу для этого. Это потому, что у меня нет возможности получить EXTERNAL_ID в операторе select? - person CSL; 17.04.2017
comment
Для маршрутизации требуется external_id. В противном случае синхронизация будет трансляцией. - person Boris Pavlović; 17.04.2017
comment
Но это не про маршрутизацию. Маршрутизация предназначена для маршрутизации всех данных (PLU) от источника к цели. Дело в том, что я хочу проверить справочную таблицу (PLUPrice), чтобы обновить таблицу. Если не external_id, могу ли я получить идентификатор целевого узла в операторе select? - person CSL; 17.04.2017
comment
Существует два способа маршрутизации данных. На все узлы (трансляция) или определенные данные на определенные целевые узлы. речь идет о маршрутизации - person Boris Pavlović; 17.04.2017
comment
Что делать, если я хочу принудительно запустить обе таблицы, если я изменяю либо ссылочную, либо исходную таблицу? Так что моя цель получит точные данные. - person CSL; 18.04.2017