NiFi - Создать таблицу базы данных из JSON - PullRequest
0 голосов
/ 14 декабря 2018

Я пытаюсь прочитать файл JSON и создать таблицу на основе его схемы.

Я должен сделать это, хотя NiFi, и я новичок в этом, поэтому яразбить проблему на следующие части

  1. Считать файл JSON, извлечь его схему
  2. После того, как будет извлечена правильная схема, используйте ее для создания оператора create
  3. Выполните оператор create

Для первого подхода я использую

GetFile > InferAvroSchema > EvaluateJsonPath > PutFile

Мой файл JSON выглядит следующим образом

{"data":[
{
  "firstname":"John",
  "lastname":"Snow",
  "age":24
}
]}

вывод InferAvroSchema (при отправке на PutFile) равен

{
  "type" : "record",
  "name" : "MyRec",
  "fields" : [ {
    "name" : "data",
    "type" : {
      "type" : "array",
      "items" : {
        "type" : "record",
        "name" : "data",
        "fields" : [ {
          "name" : "firstname",
          "type" : "string",
          "doc" : "Type inferred from '\"John\"'"
        }, {
          "name" : "lastname",
          "type" : "string",
          "doc" : "Type inferred from '\"Snow\"'"
        }, {
          "name" : "age",
          "type" : "int",
          "doc" : "Type inferred from '24'"
        } ]
      }
    },
    "doc" : "Type inferred from '[{\"firstname\":\"John\",\"lastname\":\"Snow\",\"age\":24}]'"
  } ]
}

Итак, я пытаюсь прочитать схему в EvaluateJsonPath как $.fields[0].type.items.fields.

EvaluateJsonPathКонфигурация процессора выглядит следующим образом: config

Когда я пытаюсь увидеть происхождение данных, я не вижу атрибута с именем colz.Но если я отправлю его вывод в PutFile, я получу это

    [
  {
    "name":"firstname",
    "type":"string",
    "doc":"Type inferred from '\"John\"'"
  },
  {
    "name":"lastname",
    "type":"string",
    "doc":"Type inferred from '\"Snow\"'"
  },
  {
    "name":"age",
    "type":"int",
    "doc":"Type inferred from '24'"
  }
]

, который является массивом.Теперь я надеялся, что смогу пройти через этот массив через некоторый скрипт и создать строку (для оператора create) с атрибутами name и type.

Может кто-нибудь подсказать мне, как я могу получить этот массив вскрипт (для зацикливания)?

Кроме того, мой подход в порядке или есть лучший способ достичь этого результата?

Я использую NiFi 1.8.0.Пожалуйста, дайте мне знать, если требуется дополнительная информация.

...