【问题标题】:How do I solve the Redshift error: "Missing data for not-null field"?如何解决 Redshift 错误:“非空字段缺少数据”?
【发布时间】:2023-03-12 03:14:02
【问题描述】:

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

trend
{"trend":0,"abs":0,"per":null}

我想查询并获取里面的值,所以我有一个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

问题出在最后一个字段 per,因为它已经是 null 我在 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

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

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:

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

     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') !=''
    

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

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-21
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      相关资源
      最近更新 更多