如何检查snowflake中的空JSON



我有json如下在一个变量列(payload)在snowflake表

{
"Input1": {
"address": "",
"phone": "123-345-6789",
"city": "",
"class": "",
"name": "test",
"no_call": true,
"state": "",
"zip": ""
},
"Input2": {    
"person": {}
}
}

当我的person dict在input2中为空时,我需要获取input1值并构建我的新json对象。我写的代码如下:

代码片段:

query="""
select case when payload:Input2:person::variant !='{}'
then constrcut my object with Input2 values
else constrcut my object with Input1 values end as person_details from {sf_schema}.{sf_table}
""".format_map(conn_dict)
cs.execute(query);

这是我在snowflake中执行查询的python代码。但是我得到了低于error

的值
ValueError: Format string contains positional fields

我的conn_dict有sf_schema和sf_table的值。这种说法存在问题。它正在考虑{}作为位置参数,因为我正在检查它是否为空字典。

payload:Input2:person::variant !='{}'

我试着转义这些字符,但是没有成功。你能帮我们解决这个问题吗?

不确定Python代码,但在Snowflake SQL中,您可以检查person 2是否为空对象,如下所示:

create or replace table t1 as select parse_json($$
{
"Input1": {
"address": "",
"phone": "123-345-6789",
"city": "",
"class": "",
"name": "test",
"no_call": true,
"state": "",
"zip": ""
},
"Input2": {    
"person": {}
}
}$$) as v;
select v:Input2:person = parse_json('{}') as PERSON_MISSING from t1;

实际上,它看起来好像是为了比较而被字符串化的,所以甚至没有必要使用parse_json。如果Python代码在单引号上挂起,您可以尝试使用替代字符串终止符,如:

select v:Input2:person = $${}$$ as PERSON_2_MISSING from t1;

基于@Greg Pavlik示例数据集,您还可以通过将其与空object_construct()进行比较来检查是否存在空对象。

select 
v:Input2:person = parse_json('{}') as person_missing,
v:Input2:person = object_construct() as person_missing_too
from t1;

最新更新