#datastage
#datastage
Вопрос:
У меня есть требование разделить последовательный файл на 3 части: заголовок, данные, трейлер. У меня есть заголовок и данные.
Есть ли способ в преобразователе определить, есть ли у вас последняя запись в последовательном файле? Я пытался использовать lastRow(), но это дает мне последнюю строку для каждого узла. Мне нужно оставить parallelize включенным.
Заранее спасибо за любую помощь.
Ответ №1:
У вас нет априорных знаний о том, на каком узле будет проходить строка трейлера. Поэтому на этапе преобразования нет решения, если вы хотите сохранить параллельное выполнение.
Один из способов сделать это — иметь ссылку отклонения на этапе последовательного файла. Это приведет к захвату любой строки, которая не соответствует определенным метаданным. Настройте сцену с метаданными для ваших строк данных, тогда заголовок и трейлер будут записаны в ссылку отклонения. Из их данных должно быть довольно очевидно, что есть что, и вы можете обрабатывать их дальше и, возможно, даже присоединять их к своим строкам данных.
Вы также можете захватить последнюю строку отдельно (например, через head -1 filename ) и сравнить ее с каждой обработанной строкой, чтобы определить, является ли она последней. Большой объем вычислений при очень небольшом выигрыше.
Комментарии:
1. Привет, Рэй. Теперь, когда вы упомянули Head -1, я думаю, я мог бы использовать Tail -1, и у меня будет запись трейлера. Большое спасибо.
2. Конечно, я имел в виду хвост -1 (это то, что я получаю за публикацию поздно ночью после 13-часового рабочего дня!). Я бы все же предпочел ссылку rejects на последовательном подходе к файловому этапу, по соображениям производительности, если ничего другого.
3. Спасибо за последующий луч. Я понял хвост -1.