来自字符串字段的 AWS Athena json_extract 查询返回空值

Fer*_*Byn 4 json hive amazon-s3 presto amazon-athena

我在雅典娜有一张这种结构的桌子

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'='\;') 
Run Code Online (Sandbox Code Playgroud)

像这样的 Json 字符串存储在“col4”中:

{'email': 'test_email@test_email.com', 'name': 'Andrew', 'surname': 'Test Test'}
Run Code Online (Sandbox Code Playgroud)

我正在尝试进行 json_extract 查询:

SELECT json_extract(col4 , '$.email') as email FROM "default"."json_test"
Run Code Online (Sandbox Code Playgroud)

但查询返回空值。

任何帮助,将不胜感激。

Pio*_*sen 5

JSON 需要使用双引号 ( ") 来封闭值。

相比:

presto> SELECT json_extract('{"email": "test_email@test_email.com", "name": "Andrew"}' , '$.email');
            _col0
-----------------------------
 "test_email@test_email.com"
Run Code Online (Sandbox Code Playgroud)

presto> SELECT json_extract('{''email'': ''test_email@test_email.com'', ''name'': ''Andrew''}', '$.email');
 _col0
-------
 NULL
Run Code Online (Sandbox Code Playgroud)

(注意:''在 SQL 内部 varchar 文字表示'构造值中的单个,因此这里的文字与问题中的格式相同。)

如果您的字符串值是“带单引号的 JSON”,您可以尝试修复它 replace(string, search, replace) ? varchar