AWS Athena json_从字符串字段提取查询返回空值
我在雅典娜有一张这样的桌子AWS Athena json_从字符串字段提取查询返回空值,json,amazon-s3,hive,amazon-athena,presto,Json,Amazon S3,Hive,Amazon Athena,Presto,我在雅典娜有一张这样的桌子 CREATE EXTERNAL TABLE `json_test`( `col0` string , `col1` string , `col2` string , `col3` string , `col4` string , ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( 'quoteChar
CREATE EXTERNAL TABLE `json_test`(
`col0` string ,
`col1` string ,
`col2` string ,
`col3` string ,
`col4` string ,
)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'quoteChar'='\"',
'separatorChar'='\;')
类似这样的Json字符串存储在“col4”中:
我正在尝试进行json_提取查询:
SELECT json_extract(col4 , '$.email') as email FROM "default"."json_test"
但是查询返回空值
任何帮助都将不胜感激。JSON需要使用双引号(
“
)来封装值
比较:
presto> SELECT json_extract('{"email": "test_email@test_email.com", "name": "Andrew"}' , '$.email');
_col0
-----------------------------
"test_email@test_email.com"
及
(注意:'
内部SQL varchar文字表示构造值中的单个'
,因此这里的文字与问题中的文字格式相同。)
如果字符串值是“带单引号的JSON”,您可以尝试使用修复它。问题是存储的JSON字符串的单引号字符
{'email': 'test_email@test_email.com', 'name': 'Andrew', 'surname': 'Test Test'}
更改为双引号
{"email": "test_email@test_email.com", "name": "Andrew", "surname": "Test Test"}
Athena查询正常工作:
SELECT json_extract(col4 , '$.email') as email FROM "default"."json_test"
json被引用了吗?我之所以问这个问题,是因为我看到opencsvserde解析了所有的数据,没有出现错误,当你从json_测试中选择col4时,你是否得到了你所期望的结果。json没有被引用。如果我从json_测试中选择*我得到了所有的行。如果你从json_测试中选择col4,你是否得到了包含json的col?我只知道提问,因为我刚刚运行了类似的程序,我遇到了一些问题。是的,你是对的,我确实从json_测试中选择了col4,我得到了json字符串请将@Piotr Findeisen答案标记为正确,因为他是第一个向你提供答案的人
{"email": "test_email@test_email.com", "name": "Andrew", "surname": "Test Test"}
SELECT json_extract(col4 , '$.email') as email FROM "default"."json_test"