выполнить Regex для данных JSON в каждой строке и вставить в таблицу MySQL с помощью NiFi - PullRequest
0 голосов
/ 03 января 2019

Я хочу добиться следующего варианта использования:

У меня есть файл следующим образом:

 enter code here
{"FirstName":6785,"Lastname":"Charles","Address":"1103 pioneer St"}
{"HouseName":67783,"Lastname":"Stevenson","Address":"Abel St"}
{"FoodName":7473,"Lastname":"luther","Address":"Half Moon Bay"}

si Я хочу добавить теги «NAME» и «Value» в первый столбец в каждой строке, чтобы можно было легко вставить все атрибуты FirstName, HouseName и FoodName в один столбец в MySQL с именем ' Name 'и соответствующие значения в столбце «Значение» в MySQL. например, я хочу, чтобы данные выглядели следующим образом:

{NAME:"FirstName","Value":6785,"Lastname":"Charles","Address":"1103 pioneer St"}
{NAME:"HouseName","Value":67783,"Lastname":"Stevenson","Address":"Abel St"}
{NAME:"FoodName","Value":7473,"Lastname":"luther","Address":"Half Moon Bay"}

Моя таблица в MySQL выглядит следующим образом: Имя Значение Фамилия Адрес

Я использую следующий поток:

GetFile-> SplitRecord-> ConvertJsonToSQL -> PutSQL

Я хочу, чтобы в столбце NAME все имена атрибутов первого столбца каждой строки (FirstName, HouseName, FoodName) и в столбце Value вводились соответствующие значения.

Как мне добиться этого варианта использования в NiFi? Что Regex я должен использовать в ReplaceText для достижения этой цели. Любая помощь приветствуется. Спасибо!

1 Ответ

0 голосов
/ 04 января 2019

Для этого вы можете использовать GetFile -> JoltTransformJson (или JoltTransformRecord) -> PutDatabaseRecord, что позволяет избежать разделения и отдельного генерирования / выполнения SQL. Используйте следующую спецификацию в JoltTransformRecord:

[
  {
    "operation": "shift",
    "spec": {
      "*": {
        "Address": "[#2].Address",
        "Lastname": "[#2].Lastname",
        "*Name": {
          "$": "[#3].Name",
          "@": "[#3].Value"
        }
      }
    }
  }
]

Обратите внимание, что я изменил выходной столбец NAME на Name, чтобы он соответствовал вашему имени столбца MySQL, это упрощает работу PutDatabaseRecord, когда столбцы соответствуют именам полей.

...