在 HIVE 函数中转义子运算符 get_json_object

Escaping child operator in the HIVE function get_json_object

我有一个 table 的字符串列,其中包含 JSON 格式的数据。然后,我使用函数 get_json_object 从中解析一些数据。问题是我的一个字段的名称中包含 .。因此,如果以纯文本形式写入字段名称,该函数将像子运算符一样对其进行解释。

这是一个有效的示例代码:

select get_json_object(col, '$.rootkey')
from (select '{"rootkey":15,"key.a":16,"key.b":17}' as col) test;

但是这个失败了:

select get_json_object(col, '$.key.a')
from (select '{"rootkey":15,"key.a":16,"key.b":17}' as col) test;

get_json_object函数中有没有办法转义.

目前get_json_object()不支持转义,见HIVE-2927

解决方法是使用 lateral view json_tuple():

select v.rootkey, v.key_a, v.key_b
  from (select '{"rootkey":15,"key.a":16,"key.b":17}' as col) test
       lateral view json_tuple(col, 'rootkey', 'key.a','key.b') v as rootkey, key_a, key_b
;

结果:

v.rootkey   v.key_a   v.key_b   
15          16        17