配置单元嵌套的get_json_object在选择查询中工作正常,但在创建表中作为选择查询返回null-奇怪的行为

时间:2019-02-25 18:48:28

标签: sql hive

我有一个包含3列的配置单元表,因此将其中的1个组合为字符串,第二个为字符串化的json数组,第三个为字符串化的json对象。我想从字符串化的json对象中检索一个字段,该字段的相关键可以通过将第二列的字符串型json数组中的第一列与第一元素组合来获得。

get_json_object(
get_json_object(
column3,concat(
"$.",column1,"__",
get_json_object(
column2,"$[0]"
))),
"$.fieldofinterest") 
as field_of_interest

我写了上面的结构,以检索感兴趣的领域。

将其写为select...from语句的一部分时,我会在field_of_interest列中获得正确的输出。

将其作为create table t1 as select...from语句的一部分写入时,将创建表,其中所有行的field_of_interestNULL

create...select语句中没有失败。所有其他列都可以填充。我在其他列中使用了get_json_object,它们没有嵌套。他们居住得很好。只有此列没有。

可能是什么原因造成的?我该如何开始调试呢?其他堆栈溢出答案都没有运气。

1 个答案:

答案 0 :(得分:0)

弄清楚了。这是因为我在测试查询的地方与最终运行查询的地方之间存在版本差异。

我正在hiveserver2上对其进行测试。它在spark 2.2后端上运行,其中get_json_object能够解析json数组。在我运行它的服务器上,正在运行hive 0.13版本,该版本无法解析JSON数组。我将数组包装在一个对象中,它的工作就像一个魅力。

get_json_object(
 get_json_object(
  column3, 
   concat(
    "$.",
    column1,
    "__",
    get_json_object(
     concat('{"x":',column2,'}'),
     "$.x[0]"
    )
   )
  ),
 "$.fieldofinterest"
) as field_of_interest