#database #automation #foreign-keys #etl #talend
#База данных #автоматизация #внешние ключи #etl #talend
Вопрос:
В моей схеме есть 2 объекта. Я уже сопоставил один, и теперь для второго мне нужно также иметь PK первого объекта в качестве FK во втором объекте при сопоставлении с использованием talend. Они оба находятся в одном задании, но как я могу использовать Pk первого объекта при отображении второго объекта?
введите описание изображения здесь
Это то, что у меня есть на данный момент (row1 — это entity1, у которого есть автоматически сгенерированный ключ внутри tmap)
row2 создает csv из XML-файла, row3 отображает csv-файл, сгенерированный из row2, однако в нем должен быть fk от объекта 1, который находится в row1
Комментарии:
1. Кто-нибудь, пожалуйста, ответьте! Спасибо
2. Я не знаю, это ли то, что вы ищете, но вы можете использовать tSetGlobalVar или tJavaRow, чтобы задать глобальную переменную, которая будет использоваться где угодно. Но меня беспокоит то, что вы можете сохранить там только одно значение, и все будет переопределять одно другое. Что вы имеете в виду, что ключ из row1 one будет использоваться в row2? Если у вас есть несколько файлов, проанализированных в row1, то row1 и row2 должны быть подключены для повторения каждой записи.
3. Под строками я подразумеваю логику в каждой строке, показанную на рисунке выше. Например, вещи в первой строке — row1 и т.д. Я попытался использовать глобальную переменную и установить перед ней входные данные базы данных. Я подумал о том, чтобы получить количество строк в базе данных, а затем увеличить 1 к глобальной переменной, которая могла бы быть Fk в entity2, поскольку entity1 Pk автоматически сохраняется, но число остается 1 для всех строк (не увеличивается)
4. Все строки в задании выше (на рисунке) выполняются вместе, но процесс выполняется автоматически * через средство просмотра файлов). могу ли я использовать глобальную переменную, сеанс или что-нибудь еще? Если да, не могли бы вы, пожалуйста, показать мне, поскольку я пытался, и ничего не получается,,, это моя надежда
![]()
5. Я также попытался подключить оба входных параметра, ограниченных, к одному и тому же tmap, и к 2 dboutput, но проблема в том, что когда мы подключаем оба файла к одному и тому же tmap, они попадают под одно и то же подзадание, и из-за этого, когда я запускаю его, работает только один путь filewatcher, а другой нет
Ответ №1:
В tMap_1 создайте другую строку вывода и запишите автоматически сгенерированные идентификаторы в CSV с помощью компонента tfileOutputDelimeted. В вашем tMap_2 найдите этот CSV-файл с автоматически сгенерированными идентификаторами и запишите в таблицу.
Комментарии:
1. но я использую file watcher для обоих. Итак, когда я связываю файл поиска, все они попадают под одно дополнительное задание, и при запуске talend запускается только один filewatcher
2. Они все равно останутся как разные объекты. Используйте компонент tfileOutputDelimeted для записи сгенерированных идентификаторов из tMap_1. Затем используйте новый компонент tfileInputDelimeted для чтения сгенерированных идентификаторов в вашем tMap_2.
3. Проверьте мою правку. Вот как будет выглядеть дизайн. Путь к файлу и схема должны быть одинаковыми для tfileOutputDelimeted и tfileInputDelimeted
4. но разве tfileinputdelimited не должен быть подключен к filewatcher, чтобы мы искали файл при каждом его добавлении.. тогда я столкнусь с той же проблемой, что и выше, с наблюдателями за файлами в том же подзадании
5. Нет, вам не нужно добавлять средство просмотра файлов. Просто свяжите tWaitForFile_1 с tWaitForFile_2 с помощью subJobok (щелкните правой кнопкой мыши на tWaitForFile_1 -> На SubJobok -> свяжите его с tWaitForFile_2 ). Проделайте то же самое с tWaitForFile_2 до tWaitForFile_3