Почему документы, перенаправленные на вывод ошибок, приводят к сбою конвейеров при использовании через задачи ULTRA?
Я делаю конвейер, который запускает пару вызовов REST POST параллельно, а затем обновляет таблицу в базе данных. Он будет использоваться через задачу ULTRA. Я использую сценарий для определенных преобразований и сопоставлений, которые я не смогу сделать с помощью традиционных снимков, поскольку большинство из них не совместимы с ULTRA (например, хвост и группировка по полям).
Я знаю, что мне нужно поддерживать информацию о происхождении для таких конвейеров, чтобы выполнять задачи ULTRA. Обратитесь к следующей документации.
Всякий раз, когда я записываю результат в вывод, я использую что-то следующим образом.
this.output.write(doc, wrapper);
Но в документации нет упоминания о ведении информации о происхождении в случае ошибок. У меня есть похожая оболочка в блоке catch, в который я пишу error
следующее.
this.error.write(wrapper);
Я получаю следующую ошибку из этого скрипта.
Document created by 'Pre-DB Script[08755fd3-46b0-4f3a-b353-4a0685b649c4 -- 2b2bfab7-18f7-49ab-9a98-41bf0bc694eb]' does not contain lineage information and cannot be used as output from an Ultra pipeline
Resolution:
Use a Join snap to merge static documents into an Ultra input document or request that the snap be made Ultra-compatible
Reason:
The document was not created from an Ultra input document or was created by a Snap that is not Ultra-compatible
Ниже приведен соответствующий фрагмент кода.
var impl = {
input: input,
output: output,
error: error,
log: log,
execute: function () {
// Some variables
var error = false;
this.log.info("Executing Transform Script");
while (this.input.hasNext()) {
try {
// Read the next document, wrap it in a map and write out the wrapper
var doc = this.input.next();
// Some operations
if (!doc.successful) {
error = true;
throw { message: doc.errors.errorDetailMessage, original: doc };
}
var wrapper = new java.util.HashMap();
// Add required fields to wrapper
wrapper.put("original", doc);
if (/* Should this wrapper be sent to output? */) {
if (!error) this.output.write(doc, wrapper);
error = false;
}
this.log.info("Transform Script finished");
}
catch (err) {
var wrapper = new java.util.HashMap();
wrapper.put("error", err.message);
wrapper.put("original", err.original);
this.log.error(err);
this.error.write(wrapper);
}
}
}
};
Итак, как я могу решить проблемы с информацией о происхождении в тех случаях, когда документы направляются по пути ошибок?
1 ответ
Оказывается, вы можете передавать информацию о происхождении в error
похожий на output
,
this.error.write(doc, wrapper);