Парсинг JSON Payload в Vertica - PullRequest
       18

Парсинг JSON Payload в Vertica

0 голосов
/ 26 сентября 2018

Я использую Vertica DB (и DBeaver в качестве редактора SQL) - я новичок в обоих инструментах.

У меня есть представление с несколькими столбцами:

someint | xyz   | c         | json 
5       | 1542  | none      | {"range":23, "rm": 51, "spx": 30}
5       | 1442  | none      | {"range":24, "rm": 50, "spx": 3 }
3       | 1462  | none      | {"range":24, "rm": 50, "spx": 30}

(int)   | (int) | (Varchar) | (Long Varchar)  

Я хочу создать другое представление (или для начала, просто иметь возможность правильно его запросить) извыше, , но с разделенным столбцом "json" на отдельные поля / столбцы"range", "rm" и "spx".

Я представляю, что вывод запроса / нового представления выглядит примерно так:

someint | xyz   | c    | range | rm | spx 
5       | 1542  | none | 23    | 51 | 30 
5       | 1442  | none | 24    | 50 | 3 
....

До сих пор я не смог даже запросить "диапазон", например.

Отсюда и мои вопросы:

  1. Как разделить структуру ключ-значение столбца json на отдельные столбцы (в выводе запроса)?

  2. Как перенести нужный вывод в новый вид в Vertica?

Я не нашел большой помощи в документации, так какПроцедура заключается в загрузке текстовых файлов JSON с диска или работе с таблицами, что я не могу сделать, так как у меня есть только доступ к представлению.

1 Ответ

0 голосов
/ 27 сентября 2018

Я нашел решение, поэтому для всех, кто столкнулся с этой проблемой:

SELECT a, xyza, cont,
MAPLOOKUP(MapJSONExtractor(json), 'range') AS range,
MAPLOOKUP(MapJSONExtractor(json), 'rm') AS rm,
MAPLOOKUP(MapJSONExtractor(json), 'spx') AS spx
FROM test;
...