我开发了一个配置单元查询,该查询使用侧面视图和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中则没有任何内容。
答案 0 :(得分:1)
提取产品名称数组的路径为
select concat_ws( "|", get_json_object('{"product_offer":[{"productName":"Plan A"},{"productName":"Plan B"}]}', '$.product_offer[*].productName'
在spark dbvisualizer中均有效。