在greenplum pxf外部表格中,当从对象的json数组中获取元素时,得到空字符串。

问题描述 投票:0回答:1

在多行json表的例子中,通过使用pxf json插件创建外部表来访问json数据。

当使用以下列定义时

"coordinates.values[0]" INTEGER,

轻松地从下面的json中获取8个

"coordinates":{
     "type":"Point",
     "values":[
           8,
           52
     ]
}

但如果我们把json改为这样的内容

"coordinates": {
     "type": "geoloc",
     "values":[
           { 
                     "latitude" : 72, 
                     "longtitue" : 80 
           }
     ]
}

并像这样修改列的定义

"coordinates.values[0].latitude" INTEGER,

获取空字符串....

json hdfs greenplum
1个回答
1
投票

遗憾的是,PXF中的JSON配置文件不支持访问数组内的JSON对象。然而,Greenplum对JSON有很好的支持,你可以通过下面的操作达到同样的结果。

CREATE EXTERNAL TABLE pxf_read_json (j1 json)
LOCATION ('pxf://tmp/file.json?PROFILE=hdfs:text:multi&FILE_AS_ROW=true')
FORMAT 'CSV';

该... pxf_read_json 表将访问外部系统上的JSON文件。每个文件以多行文本文件的形式读取,每个文件代表Greenplum上的一个表行。然后,你可以按照以下方式查询外部数据。

SELECT values->>'latitude' as latitude, values->>'longtitue' as longitude
FROM pxf_read_json
JOIN LATERAL json_array_elements(j1->'coordinates'->'values') values
ON true;

通过这种方式,您仍然可以利用PXF的支持来访问外部系统,同时也可以利用Greenplum强大的JSON支持。

关于将多行文本文件读入单表行的更多信息,请参见 此处. 关于Greenplum对JSON的支持信息可以在以下网站找到 此处.

© www.soinside.com 2019 - 2024. All rights reserved.