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

Posted

技术标签:

【中文标题】在greenplum pxf外部表中,从对象的json数组中获取元素时获取空字符串【英文标题】:In greenplum pxf external table get empty string while fetching element from json array of object 【发布时间】:2020-06-12 06:16:14 【问题描述】:

通过在多行 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,

获取空字符串....

【问题讨论】:

【参考方案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 支持。

可以在here 中找到有关将多行文本文件读入单个表格行的更多信息。有关 Greenplum 对 JSON 的支持的信息可以在 here 找到。

【讨论】:

以上是关于在greenplum pxf外部表中,从对象的json数组中获取元素时获取空字符串的主要内容,如果未能解决你的问题,请参考以下文章

Greenplum PXF 是不是支持 HDFS 短路读取?

PXF JSON 插件错误

开源 Greenplum:从外部表中选择时 GPFDIST 错误“分段错误”

Greenplum:获取通过外部表处理的文件名

将数据插入 Greenplum 物理表

如何在greenplum的报价字段中使用逗号从csv文件创建外部表?