在 Vertica 中解析 JSON 负载

Parsing JSON Payload in Vertica

我正在使用 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" 列被分隔成单独的 fields/columns "range"、"rm" 和 "spx"。

我想象查询/新视图的输出如下所示:

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

到目前为止,我什至无法查询 "range"。

因此我的问题是:

  1. 如何将 json 列键值结构分隔成单独的列(在查询输出中)?

  2. 如何将所需的输出传输到 Vertica 中的新视图?

我没有在文档中找到太多帮助,因为那里的过程是从驱动器加载 json 文本文件或对表进行操作,我不能这样做,因为我只能访问一个视图。

我找到了解决方案,所以对于遇到此问题的其他人:

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