Мое приложение записывает сообщение в syslog-ng, а syslog-ng сохраняет это сообщение в SQlite, разделяя входящее сообщение на разные столбцы.
Моя легенда журнала приложений выглядит так:
unique-record-id usename date Quantity BOQ comma,separated,profiles Count Vendor applicable,vendor,categories known,request,types vendor_code credit
Приведенное выше сообщение имеет 12 значений, разделенных табуляцией (\t). В этих 12 значениях некоторые из них имеют строки, разделенные запятыми. Эти значения, разделенные запятыми, могут различаться для каждой строки журнала, иногда их может быть 4, а иногда может быть 2, но положение значений, разделенных запятыми, в таблице, если оно фиксировано, скажем, 6-й, 9-й, 10-й столбцы.
пример строки журнала:
140189 "[email protected]" "03/Mar/2015:10:05:01" 1593 89 "apple,mango,banana" 15 "google" "fruits,games,social,business" "check,block" 123 50
Я могу проанализировать это сообщение в таблице SQLite (TABLE1), используя следующий парсер
parser p_tab_space {
csv-parser(columns("LOG.ID", "LOG.USERNAME", "LOG.DATE",
"LOG.QUANTITY", "LOG.BOQ", "LOG.PROFILES",
"LOG.COUNT", "LOG.VENDOR", "LOG.CATEGORIES",
"LOG.REQUESTS", "LOG.CODE","LOG.CREDIT")
delimiters("\t")
);
};
Теперь мне нужно снова проанализировать LOG.PROFILES в другой таблице (PROFILE_TABLE) как
id | profiles | quantity
1 | apple | 1593
2 | mango | 1593
3 | banana | 1593
точно так же я должен сделать это для оставшихся значений, разделенных запятыми, в разных таблицах (CATEGORY_TABLE, REQ_TABLE).
пример :
id | categories | quantity
1 | fruits | 1593
2 | games | 1593
3 | social | 1593
4 | business | 1593
Здесь проблема в том, что мы не знаем, сколько значений разделены запятыми.
Основное входное сообщение состоит из 12 значений, разделенных табуляцией, которые мы уже знали, поэтому мы создали 12 столбцов (MACROS) в этом парсере p_tab_space. Но пока мы анализируем список, разделенный запятыми, мы не знаем, сколько значений будет получено? поэтому не могу создавать макросы.
Я прошел по этой ссылке но никакой помощи.
Если кто-то из вас может подкинуть какие-то идеи, это будет так, помощь полная.
Заранее спасибо!