Вы можете (несмотря на предупреждения) создать цикл в родительском задании, увеличивая переменную смещения на каждой итерации в шаге Javascript. Я использовал такую настройку для использования веб-сервисов с неизвестным числом результатов, смещая смещение каждый раз, когда я получаю полную страницу, и останавливаясь, когда получаю меньше.
Настройка переменных
В свойствах задания задайте параметры Offset и Limit, чтобы вы могли (пере) запускать с любого смещения, даже вызывая задание из командной строки с определенными смещением и лимитом. Это можно сделать и с помощью шага переменных, но параметры делают все то же самое, плюс вы можете установить значения по умолчанию для тестирования.
Обработка в преобразовании
Основное преобразование (я) должно иметь «передачу значений параметров в субтрансформацию», как это происходит по умолчанию.
Внутри преобразования (см. Нижнюю половину изображения) вы начинаете с табличного ввода, которыйиспользует подстановку переменных, помещая $ {Offset} и $ {Limit} там, где у вас есть @offset и @ limit.
Поток из Table Input затем переходит к обработке, но также копируется в шаг за шагом для подсчетастрок. Оставьте поле группы пустым и создайте поле, которое подсчитывает все строки. Установите флажок, чтобы всегда возвращать строку результатов.
Отправьте поток из Group By на шаг Set Variables и установите переменную NumRows в области родительского задания.
Возврат в обратном направлении
В основном задании перейдите от преобразования к шагу простой оценки, чтобы сравнить переменную NumRows с пределом. Если NumRows меньше, чем $ {Limit}, вы достигли последнего пакета, успех!
Если нет, перейдите к шагу Javascript, чтобы увеличить смещение следующим образом:
var offset = parseInt(parent_job.getVariable("Offset"),0);
var limit = parseInt(parent_job.getVariable("Limit"),0);
offset = offset + limit;
parent_job.setVariable("Offset",offset);
true;
Затем поток работ переходит к фиктивному шагу, а затем снова к преобразованию с новым значением смещения.
Примечания
- В отличие от преобразования, вы можете установитьи используйте переменную в том же задании.
- Для шага JS требуется значение "true";как последнее утверждение, поэтому оно сообщает об успешном выполнении задания.