为什么在 Spark 和 sql 工具中运行时'get_json_object'返回不同的结果



我开发了一个Hive查询,它使用横向视图和get_json_object来解压缩一些json。使用针对 hive 数据库的 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') )

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

。我注意到另一个区别:路径"$.product_offer[0].productName"在数据库可视化工具中返回"计划 A",而在 Spark 中没有任何内容。

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

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

这在Spark dbvisualizer中都有效。

最新更新