Talend避免与Salesforce输出重复的外部ID
我们正在通过Talend导入Salesforce的数据,我们有多个具有相同内部id的项目 由于upsert在Salesforce中的工作方式,此类导入失败并出现错误“指定了重复的外部id”。目前,我们通过将TsaleForceOutput的提交大小设置为1来解决这个问题,但这只适用于少量数据,否则会耗尽Salesforce API的限制Talend避免与Salesforce输出重复的外部ID,salesforce,talend,Salesforce,Talend,我们正在通过Talend导入Salesforce的数据,我们有多个具有相同内部id的项目 由于upsert在Salesforce中的工作方式,此类导入失败并出现错误“指定了重复的外部id”。目前,我们通过将TsaleForceOutput的提交大小设置为1来解决这个问题,但这只适用于少量数据,否则会耗尽Salesforce API的限制 Talend中是否有已知的方法?例如,为了确保具有相同外部ID的项目在TsaleForceOutput的不同“提交”中结束?您的意思是您在输入中有相同的记录(例
Talend中是否有已知的方法?例如,为了确保具有相同外部ID的项目在TsaleForceOutput的不同“提交”中结束?您的意思是您在输入中有相同的记录(例如相同的帐户)两次或两次以上吗?
如果是,您不能尝试消除重复项,只保留需要推送到Salesforce的记录吗?
否则,如果每个记录都有特定的信息(因此,您需要所有的输入记录在Salesforce中有一个完整的记录),请考虑将这些记录合并之前将结果推入Salesforce。 最后,如果你不能做到这一点,将doublons推到一个临时空间中,将记录但doublons推到Salesforce中,并在这个过程中迭代其他过程,直到没有更多的doublons。
个人来说,如果你不能消除doublons,我更喜欢第二种方法,因为它是减少Salesforce API调用的解决方案。
希望这有帮助。
TRF你的意思是你在输入中有两次或两次以上的相同记录(例如同一帐户)?
如果是,你不能尝试消除重复记录并只保留需要推送到Salesforce的记录吗?
否则,如果每个记录都有特定信息(因此你需要所有输入记录才能在Salesforce中有一个完整的记录),考虑合并以前的记录,将结果推入Salesforce。 最后,如果你不能做到这一点,将doublons推到一个临时空间中,将记录但doublons推到Salesforce中,并在这个过程中迭代其他过程,直到没有更多的doublons。
个人来说,如果你不能消除doublons,我更喜欢第二种方法,因为它是减少Salesforce API调用的解决方案。
希望这有帮助。
TRF以下是我希望提出的解决方案的设计:
- tSetGlobalVar用于将变量“finish”初始化为false。
- tLoop以
(布尔)globalMap.get(“finish”)==false作为结束条件启动while循环。
- tFileCopy用于将初始文件(例如A)复制到新文件(B)。
- tFileInputDelimited读取文件B。
- tUniqRow消除了重复项。Uniques记录转到您必须用TsaleForceOutput替换的tLogRow。如果有任何记录转到名为A(与原始文件同名)的tFileOutputDelimited,则复制记录,并取消选中“如果文件已存在则引发错误”选项。
- tUniqRow激活tJava后OnComponent OK,tJava使用以下代码为全局完成设置新值:
if(((整数)全局映射get(“tUniqRow\u 1\u NB\u DUPLICATES”)==0)全局映射put(“finish”,true)代码>
第1行
第2行
第3行
第2行
第4行
第2行
第5行
第3行
在第1次迭代中,5条uniques记录被推送到tLogRow中,3条重复记录被推送到文件A中,由于存在重复记录,“完成”没有更改。
在第二次迭代中,对2条唯一记录和1条重复记录重复操作。
在第三次迭代中,对1个唯一循环重复操作,由于不再有重复,“finish”设置为true,循环自动完成。
以下是最终结果:
您还可以决定使用其他全局变量来设置salesforce提交级别(使用语法
(Integer)globalMap.get(“commitLevel”)
)。默认情况下,此变量将设置为200,如果有任何重复,则在tJava中将设置为1。同时,将“finish”(完成)设置为true(不测试重复的数量),您将有一个提交级别,第一次迭代为200,第二次迭代为1(不需要超过2次迭代)。您将根据潜在重复的数量来决定更好的选择,但您可以注意到,您可以在不改变工作设计的情况下进行选择。
我认为这应该解决你的问题。让我知道 问候,
TRF以下是我希望提出的解决方案的设计:
- tSetGlobalVar用于将变量“finish”初始化为false。
- tLoop以
(布尔)globalMap.get(“finish”)==false作为结束条件启动while循环。
- tFileCopy用于将初始文件(例如A)复制到新文件(B)。
- tFileInputDelimited读取文件B。
- tUniqRow消除了重复项。Uniques记录转到您必须用TsaleForceOutput替换的tLogRow。如果有任何记录转到名为A(与原始文件同名)的tFileOutputDelimited,则复制记录,并取消选中“如果文件已存在则引发错误”选项。
- tUniqRow激活tJava后OnComponent OK,tJava使用以下代码为全局完成设置新值:
if(((整数)全局映射get(“tUniqRow\u 1\u NB\u DUPLICATES”)==0)全局映射put(“finish”,true)代码>
第1行
第2行
第3行
第2行
第4行
第2行
第5行
第3行
在第1次迭代中,5条uniques记录被推送到tLogRow中,3条重复记录被推送到文件A中,由于存在重复记录,“完成”没有更改。
在第二次迭代中,对2条唯一记录和1条重复记录重复操作。
在第三次迭代中,对1个唯一循环重复操作,由于不再有重复,“finish”设置为true,循环自动完成。
以下是最终结果:
您还可以决定使用其他全局变量来设置