1

我将 SymmetricDS 与许多商店节点和一个公司节点一起使用。

我必须在 store 节点中的表与 corp 节点中的表之间进行转换同步,并使用 sym_transform_table 和 sym_transform_column 成功配置它们之间的转换。现在源表的所有行都被转换或复制到 corp 节点中的目标表。我想阻止或过滤源表中的某些行移动到目标表。任何想法来实现这一点。

实际场景:必须将商店中具有特定年龄的客户(客户表中的行子集)复制转换为 corp 节点中具有不同列名的 master_customer 表。

4

2 回答 2

2

路由器用于过滤数据。default使用lookupsubselect或路由器代替BSH路由器。

Lookup将是最快的,但需要在您的数据库中创建一个单独的查找表来参考哪些年龄可以发送,哪些不能。

BSH将需要更长的时间,但可以处理像if (age < 65 && age >= 18).

Subselect路由器将花费最长的时间,因为每次需要路由记录时它都必须查询数据库。此查询可以从数据库中选择一个值进行比较,或者只是您可以放入 BSH 路由器表达式中的相同类型的逻辑。

如果您的过滤取决于转换后的值,请确保转换发生在源节点而不是目标节点 (TRANSFORM_POINT='EXTRACT')。如果要在转换之前进行过滤,请确保转换发生在目标处 (TRANSFORM_POINT='LOAD')。如果没关系,您可能希望转换发生在 EXTRACT 以从服务器卸载处理工作。

于 2014-03-07T16:23:17.310 回答
1

看看负载过滤器

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);
于 2015-08-10T06:07:08.343 回答