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

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

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

  1. id - string
  2. user_date - string

数据:

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

CAST(user_data as JSON) as user_data_json

  1. 然后:

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

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

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

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

ttp71kqs1#

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

  1. replace(user_data, '''', '"')

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

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

相关问题