在athena查询中从字典字符串获取值

f8rj6qna  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(291)

我有一个包含以下两列的athena db表,我需要从“用户数据”中获取姓名、性别和年龄
结构:

id        - string
user_date - string

数据:

id   user_data                                                        
1    {'name': 'some_name', 'gender': 'male', 'age': '36'}
``` `user_data` 是字典字符串。通过将其强制转换为json来获取值:

CAST(user_data as JSON) as user_data_json

然后:

json_extract(user_data_json, '$.name') AS name

因为字典字符串是单引号 `CAST()` 失败。
还尝试用双引号替换单引号:

replace(user_data,'"',"'")

然后将其转换为json也失败了:
语法错误:行1:30:列“”无法解析*
如何获得这些值?
ttp71kqs

ttp71kqs1#

问题出在你的 replace() 功能;不能使用双引号而不是单引号来声明文本字符串-双引号表示标识符(如列名或表名),因此会出现错误。
要将嵌入的单引号替换为双引号,可以执行以下操作:

replace(user_data, '''', '"')

剩下的代码应该可以正常工作:

select 
    json_extract(user_data_json, '$.name')   as name,
    json_extract(user_data_json, '$.gender') as gender,
    json_extract(user_data_json, '$.age')    as age
from (select id, replace(user_data, '''', '"') user_data from mytable) t

相关问题