Ошибка при попытке проанализировать odata4 из API REST с использованием NIFI - PullRequest
1 голос
/ 11 ноября 2019

Я использую Microsoft REST API для запроса приложения Azure, oauth и запрос выполняются без проблем.

Ответ от InvokeHTTP имеет этот формат

{"@odata.context":"https://****.dynamics.com/api/data/v9.1/$metadata#endpoint","value":[ here comes the actual JSON result in format {
 "@odata_etag" : "W/\"555598\"", "field":"value...},...]
,"@odata.nextLink":"https://****.dynamics.com/api/data/v9.1/endpoint?$skiptoken.....}

Мне нужно извлечьnextLink для нумерации страниц и значения, чтобы продолжить поток и сохранить результат. Когда я пытаюсь выполнить синтаксический анализ с inferAvroSchema, чтобы начать работу с ним, выдается эта ошибка «Недопустимый начальный символ: @ odata.etag»

Моя идея заключалась в том, чтобы inferAvroSchema, затем EvaluateJsonPath, чтобы извлечь теги odata, а затем извлечьзначения.

Я попытался использовать EvaluateJsonPath для результата, запрашивая создание атрибута для $. @ odata.context, но он также не находит элемент, я уверен, что-то связано с @.

Я также могу заменить все @ входящего потока на другой символ, но не знаю, имеет ли это смысл.

Мне кажется, что я не использую правильный подход, но NIFI+ odata не дает мне результатов ни в Google, ни здесь. Я открыт для любых предложений!

спасибо!

Ответы [ 2 ]

2 голосов
/ 11 ноября 2019

Поля схемы не могут содержать @. Вы можете заменить @, но вы должны быть уверены, что не замените его в реальном содержимом, например, адресах электронной почты. Другое решение заключается в преобразовании ответа API с использованием процессора JoltTransformJSON , чтобы ваш поток мог работать с ним:

enter image description here

GenerateFlowFile:

enter image description here

Для процессора JoltTransformJSON укажите следующую спецификацию Jolt:

[
  {
    "operation": "shift",
    "spec": {
      "\\@odata.nextLink": "next"
    }
  }
]

Оставьте значения по умолчанию длядругие свойства. Вы можете поиграть с Джолтом здесь: http://jolt -demo.appspot.com /

EvaluateJsonPath:

enter image description here

Результат:

enter image description here

Обратите внимание, что теперь url является частью атрибутов файла потока.

1 голос
/ 11 ноября 2019

Ваша догадка верна, у вас могут быть только допустимые символы для имен полей в типе схемы, которую вы используете, avro или JSON. Вы можете заставить NiFi удалить недопустимые символы с помощью метода замены текста, прочитайте здесь о том, что действительно: http://avro.apache.org/docs/current/spec.html#names

...