当前位置: 首页 > 知识库问答 >
问题:

用Talend生成数据时重复主键

辛成周
2023-03-14

我在Talend创建了一个作业,其中我必须生成包含用tRowGenerator生成的数据的文件,以及其他源:SQL Server数据库和分隔文件。

问题是我有相同主键的重复文件。我只想获得100条记录(420行):对于每个随机生成的UUID,我将获得42行,以此类推,但相反,我将获得相同的行10次(它重复了10次)

共有1个答案

沈淇
2023-03-14

如果我理解正确的话,您正在使用trowgenerator中的一个函数来获取随机数据。
问题是Talend提供的数据生成函数并不是真正随机的,它们从预定义的值列表中获取值。您可以查看源代码以验证它们是否有100个左右的值,因此您一定会得到重复的值。
要获得唯一的值,请使用一个生成UUID的简单方法创建一个Talend例程:

public class Utils {

    /**
     * getRandom: return a random UUID
     * 
     * 
     * {talendTypes} String
     * 
     * {Category} User Defined
     * 
     * {param} string("world") input: dummy input
     * 
     * {example} getRandom("world") # 01e98b98-05d6-427c-978d-1f86d0ea4712
     */
    public static String getRandom(String input) {
        return java.util.UUID.randomUUID().toString();
    }
}

还有一件事,我不确定您的具体要求是什么,但是由于您的输入之间没有连接键,所以您得到的是所有输入(42x298x206行)之间的笛卡尔连接。因此,您可能需要定义联接条件。
如果确实定义了联接条件,请确保TMAP输入的顺序正确(您使用TrowGenerator流作为主连接,其他流作为查找)。

 类似资料:
  • 问题内容: 我想生成一个5位数字,该数字在数据库内不重复。假设我有一个名为 numbers_mst 的表,其字段名为 my_number 。 我想生成一个数字,使其不重复出现在此my_number字段中。在此允许前面的零。因此,允许使用像00001这样的数字。另一件事是,它应该在00001到99999之间。我该怎么做? 我可以在这里猜测的一件事是,我可能必须创建一个递归函数以将数字检入表并生成。

  • 问题内容: 我想创建一组随机数,在Java中没有重复项。 例如,我有一个数组来存储10,000个从0到9999的随机整数。 这是我到目前为止的内容: 但是上面的代码创建重复项。如何确保随机数不重复? 问题答案: 例如:

  • 如何在1到9之间生成9个随机数,而不重复,一个接一个。它类似于:假设生成的第一个随机数是4,那么下一个随机数必须在[1,9]{4}中。我的第一种方法是将每个随机生成的数字添加到一个集合中,从而避免重复。但在更糟糕的情况下,比如我们已经生成了6个数字,我们必须再生成3个数字,这个过程会有点慢。当范围从[1,9]更改为[1,1000]时,这种方法听起来不正确。有人能提出一个替代方法吗。

  • 我试图在talend中找到一种方法来生成一个字母数字计数器,该计数器以以下方式创建数字:YYXXXXXXXX 哪里 null 我们一年中能容纳的最后一个id将是20zzzzzzzz 这怎么做?

  • 我试图生成一个qrcode,但它有错误 线程1:致命错误:在展开一个可选值时意外地找到nil

  • 如何使随机数发生器不重复数字?我试过这个,但它总是重复给我数字