为啥'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工具中运行时返回不同的结果的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Hive (get_json_object) 查询结构数组?