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