SymmetricDS как фильтровать строки во время преобразования

Я использую SymmetricDS со многими узлами магазина и узлом corp.

Я должен выполнить синхронизацию преобразования между таблицей в узле хранилища и таблицей в узле corp и успешно настроил преобразование между ними, используя sym_transform_table и sym_transform_column . Теперь все строки исходной таблицы преобразуются или копируются в целевую таблицу в узле corp. Я хочу предотвратить или отфильтровать некоторые строки из исходной таблицы в целевой таблице. Любая идея, чтобы достичь этого.

Практический сценарий: клиент с определенным возрастом (подмножеством строк в таблице клиентов) в магазине должен быть преобразован в таблицу master_customer в узле corp с разными именами столбцов.

2 ответа

Решение

Маршрутизаторы используются для фильтрации данных. Вместо default маршрутизатор использует lookup, subselect, или же BSH маршрутизатор.

Lookup будет самым быстрым, но требует создания отдельной таблицы поиска в вашей базе данных, чтобы указать, какие возрасты могут быть отправлены, а какие нет.

BSH займет немного больше времени, но может обрабатывать логику, как if (age < 65 && age >= 18),

Subselect Маршрутизатор займет больше всего времени, так как он будет запрашивать БД каждый раз, когда запись должна быть маршрутизирована. Этот запрос может выбрать значение из БД для сравнения или просто для логики того же типа, который вы могли бы вставить в выражение маршрутизатора BSH.

Если ваша фильтрация зависит от значения после преобразования, убедитесь, что преобразование происходит в исходном узле, а не в цели (TRANSFORM_POINT='EXTRACT'). Если вы хотите выполнить фильтрацию перед преобразованием, убедитесь, что преобразование выполняется в цели (TRANSFORM_POINT='LOAD'). Если это не имеет значения, вы, вероятно, захотите, чтобы преобразования происходили в EXTRACT, чтобы снять нагрузку с сервера.

Посмотрите на загрузочные фильтры.

insert into sym_load_filter
    (LOAD_FILTER_ID, LOAD_FILTER_TYPE, SOURCE_NODE_GROUP_ID,
    TARGET_NODE_GROUP_ID, TARGET_CATALOG_NAME, TARGET_SCHEMA_NAME,
    TARGET_TABLE_NAME, FILTER_ON_UPDATE, FILTER_ON_INSERT, FILTER_ON_DELETE,
    BEFORE_WRITE_SCRIPT, AFTER_WRITE_SCRIPT, BATCH_COMPLETE_SCRIPT,
    BATCH_COMMIT_SCRIPT, BATCH_ROLLBACK_SCRIPT, HANDLE_ERROR_SCRIPT,
    CREATE_TIME, LAST_UPDATE_BY, LAST_UPDATE_TIME, LOAD_FILTER_ORDER,
    FAIL_ON_ERROR) values
    ('SampleFilter','BSH','Client','Server',NULL,NULL,
    'ITEM_SELLING_PRICE',1,1,1,'
    if (OLD_COST > COST) {
            // row will not be loaded
            return false
    }
            // row will be loaded
            return true
    }
    ',
    null,null,null,null,null,
    sysdate,'Documentaion',sysdate,1,1);
Другие вопросы по тегам