第8页
第4排
我有一个自定义转换器,它将API调用结果缓存到PostgreSQL表中。它在密钥上尝试一个databasejoiner,如果找到匹配的记录,它将连接的特性直接传递到主输出端口。否则,它调用API,将结果传递给SQLExecutor以插入它,以便在传递给Transformer的后续功能的相同键值上进行联接。
不幸的是,在同一个工作区执行期间,DatabaseJoiner找不到SQLExecutor为后续功能存储的记录。我在sqleexecutor中尝试了显式提交(使用适当的分隔符声明),并在sqleexecutor之后尝试了5秒的每功能减速器,以防在fme工作台和postgresql之间存在某种竞争条件。没有运气。我仍然会遇到重复的键冲突,因为databasejoiner的失败会导致同一个键被发送到API,并通过sqlexecutor再次尝试存储。我甚至尝试将sqlexecutor移动到另一个工作区(通过workspaceRunner调用)。但错误依然存在。
此工作区中没有并行性,似乎每次调用sqleexecutor时都提交了插入。所以我感觉不到会导致这种行为的种族条件。希望有人能给我点启发。
您好!@克威尔,请我想,当一个具有条件的特性被首先输入时,databasejoiner会获取和缓存匹配的记录作为条件的测试结果。并尝试在进入具有相同条件的第二个或更高版本功能时从缓存中查找匹配的记录。如果没有与具有条件的第一个功能匹配的记录,则条件的缓存将为空,因此,具有相同条件的第二个功能将与任何记录都不匹配,即使在处理第一个功能之后将匹配的记录插入到数据库中。
如果我以上的猜测是正确的,对于您来说,databasejoiner可能不是一个好的选择。
一种可能的解决方法是:使用sqlExecutor执行一个SQL语句,该语句返回每个功能匹配的记录数,然后使用测试仪测试数字是否为0。SQL语句如下所示。
从我的表格中选择count(*)作为匹配记录的编号,其中key=@value(\u key)
?2019安全亚搏在线软件公司|法律