为啥'get_json_object'在spark和sql工具中运行时返回不同的结果

Posted

技术标签:

【中文标题】为啥\'get_json_object\'在spark和sql工具中运行时返回不同的结果【英文标题】:Why does 'get_json_object' return different results when run in spark and sql tool为什么'get_json_object'在spark和sql工具中运行时返回不同的结果 【发布时间】:2019-09-02 22:10:46 【问题描述】:

我开发了一个配置单元查询,它使用横向视图和 get_json_object 来解压一些 json。该查询使用 jdbc 客户端(dbvisualizer)对 hive 数据库运行良好,但是当从 java 应用程序作为 spark sql 运行时,在相同的数据上,它什么也不返回。 我已经将问题归结为函数“get_json_object”返回的差异。

这种类型的查询可以说明问题

select concat_ws( "|", get_json_object('"product_offer":[
"productName":"Plan A",
"productName":"Plan B"]', 
'$.product_offer.productName') )

当在 dbvisualizer 中针对 Hive 数据库运行时,我会在 json 数组中得到一个包含 2 个产品名称的数组:["Plan A","Plan B"]。 当从 java 应用程序作为 spark sql 运行相同的查询时,返回 null。

我注意到另一个区别:路径 '$.product_offer[0].productName' 在 db 可视化工具中返回 'Plan A' 而在 spark 中什么也没有。

【问题讨论】:

【参考方案1】:

产品名称数组的提取路径是

select concat_ws( "|", get_json_object('"product_offer":["productName":"Plan A","productName":"Plan B"]', '$.product_offer[*].productName'

在 spark dbvisualizer 中都可以使用。

【讨论】:

以上是关于为啥'get_json_object'在spark和sql工具中运行时返回不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

Spark高级操作之json复杂和嵌套数据结构的操作一

在 get_json_object 的搜索字符串中包括 $

如何使用 Hive (get_json_object) 查询结构数组?

get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键

为啥在火花中运行时配置单元查询不起作用

在 SparkSql 中使用 get_json_object() 提取属性名称中带有星号的 JSON 属性