从 Athena 查询中的字典字符串中获取值

Get value from a dictionary string in Athena query

我有一个 Athena DB table,其中包含以下两列,我需要从 'user_data'

中获取姓名、性别和年龄

结构:

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 也失败了:

SYNTAX_ERROR: line 1:30: Column ''' cannot be resolved*

如何获取这些值?

问题出在您的 replace() 函数上;您不能使用双引号而不是单引号来声明文字字符串 - 双引号代表标识符(例如列名或 table 名称),因此会出现错误。

要用双引号替换嵌入的单引号,您可以这样做:

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