我正在使用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
....
例如,到目前为止,我什至无法查询“范围”。
提出我的问题:
如何将json列键值结构分离为单独的列(在查询输出中)?
如何在Vertica中将所需的输出传输到新视图中?
我没有在文档中找到太多帮助,因为有从驱动器加载json文本文件或在表上进行操作的过程,我无法执行此操作,因为我只能访问视图。
答案 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;