Как захватить последнюю запись в файле

#datastage

#datastage

Вопрос:

У меня есть требование разделить последовательный файл на 3 части: заголовок, данные, трейлер. У меня есть заголовок и данные.

Есть ли способ в преобразователе определить, есть ли у вас последняя запись в последовательном файле? Я пытался использовать lastRow(), но это дает мне последнюю строку для каждого узла. Мне нужно оставить parallelize включенным.

Заранее спасибо за любую помощь.

Ответ №1:

У вас нет априорных знаний о том, на каком узле будет проходить строка трейлера. Поэтому на этапе преобразования нет решения, если вы хотите сохранить параллельное выполнение.

Один из способов сделать это — иметь ссылку отклонения на этапе последовательного файла. Это приведет к захвату любой строки, которая не соответствует определенным метаданным. Настройте сцену с метаданными для ваших строк данных, тогда заголовок и трейлер будут записаны в ссылку отклонения. Из их данных должно быть довольно очевидно, что есть что, и вы можете обрабатывать их дальше и, возможно, даже присоединять их к своим строкам данных.

Вы также можете захватить последнюю строку отдельно (например, через head -1 filename ) и сравнить ее с каждой обработанной строкой, чтобы определить, является ли она последней. Большой объем вычислений при очень небольшом выигрыше.

Комментарии:

1. Привет, Рэй. Теперь, когда вы упомянули Head -1, я думаю, я мог бы использовать Tail -1, и у меня будет запись трейлера. Большое спасибо.

2. Конечно, я имел в виду хвост -1 (это то, что я получаю за публикацию поздно ночью после 13-часового рабочего дня!). Я бы все же предпочел ссылку rejects на последовательном подходе к файловому этапу, по соображениям производительности, если ничего другого.

3. Спасибо за последующий луч. Я понял хвост -1.