在 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
我有一个 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