与 SymmetricDS 的条件同步
Conditional sync with SymmetricDS
我一直在尝试与 SymmetricDS 进行条件同步。问题是,无论我做什么,它都会忽略应该有条件同步的 table,而只是无条件地同步 table。
所以我想,我用错了那些条件。我在当前版本的用户指南中找不到这个 material,所以我有以下内容:
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);
但这显然行不通,因为一半的信息现在存储在不同的地方,但即使删除不再存在的列(谁知道,也许这些新的 tables 只存储相同的信息信息的可读性?)我无法让它工作。
有什么建议吗?
更新
当我 运行 只是训练示例时,一切正常。所以这里真正的问题是:这些是什么意思:
STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_ID
和 store_id=''$(externalId)''
?如果我的节点被称为 server
而不是 corp
和 client
而不是 store
,我该如何更改?
更新 2
根据 this,我的路由器没问题,我的 sym_trigger_router
配置有一些问题,即 store_id=''$(externalId)''
所以,我发现了我的问题。我的 table 名称中有错字,因此没有为其创建触发器。
对于那些偶然发现这个问题的人:
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,但还是用两个词:在初始加载期间,默认情况下对称收集来自 table (select * from ...
) 的所有数据。此参数附加到 where
子句,t
可用于引用正在同步的 table。 $(externalId)
是 SymmetricDS 在启动期间初始化的变量之一,在用户指南的某处有此类变量的列表。
我一直在尝试与 SymmetricDS 进行条件同步。问题是,无论我做什么,它都会忽略应该有条件同步的 table,而只是无条件地同步 table。
所以我想,我用错了那些条件。我在当前版本的用户指南中找不到这个 material,所以我有以下内容:
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);
但这显然行不通,因为一半的信息现在存储在不同的地方,但即使删除不再存在的列(谁知道,也许这些新的 tables 只存储相同的信息信息的可读性?)我无法让它工作。
有什么建议吗?
更新
当我 运行 只是训练示例时,一切正常。所以这里真正的问题是:这些是什么意思:
STORE_ID=:EXTERNAL_ID or OLD_STORE_ID=:EXTERNAL_ID
和 store_id=''$(externalId)''
?如果我的节点被称为 server
而不是 corp
和 client
而不是 store
,我该如何更改?
更新 2
根据 this,我的路由器没问题,我的 sym_trigger_router
配置有一些问题,即 store_id=''$(externalId)''
所以,我发现了我的问题。我的 table 名称中有错字,因此没有为其创建触发器。
对于那些偶然发现这个问题的人:
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,但还是用两个词:在初始加载期间,默认情况下对称收集来自 table (select * from ...
) 的所有数据。此参数附加到 where
子句,t
可用于引用正在同步的 table。 $(externalId)
是 SymmetricDS 在启动期间初始化的变量之一,在用户指南的某处有此类变量的列表。