在Spark和SQL工具中运行时,为什么“ get_json_object”返回不同的结果

时间:2019-09-02 22:10:46

标签: apache-spark hive apache-spark-sql hiveql

我开发了一个配置单元查询,该查询使用侧面视图和get_json_object来解压一些json。使用jdbc客户端(dbvisualizer)对配置单元数据库进行查询时,查询效果很好,但是当从java应用程序作为spark sql在相同数据上运行时,它不返回任何内容。 我已将问题归结为“ get_json_object”函数返回值的差异。

此查询类型可以说明问题

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

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

我注意到另一个区别:路径'$ .product_offer [0] .productName'在db visualizer中返回'Plan A',而在spark中则没有任何内容。

1 个答案:

答案 0 :(得分:1)

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

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

在spark dbvisualizer中均有效。