与SymmetricDS条件同步

时间:2015-09-02 10:35:56

标签: java symmetricds

我一直在尝试与SymmetricDS进行条件同步。问题是,无论我做什么,它都会忽略应该有条件地同步的表,只是无条件地同步表。

所以我想,我使用那些错误的条件。我在当前版本的用户指南中找不到这些材料,所以我有以下内容:

insert into sym_router 
(router_id,source_node_group_id,target_node_group_id,router_type,router_expression,create_time,last_update_time)
values('corp_2_one_store', 'corp', 'store', 'column','STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_ID',current_timestamp, current_timestamp);

insert into sym_trigger_router 
(trigger_id,router_id,initial_load_order,initial_load_select,last_update_time,create_time)
values('item_selling_price','corp_2_one_store',100,'store_id=''$(externalId)''',current_timestamp,current_timestamp);

来自SymmetricDS打包的样本,但我在自己的配置中将“store”改为“client”和“corp”改为“server”,它不再起作用了。坦率地说,我不知道STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_IDstore_id=''$(externalId)''会发生什么,以及为什么会有两个。

来自我早期版本的网站:

insert into SYM_TRIGGER 
  (source_table_name, source_node_group_id, target_node_group_id, channel_id, 
   sync_on_insert, sync_on_update, sync_on_delete,
   node_select, 
   initial_load_order, last_updated_by, last_updated_time, create_time)
values
  ('sale_transaction', 'corp', 'store', 'sale_transaction', 
   1, 1, 1, 
   'and external_id = $(curTriggerValue).store', 
   105, 'demo', current_timestamp, current_timestamp);

但这显然不起作用,因为此信息的一半现在存储在不同的地方,但即使删除不再存在的列(谁知道,也许这些新表只存储相同的信息以便于阅读?)我可以不能让它发挥作用。

有什么建议吗?

更新 当我只运行训练示例时,一切正常。这里真正的问题是:这些意味着什么: STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_IDstore_id=''$(externalId)''?如果我的节点被调用server而不是corpclient而不是store,我怎么能改变呢?

更新2 根据{{​​3}},我的路由器没问题,我的sym_trigger_router配置存在问题,即store_id=''$(externalId)''

1 个答案:

答案 0 :(得分:1)

所以,我发现了我的问题。我的表名中有一个拼写错误,因此没有为它创建触发器。

对于那些以某种方式偶然发现这个问题的人:

1)什么是STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_ID

它写得很清楚here,但是用两个词来说,STORE_ID是列名,OLD_表示列的前一个值:EXTERNAL_ID是SymmetricDS内部变量之一,还有:NODE_ID等等。

此字符串用于确定是否获取当前行,它是路由器的参数。 (如果您决定使用其他类型的路由器,请注意,它还有其他参数,请勤奋!)

2)什么是store_id=''$(externalId)''

这在某些方面here进行了描述,但同样用两个词来描述:默认情况下,在初始加载期间,对称收集表中的所有数据(select * from ...)。此参数是附加到where子句的参数,t可用于引用正在同步的表。 $(externalId)是SymmetricDS在启动期间初始化的变量之一,在用户指南的某处有一个这样的变量列表。