检查 Snowflake 变体中是否存在密钥
Checking if a key exists in a Snowflake variant
是否有检查 Snowflake 变体字段中是否存在键的函数?
您可以使用IS_NULL_VALUE查看密钥是否存在。如果键不存在,则结果将为 NULL。如果键存在,如果值为 JSON null,则结果将为 TRUE;如果存在非 null JSON 值,则结果将为 FALSE:
select parse_json('{hello: NULL, world: 123}') as V,
V:hello,
V:world,
IS_NULL_VALUE(v:hello),
IS_NULL_VALUE(v:world),
IS_NULL_VALUE(v:goodbye),
IFF(IS_NULL_VALUE(v:non_existing_key) is null, 'Key does not exist', 'Key exists'),
IFF(IS_NULL_VALUE(v:hello) is null, 'Key does not exist', 'Key exists'),
IFF(IS_NULL_VALUE(v:world) is null, 'Key does not exist', 'Key exists')
;
如果您正在寻找一种在可能很复杂的嵌套 JSON 结构中查找属性的方法,您可以 运行 像这样:
SELECT COUNT(*)
FROM x
,LATERAL FLATTEN(parse_json(x.var), recursive => True) x2
WHERE x2.key = 'test';
这会将整个结构展平,并为您提供 JSON 中任何级别的所有可用键。如果计数为 0,则它不存在。如果 运行 是直线 select,而不是 COUNT(*),它也会向您显示值,并且您可以确定属性在嵌套中的位置。
你可以简单地使用OBJECT_KEYS函数的组合,它输出一个仅包含Variant&ARRAY_CONTAINS函数中现有键的数组到return布尔值。见下文。
SELECT ARRAY_CONTAINS('<key_to_search_for>'::VARIANT, OBJECT_KEYS(<variant_column>))
FROM <table_name>;
是否有检查 Snowflake 变体字段中是否存在键的函数?
您可以使用IS_NULL_VALUE查看密钥是否存在。如果键不存在,则结果将为 NULL。如果键存在,如果值为 JSON null,则结果将为 TRUE;如果存在非 null JSON 值,则结果将为 FALSE:
select parse_json('{hello: NULL, world: 123}') as V,
V:hello,
V:world,
IS_NULL_VALUE(v:hello),
IS_NULL_VALUE(v:world),
IS_NULL_VALUE(v:goodbye),
IFF(IS_NULL_VALUE(v:non_existing_key) is null, 'Key does not exist', 'Key exists'),
IFF(IS_NULL_VALUE(v:hello) is null, 'Key does not exist', 'Key exists'),
IFF(IS_NULL_VALUE(v:world) is null, 'Key does not exist', 'Key exists')
;
如果您正在寻找一种在可能很复杂的嵌套 JSON 结构中查找属性的方法,您可以 运行 像这样:
SELECT COUNT(*)
FROM x
,LATERAL FLATTEN(parse_json(x.var), recursive => True) x2
WHERE x2.key = 'test';
这会将整个结构展平,并为您提供 JSON 中任何级别的所有可用键。如果计数为 0,则它不存在。如果 运行 是直线 select,而不是 COUNT(*),它也会向您显示值,并且您可以确定属性在嵌套中的位置。
你可以简单地使用OBJECT_KEYS函数的组合,它输出一个仅包含Variant&ARRAY_CONTAINS函数中现有键的数组到return布尔值。见下文。
SELECT ARRAY_CONTAINS('<key_to_search_for>'::VARIANT, OBJECT_KEYS(<variant_column>))
FROM <table_name>;