检查 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>;