在 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"。
因此我的问题是:
如何将 json 列键值结构分隔成单独的列(在查询输出中)?
如何将所需的输出传输到 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;
我正在使用 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"。
因此我的问题是:
如何将 json 列键值结构分隔成单独的列(在查询输出中)?
如何将所需的输出传输到 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;