Повторяющийся первичный ключ при генерации данных с помощью Talend - PullRequest
0 голосов
/ 06 мая 2020

Я создаю задание в Talend, где мне нужно сгенерировать файлы, содержащие данные, созданные с помощью tRowGenerator, вместе с другими источниками: SQL База данных сервера и файлы с разделителями.

enter image description here

Проблема в том, что у меня дублировались файлы с одним и тем же первичным ключом. Все, что я хочу получить, это 100 записей (420 строк): для каждого сгенерированного случайного UUID я получу 42 строки и так далее, но вместо этого я получаю одну и ту же строку 10 раз (она дублируется 10 раз)

enter image description here

Я получаю данные из 3 источников, как показано ниже: enter image description here

Чтобы получить эти поля в моем выходном файле : enter image description here enter image description here

1 Ответ

0 голосов
/ 06 мая 2020

Если я правильно понимаю, вы используете одну из функций в tRowGenerator для получения случайных данных.
Проблема в том, что функции генерации данных, доступные из Talend, на самом деле не случайны, они получают свои значения из предопределенный список значений. Вы можете посмотреть исходный код, чтобы убедиться, что они имеют сто или около того значений, поэтому вы обязательно получите дубликаты.
Чтобы получить уникальные значения, создайте подпрограмму Talend с помощью простого метода, который генерирует UUID:

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();
    }
}

Затем вы можете получить доступ к этой функции из tRowGenerator: enter image description here

enter image description here

Еще одна вещь , Я не уверен, что именно является вашим требованием, но поскольку у вас нет ключа соединения между вашими входами, вы получаете декартово соединение между всеми вашими входами (42x298x206 строк). Поэтому вы можете определить условие соединения.
Если вы действительно определяете условие соединения, убедитесь, что входы tMap находятся в правильном порядке (вы используете поток tRowGenerator в качестве основного соединения, а другие - как поиск).

...