Nifi конвертировать sql в json структурированные - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь найти способ получить данные из SQL и отформатировать их в указанном формате c json, и мне трудно это сделать в nifi.

Данные в таблице выглядят следующим образом.

{
    "location_id": "123456",
    "name": "My Organization",
    "address_1": "Address 1",
    "address_2": "Suite 123",
    "city": "My City",
    "state": "FL",
    "zip_code": "33333",
    "description": "",
    "longitude": "-2222.132131321332113",
    "latitude": "111.21321321321321321",
    "type": "data type"
}

И я хочу преобразовать их в такой формат.

{
    "type": "FeatureCollection",
    "features": [
        {
            "geometry": {
                "type": "Point",
                "coordinates": [
                    $.longitude,
                    $.latitude
                ]
            },
            "type": "Feature",
            "properties": {
                "name": $.name,
                "phone": $.phone_number,
                "address1": $.address_1,
                "address2": $.address_2,
                "city": $.city,
                "state": $.state,
                "zip": $.zip_code,
                "type": $.type
            }
        }
    ]
}

Это то, что я имею до сих пор и всеми означает, что если я делаю это странным образом, дайте мне знать.

enter image description here

Я думал, что смогу разбить все это на одну запись, отформатировать их в jsons в этом формате.

{
            "geometry": {
                "type": "Point",
                "coordinates": [
                    $.longitude,
                    $.latitude
                ]
            },
            "type": "Feature",
            "properties": {
                "name": $.name,
                "phone": $.phone_number,
                "address1": $.address_1,
                "address2": $.address_2,
                "city": $.city,
                "state": $.state,
                "zip": $.zip_code,
                "type": $.type
            }
        }

А затем объединить все записи и объединить их вокруг этого

{
        "type": "FeatureCollection",
        "features": [
        ]
}

Я чувствую, что делаю это странно, просто не знаю, как чтобы сделать это, ха-ха.

1 Ответ

1 голос
/ 31 марта 2020

Попробуйте ExecuteSQLRecord с JsonRecordSetWriter вместо Execute SQL, это позволит вам выводить строки как JSON объекты без преобразования в / из Avro. Если у вас не слишком много строк (что может вызвать ошибку нехватки памяти), вы можете использовать JoltTransform JSON, чтобы выполнить полное преобразование (без разделения строк) со следующей цепочкой spe c:

[
  {
    "operation": "shift",
    "spec": {
      "#FeatureCollection": "type",
      "*": {
        "#Feature": "features[&1].type",
        "name": "features[&1].properties.name",
        "address_1": "features[&1].properties.address_1",
        "address_2": "features[&1].properties.address_2",
        "city": "features[&1].properties.city",
        "state": "features[&1].properties.state",
        "zip_code": "features[&1].properties.zip",
        "type": "features[&1].properties.type",
        "longitude": "features[&1].geometry.coordinates.longitude",
        "latitude": "features[&1].geometry.coordinates.latitude"
      }
    }
  }
]

Если у вас слишком много строк, вы можете использовать Split Json, чтобы разделить их на более мелкие куски, затем JoltTransform JSON (с указанным выше параметром c), а затем MergeRecord, чтобы объединить их обратно в один большой массив. Чтобы поместить их в поле features, вы можете использовать ReplaceText, чтобы «обернуть» массив во внешний объект JSON, но это также может вызвать ошибку нехватки памяти.

...