如何解决 Redshift 错误:“非空字段缺少数据”?

Nas*_*lla 7 sql amazon-redshift

我有一个嵌套的 JSON 字段,如下所示:

trend
{"trend":0,"abs":0,"per":null}
Run Code Online (Sandbox Code Playgroud)

我想查询并获取里面的值,所以我有一个 case 语句来获取值:

select
(CASE WHEN trend like '%"trend"%' THEN json_extract_path_text(trend, 'trend') ELSE NULL END)::SMALLINT,
(CASE WHEN trend like '%"abs"%' THEN json_extract_path_text(trend, 'abs') ELSE NULL END)::INTEGER,
(CASE WHEN trend like '%"per"%' THEN json_extract_path_text(trend, 'per') ELSE NULL END)::DOUBLE PRECISION
from staging_raw.table
Run Code Online (Sandbox Code Playgroud)

问题出在最后一个字段中per,因为null我已经在 Redshift 中收到此错误消息:

Redshift 错误:非空字段缺少数据

我尝试使用该子句:

(CASE WHEN trend like '%"per"%' and json_extract_path_text(trend, 'per') is not NULL THEN json_extract_path_text(trend, 'per')  ELSE NULL END)::DOUBLE PRECISION
Run Code Online (Sandbox Code Playgroud)

但我仍然遇到同样的错误。如果来源是这样的,如何解决?

Nas*_*lla 6

我是这样解决这个问题的:

 and json_extract_path_text(trend, 'p(CASE WHEN trend like '%"per"%' and json_extract_path_text(trend, 'per') !='' THEN json_extract_path_text(trend, 'per')  ELSE NULL END)::DOUBLE PRECISION
er') !=''
Run Code Online (Sandbox Code Playgroud)

这之所以有效,是因为json_extract_path_text(trend, 'per')它不是一个NULL值,而只是一个空值!