我一直在尝试与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_ID
和store_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_ID
和store_id=''$(externalId)''
?如果我的节点被调用server
而不是corp
和client
而不是store
,我怎么能改变呢?
更新2
根据{{3}},我的路由器没问题,我的sym_trigger_router
配置存在问题,即store_id=''$(externalId)''
答案 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在启动期间初始化的变量之一,在用户指南的某处有一个这样的变量列表。