在多行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,
获取空字符串....
遗憾的是,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的支持信息可以在以下网站找到 此处.