Преобразование многомерного массива в Logstash

Как я могу преобразовать многомерную строку SQL json в действительный объект JSON, чтобы его можно было сопоставить с типами полей шаблона индекса Elasticsearch.

Пример случая:

Предположим, что это мой шаблон индекса Elasticsearch.

{
  "settings": {
    "number_of_shards": "5"
  },
  "mappings": {
    "_doc": {
      "properties": {
        "manager": {
          "properties": {
            "age": {
              "type": "integer"
            },
            "name": {
              "type": "text"
            }
          }
        },
        "employees": {
          "type": "nested",
          "properties": {
            "age": {
              "type": "integer"
            },
            "name": {
              "type": "text"
            },
            "addresses": {
              "type": "nested",
              "properties": {
                "street": {
                  "type": "text"
                },
                "city": {
                  "type": "text"
                }
              }
            }
          }
        }
      }
    }
  }
}

Проблемным случаем является массив "employees" и преобразование JSON внутреннего массива "addresses".

Пример данных SQL для «сотрудников»:

[{"age":30,"name":"User 1","addresses":"[{\"street\":"Home street 1",\"city\":"New York"},{\"street\":"Home street 2",\"city\":"Washington"}]"}]

Конфигурация фильтра Logstash: преобразование работает, если «сотрудники» не содержат вложенного массива. Но проблема возникает, когда массив i имеет вложенный массив.

filter {
  ruby {
    code => "
      require 'json'

      employees_json_value = JSON.parse(event.get('employees').to_s)
      event.set('employees',employees_json_value )
    "
  }
}

Вопрос в том, как я могу преобразовать вложенный массив «адресов» столбца «сотрудники» в объект JSON, чтобы я мог сопоставить его с шаблоном индекса Elasticsearch.


person Sami Pylkkänen    schedule 05.02.2019    source источник