我开发了一个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中都有效。