在Vertica中解析JSON有效负载

时间:2018-09-26 08:27:40

标签: json 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”列分为各个字段/列“范围”,“ 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 :(得分:1)

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

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