Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AWS Athena json_从字符串字段提取查询返回空值_Json_Amazon S3_Hive_Amazon Athena_Presto - Fatal编程技术网

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"