Talend避免与Salesforce输出重复的外部ID

Talend避免与Salesforce输出重复的外部ID,salesforce,talend,Salesforce,Talend,我们正在通过Talend导入Salesforce的数据,我们有多个具有相同内部id的项目 由于upsert在Salesforce中的工作方式,此类导入失败并出现错误“指定了重复的外部id”。目前,我们通过将TsaleForceOutput的提交大小设置为1来解决这个问题,但这只适用于少量数据,否则会耗尽Salesforce API的限制 Talend中是否有已知的方法?例如,为了确保具有相同外部ID的项目在TsaleForceOutput的不同“提交”中结束?您的意思是您在输入中有相同的记录(例

我们正在通过Talend导入Salesforce的数据,我们有多个具有相同内部id的项目

由于upsert在Salesforce中的工作方式,此类导入失败并出现错误“指定了重复的外部id”。目前,我们通过将TsaleForceOutput的提交大小设置为1来解决这个问题,但这只适用于少量数据,否则会耗尽Salesforce API的限制


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,循环自动完成。

以下是最终结果:

您还可以决定使用其他全局变量来设置