从 hive 中的字符串中获取特定值

Posted

技术标签:

【中文标题】从 hive 中的字符串中获取特定值【英文标题】:Get particular values from a string in hive 【发布时间】:2019-05-22 22:55:51 【问题描述】:

我有一个蜂巢表,两列都是字符串

name            details
"john" , "addr":"NY","phone":"1234"
"john" , "addr":"CA", "phone":"7145"
"mary" , "addr":"BOS","phone":"1234"  

有没有办法将字符串列转换为 JSON 排序以通过键访问值。 例如,如果我运行查询

SELECT name, details['addr'] , details['phone'] FROM table_a;

我应该得到 约翰,纽约,1234 加利福尼亚州约翰,7145 玛丽,BOS,1234

【问题讨论】:

【参考方案1】:

您可以使用get_json_object,然后从字符串中访问addrphone

hive>  with cte as (
        select string('"john"')col1,
               string('"addr":"NY","phone":"1234"')col2)
        select regexp_replace(col1,"\"","")col1,get_json_object(col2,'$.addr')col2 
        from cte;

Result:

col1    col2
john    NY

要转义引号,我们还可以使用带有引号字符的 csv serde,如 here 所述。

【讨论】:

【参考方案2】:

另一种使用str_to_map的方法:

select name, details_map['addr'] as addr , details_map['phone'] as phone
from 
(
select name, str_to_map(regexp_replace(details,'\\|\\| ?\\"','')) as details_map
from your_table
)s;

【讨论】:

以上是关于从 hive 中的字符串中获取特定值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的 xml 字符串中获取特定值

HIVE 输出特定字符串

Hive 从 json 行中选择一个特定的字符串

hive中的字符串提取

如何从 json 数组中获取 hive 中的字符串列表

如何在 Android Studio 中使用 Kotlin 从 Firebase 中的数据库中获取特定值?