Лучший шаблон/модель для преобразования данных JSON в RDMS (в частности, Zendesk)

Я пытаюсь собрать данные из Zendesk Incremental Ticket Events API (в формате JSON) в реляционную базу данных MySQL. Почему?

Ну, на самом деле, конечная цель заключается в том, что мне нужна метрика (количество решений по заявкам в день) — автоматически импортируемая в основную базу данных. Таким образом, SQL может быть ненужным, но я не уверен, что лучший способ подсчитать количество решений путем разбора JSON. Я не могу сделать прямой вызов API к расчетным показателям Zendesk.

Таким образом, повторяющаяся структура JSON выглядит следующим образом (внутри основной метки, называемой «ticket_events»):

 { 
"child_events":[
{"id": 6563223, "via": "Mail", "via_reference_id":null, >random field name1<:result},
{"id": 2321513, "via": "Mail", "via_reference_id":null, >random field name2<:result},
{.... for 1-n elements} ]

"id":8784848451,
"ticket_id":16037,
"updater_id":54548184848,
"timestamp":1416812299
}

Когда я помещаю >random field name1‹, это относится к обновленному полю билета, поэтому его можно назвать как угодно. Приоритет, отправитель, получатель, статус и т. д.

Меня интересует только поле status внутри >случайного имени поля‹. В частности, я просто хочу найти "статус":"решено" — это означает, что статус был изменен на "решено". Каждый раз, когда это происходит, я хочу получить временную метку, ticket_id и updater_id, которые являются братьями и сестрами для «дочерних событий».

Так вот в чем проблема. Очевидно, что для баз данных SQL требуется фиксированное количество полей. Поэтому я не могу вытащить все дочерние события. Не проблема, мне просто нужно одно дочернее событие (статус). Что ж, даже если бы я нашел правильное выражение запроса JSON в своем инструменте (Pentaho), чтобы извлекать только элементы $child_events.status, ну --- не каждое обновление имеет обновление статуса. И инструмент хочет соотношение 1:1 между всеми полями.

На самом деле --- я думаю, я могу поместить гигантский массив "дочерних событий" в одно большое поле SQL... и просто выполнить синтаксический анализ (in_str) или что-то в среде SQL для "status_solved"... я не знаю . Я немного не в своей тарелке - как бы вы лучше всего разобрали то, что я пытаюсь выполнить в базе данных SQL? Или есть лучший подход, который включает пропуск SQL?

Опять же, я использую Pentaho, который позволяет преобразовывать данные с помощью java и javascript, прежде чем я даже начну анализировать их как JSON, если это необходимо.

Опять же, мне нужен статус: решить события, временная метка, updater_id, ticket_id. Любая помощь высоко ценится!


person John Babson    schedule 09.01.2015    source источник


Ответы (1)


Я думаю, что javascript - лучший инструмент здесь. псевдокод:

var all_children = eval(json_text);
var found = [];
for each object_with_child_events
    for each child_events item
        if (item.status !== 'undefined')
           if (item.status == 'solved')
              found.append(object.{events, timestamp, updater_id, ticket_id});
              break;
person koriander    schedule 09.01.2015