Snowflake ifnull和parse_json结合使用时无法正常工作

问题描述

这是我的查询

从表名中选择object_construct('id',id,alpha,PARSE_JSON(null)) 限制1

输出为{“ id”:1,“ alpha”:null}

但是当我将 parse_json ifnull 结合使用时,它会返回空对象 {} 不能正常工作

选择object_construct('id',IFNULL(id,(PARSE_JSON(null)),alpha, 表名限制1中的IFNULL(alpha,(PARSE_JSON(null)))

以上返回{}

但是我需要使用null值{“ id”:1,“ alpha”:null}

合并无法解决任何问题?

[问题已更新]

感谢Felipe Hoffa。

在您的答案中,最后一部分按预期方式工作。

SELECT OBJECT_CONSTRUCT('id',id,'alpha',IFNULL(alpha,PARSE_JSON('null')))
FROM (SELECT 1 id,null alpha)
# {"alpha": null,"id": 1}

但是当我尝试以下操作时,它不起作用

SELECT OBJECT_CONSTRUCT(
'id',PARSE_JSON('null'))
 ) 
FROM (SELECT id,alpha from tableName)
#{ "id" :1 }

在使用FROM查询时有效: FROM(SELECT 1 id,空alpha)

在使用我的FROM查询时不起作用: FROM(SELECT ID,来自tableName的字母)

希望已清除。

预先感谢

解决方法

这里的问题是问题的第一条陈述不正确。编码PARSE_JSON(null)时,null不表示:

SELECT OBJECT_CONSTRUCT('id',id,alpha,PARSE_JSON(null))
FROM (SELECT 1 id,null alpha)

# {"id": 1}

要解决此问题,您必须改为PARSE_JSON('null') -并引用变量名称:

SELECT OBJECT_CONSTRUCT('id','alpha',PARSE_JSON('null'))
FROM (SELECT 1 id,null alpha)

# {"alpha": null,"id": 1}

那看起来更好。解决此问题后,现在IF_NULL可以按需工作了:

SELECT OBJECT_CONSTRUCT('id',IFNULL(alpha,PARSE_JSON('null')))
FROM (SELECT 1 id,"id": 1}
,

我需要有空值 { "id" : 1,"alpha" : null }

您可以使用 OBJECT_CONSTRUCT_KEEP_NULL 而不是 OBJECT_CONSTRUCT

SELECT OBJECT_CONSTRUCT_KEEP_NULL('id',alpha) from tableName;

SELECT OBJECT_CONSTRUCT_KEEP_NULL(*) from (SELECT id,alpha from tableName) sub;