为什么在 Spark 中运行时蜂巢查询不起作用



我开发了一个Hive查询,它使用横向视图和get_json_object来解压缩一些json。使用jdbc客户端(dbvisualizer(查询工作得很好,但是当从java应用程序作为spark sql运行时,在相同的数据上,它不返回任何内容。

如果我创建一个数组来模拟预期的解压缩 json,则查询有效

array('Plan A','Plan B','Plan C','Plan D')

但是如果我用这个语句解包,它不会:

split(regexp_replace(get_json_object('{"product_offer":[{"productName":"Plan A"},{"productName":"Plan B"},{"productName":"Plan C"},{"productName":"Plan D"}]}', '$.product_offer.productName'), '\[|\]|"', ''), ',' )

在 dbvisualizer 中单独运行时,它们会产生相同的输出,并且在比较时是等效的。

这是查询的缩减版本,它适用于具有一行的测试表,为 java 转义:

"SELECT pageid , exp.* , exp2.* , exp3.* from stephen n" +
"lateral view outer posexplode( split(regexp_replace(get_json_object('{"product_offer":[{"productName":"P lan A"},{"productName":"Plan B"},{"productName":"Plan C"},{"productName":"Plan D"}]}', '$.product_offer.productName'), '\\[|\\]|"', ''), ',' ) )  exp as seqn, product_namen" +
"lateral view outer posexplode( array('aaaa','bbb','ccc','ddd'))  exp2 as seqo, product_offern" +
"lateral view outer posexplode( array('Delete','Add','Add','Delete'))  exp3 as seqa, product_actionn" +
"where (seqn=seqo)n" +
"  and (seqn=seqa)n" 

我正在使用java 8,hive版本'2.2.0 rda840b0f8fa99cab9f004810cd22abc207493cae'

不记录任何错误。

当我确定get_json_object行为不端时,我在此处将问题重写为输入链接描述:用于获取所有产品名称的正确路径是

'$.product_offer[*].productName'

最新更新