На собеседованиях по Talend обычно проверяют две вещи: умеете ли вы спроектировать разумный job для интеграции данных и можете ли выяснить, почему он тормозит или сломался. Ждите вопросов о базовых строительных блоках (компоненты, subjob, tMap, контекстные переменные), а затем сценариев об ошибках, производительности и развёртывании.
Сейчас Talend входит в состав Qlik, и линейка продуктов за годы изменилась. Посмотрите описание вакансии, чтобы понять, использует ли команда Talend Studio с лицензией на интеграцию данных или big data, Talend Cloud или более старую open source конфигурацию. Понятия ниже применимы ко всем вариантам, но названия компонентов и детали развёртывания различаются.
Вопросы, которые вы услышите чаще всего
Что такое Talend и как он генерирует код?
Talend — это инструмент интеграции данных. Вы строите job на канве, соединяя компоненты, а Talend Studio генерирует Java-код из этого дизайна. Когда вы запускаете job, этот код компилируется и выполняется. Для собеседования это важно, потому что объясняет, почему можно вставлять собственный Java-код в компонент tJava или tJavaRow, почему routines — это Java-классы и почему настройки памяти — это настройки JVM.
В чём разница между job, subjob и joblet?
Job — это весь рабочий процесс. Subjob — это группа компонентов, соединённых связями потока данных, и job обычно состоит из нескольких subjob, связанных триггерами. Joblet — это переиспользуемая группа компонентов, сохранённая один раз и используемая во многих job, как функция.
В чём разница между OnSubjobOk и OnComponentOk?
Обе — это триггерные связи, которые запускаются после успешного завершения чего-либо. OnSubjobOk срабатывает, когда весь subjob завершается успешно. OnComponentOk срабатывает, как только завершается отдельный компонент, что может произойти в середине subjob. Есть также OnSubjobError и OnComponentError для сбоев, плюс Run if для условных ветвей.
Что делает tMap?
tMap — основной компонент преобразования. Он соединяет основной поток с одним или несколькими lookup-потоками, применяет выражения, фильтрует строки и отправляет данные в несколько выходов. Ключевые возможности, которые стоит упомянуть:
- Inner join и left outer join по lookup
- Reject-выходы для строк, которые не прошли join или фильтр
- Выражения фильтрации на входах и выходах
- Переменные, чтобы вычисление писалось один раз и переиспользовалось
- Варианты lookup-модели: загрузить один раз, перезагружать на каждой строке или перезагружать на каждой строке с ключом
Как обрабатывать большой lookup в tMap?
По умолчанию данные lookup загружаются в память. Для большого lookup включите «Store temp data», чтобы tMap записывал их на диск, увеличьте память JVM или избегайте проблемы, выполняя join в базе данных. Можно также использовать «Reload at each row» для lookup, который зависит от входящей строки, ценой запроса на каждую строку, так что это подходит только для небольших основных потоков.
Что такое контекстные переменные и зачем их использовать?
Контекстные переменные хранят значения, которые меняются между средами: имена хостов, схемы, пути к файлам и учётные данные. Вы определяете их один раз, группируете в контексты (Dev, Test, Prod) и выбираете контекст во время запуска. Хороший ответ добавляет, что пароли не должны храниться в job в открытом виде и что один и тот же экспортированный job должен запускаться в любой среде с изменением только файла контекста.
Как передавать значения между job?
С помощью tRunJob можно передавать контекстные параметры дочернему job, а дочерний job может возвращать значения родительскому через компонент tBufferOutput или глобальные переменные. Внутри одного job значения хранятся в globalMap — Java-карте, которую вы читаете через (String) globalMap.get("key") и записываете через globalMap.put.
В чём разница между tFlowToIterate и обычным потоком?
Обычный поток перемещает все строки через компоненты вместе. tFlowToIterate превращает каждую строку в итерацию, так что следующие компоненты выполняются по одному разу на строку. Это полезно для перебора списка имён файлов или таблиц, но медленно для больших наборов данных, потому что каждая итерация запускает subjob.
Как обрабатывать ошибки в Talend?
Упомяните несколько уровней:
- Триггерные связи, такие как OnSubjobError и OnComponentError, чтобы направлять сбои по отдельному пути
- tDie, чтобы остановить job с кодом ошибки, и tWarn, чтобы записать предупреждение
- tLogCatcher, чтобы собирать предупреждения и ошибки, вызванные tDie, tWarn и Java-исключениями
- Reject-связи на компонентах, таких как tMap и компоненты вывода в базу данных, для плохих строк
- tPreJob и tPostJob, чтобы открывать и всегда освобождать ресурсы
Как отлаживать падающий job?
Запустите его в режиме Debug или добавьте tLogRow, чтобы увидеть данные между компонентами. Проверьте точную ошибку и имя компонента в консоли, затем проверьте настройки подключения и используемые значения контекста. При проблемах с данными отправляйте rejects в файл и изучайте их. Использование tStatCatcher или статистики job также показывает количество строк и время по каждому компоненту.
Вопросы о производительности
Задача, которая загружает миллион строк, работает медленно. Что вы проверяете?
- Куда уходит время. Количество строк и тайминги по каждому компоненту показывают узкое место.
- Не стоит ли перенести работу в базу данных. Соединения и агрегации часто быстрее выполняются в SQL, чем в tMap.
- Размер коммита. Коммит после каждой строки — это медленно, поэтому коммитьте пакетами.
- Bulk-компоненты. Во многих базах данных есть компоненты массовой загрузки, которые работают гораздо быстрее, чем вставка построчно.
- Lookup в tMap. Большой lookup в памяти может вызывать паузы сборщика мусора или ошибки out-of-memory.
- Настройки JVM. Увеличьте максимальный размер heap (значение Xmx), если память — это ограничение.
- Параллелизм. Некоторые компоненты и задачи можно запускать параллельно, но только когда работа не зависит от порядка.
Как загружать только новые или изменённые записи?
Храните high-water mark, например last-modified timestamp или возрастающий ID, сохраняйте его в контрольной таблице или переменной контекста и извлекайте только строки выше него. Для обновлений в целевой таблице сравнивайте ключи и используйте действия insert или update, либо применяйте merge-выражение в базе данных. Для удалений может потребоваться полное сравнение ключей или поток change data capture.
Как удалять дубликаты?
tUniqRow удаляет дубликаты по выбранным столбцам и может отправлять дубликаты в отдельный выход. tAggregateRow может группировать и выбирать значение. Для очень больших наборов данных часто лучше делать это в базе данных с помощью оконной функции.
Компоненты, которые стоит знать по именам
| Компонент | Что он делает |
|---|---|
| tFileInputDelimited, tFileOutputDelimited | Читают и записывают файлы с разделителями |
| tDBInput, tDBOutput | Читают и записывают таблицы базы данных (для каждой базы данных свои версии) |
| tMap | Соединяет, фильтрует и преобразует |
| tAggregateRow | Группирует и агрегирует |
| tSortRow | Сортирует строки |
| tUniqRow | Удаляет дубликаты |
| tReplicate | Отправляет один и тот же поток в несколько выходов |
| tNormalize, tDenormalize | Разбивают столбец на строки или объединяют строки в столбец |
| tRunJob | Вызывает другую задачу |
| tJava, tJavaRow, tJavaFlex | Пользовательский код на Java |
| tLogRow | Выводит строки в консоль |
| tDie, tWarn, tLogCatcher | Обработка ошибок и логирование |
| tPreJob, tPostJob | Код, который выполняется до и после основного потока |
Развёртывание и планирование
Будьте готовы описать, как вы переносите задачу из Studio в production. Типичные шаги: собрать задачу как standalone-пакет или опубликовать её в репозитории, настроить production-контекст и запланировать её с помощью планировщика команды — будь то собственный инструмент управления Talend, cron или другой оркестратор. Контроль версий, стандарты именования и документация для задач — всё это часть хорошего ответа.
Сценарий, который можно потренировать
«Вы получаете ежедневный файл с клиентами. В некоторых строках отсутствуют email, а некоторые клиенты уже есть в хранилище. Спроектируйте задачу.»
Сильный план:
- Прочитайте файл с помощью tFileInputDelimited и определённой схемы.
- В tMap отфильтруйте строки с отсутствующими email в файл отклонённых и найдите ключ клиента в таблице хранилища.
- Отправьте существующих клиентов в ветку обновления, а новых — в ветку вставки.
- Записывайте в базу данных пакетами с подходящим размером коммита.
- Используйте tLogCatcher и контрольную таблицу для логирования количества строк и ошибок при каждом запуске.
- Используйте переменную контекста для пути к файлу и подключения к базе данных, чтобы одна и та же задача работала в любом окружении.
Проговаривайте свои допущения вслух, например размер файла и нужно ли хранить историю, поскольку интервьюеры хотят увидеть, как вы рассуждаете.
Как готовиться
Если можете, соберите небольшую задачу от начала до конца: прочитайте файл, соедините его с таблицей в tMap, обработайте отклонённые строки и запишите в базу данных. Умейте объяснить, что вы сделаете, когда она упадёт на строке 500 000. Знайте один-два реальных примера из своего опыта с цифрами — например, строк за запуск или сэкономленное время. По смежным темам data engineering смотрите наши руководства по собеседованиям Databricks и Snowflake.
Практика вслух помогает. Используйте mock-интервью, чтобы объяснить дизайн задачи, а затем прочитайте транскрипт и посмотрите, где в вашем объяснении пропущены шаги. Соблюдайте правила работодателя в отношении AI-инструментов на любом живом собеседовании.
Практикуйте ответы для собеседования по Talend с YesToTheOffer
Пройдите mock-техническое собеседование, объясните дизайн задания вслух и просмотрите свою расшифровку afterward. 30 бесплатных минут, без подписки.



