get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键
Posted
技术标签:
【中文标题】get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键【英文标题】:get_json_object() - parsing a json string in Impala - Unable to parse the key starting with a number 【发布时间】:2021-07-03 08:19:06 【问题描述】:我正在处理一个大表(mytable),我必须在其中解析一个字符串类型的列。 column(value) 是一个 json 字符串,如下所示。 我的表 -->
id | key | value |
---|---|---|
1 | bgtn | "3Dtyu":"4gg","3tyi":34.98,"rty_amt":45.99,"4ftyh":"5AA" |
我已经在 Impala (Hue) 中尝试过下面提到的查询
select get_json_object(value,"$.3Dtyu") as value
from mytable
where id=1;
错误信息:
errorMessage="UDF 错误: 无法解析 json 路径'$.3Dtyu': 位置 2 的预期键\n"
我也尝试了几件事:
-
代码 1
select get_json_object(value,"$.*") as value
from mytable
where id=1;
输出:
value |
---|
["4gg",34.98,45.99,"5AA"] |
-
代码 2
select get_json_object(value,"$.rty_amt") as value
from mytable
where id=1;
输出:
value |
---|
[45.99] |
但是当解析其中以数字开头的特定键时,get_json_object
失败。
我将非常感谢您的帮助。
谢谢!
【问题讨论】:
看起来你需要更新你的数据库引擎:issues.apache.org/jira/plugins/servlet/mobile#issue/IMPALA-8547 【参考方案1】:尝试转换为 MAP:删除大括号和双引号,然后使用 str_to_map 函数。
演示:
select mymap['3Dtyu'] as `3Dtyu`,
mymap['3tyi'] as `3tyi`
from
(
select str_to_map(regexp_replace('"3Dtyu":"4gg","3tyi":34.98,"rty_amt":45.99,"4ftyh":"5AA"', '\\|\\|"','')) as mymap
)s
结果:
3dtyu 3tyi
4gg 34.98
【讨论】:
我收到您提供的演示的语法错误。错误:ParseException:第 7 行中的语法错误:未定义:选择 mymap['3Dtyu'] 作为3Dtyu
,^ 遇到:[ 预期:AND、AS、BETWEEN、DEFAULT、DIV、FROM、ILIKE、IN、IREGEXP、IS , LIKE, LIMIT, NOT, OR, ORDER, REGEXP, RLIKE, UNION, COMMA, IDENTIFIER 引起:异常:语法错误
@AnukritiSingh 我在 Hive 上对其进行了测试。不幸的是,我没有 Impala 来测试它。尝试以不同的方式命名列。以上是关于get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Hive (get_json_object) 查询结构数组?
get_json_object() - 在 Impala 中解析 json 字符串 - 无法解析以数字开头的键