在 Snowflake 中查询列表
Querying List in Snowflake
我在 Snowflake
中有一个像下面这样的 table
+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|attrs |options |
+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|acct |[{"key":"spencer","val":"spencer"},{"key":"mart","val":"mart"},{"key":"red-fin","val":"-"}] |
|fav_activity |[{"key":"movie","val":"movie"},{"key":"books","val":"books"},{"key":"music","val":"music"},{"key":"swimming","val":"swimming"},{"key":"games","val":"games"},{"key":"team","val":"team"},{"key":"food","val":"food"},{"key":"steam-room","val":"\"steam room\""},{"key":"hiking","val":"hiking"}] |
+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
现在我需要比较字典列表中的每个键和 val 以及 return 字典中唯一 key/val 不同的键。
例如,查看属性 acct
- 列表中有 3 个词典。前两个字典的键和值相同,但第三个字典具有不同的 key/val 值。所以我需要 return 第三个字典的键 red-fin
预期输出:
+---------------+------------+
|attrs |result |
+---------------+------------+
|acct |red-fin |
|fav_activity |steam-room |
+---------------+------------+
谁能帮我在 Snowflake 中做这个。
提前致谢。
你只需要展平比较即可。
这解决了示例测试用例:
with data as (
select attrs, parse_json() options
from values ('acct', '[{"key":"spencer","val":"spencer"},{"key":"mart","val":"mart"},{"key":"red-fin","val":"-"}]')
, ('fav_activity', '[{"key":"movie","val":"movie"},{"key":"books","val":"books"},{"key":"music","val":"music"},{"key":"swimming","val":"swimming"},{"key":"games","val":"games"},{"key":"team","val":"team"},{"key":"food","val":"food"},{"key":"steam-room","val":"\"steam room\""},{"key":"hiking","val":"hiking"}]')
)
select attrs, k.value:key
from data, table(flatten(options)) k
where k.value:key!=k.value:val
;
我在 Snowflake
中有一个像下面这样的 table+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|attrs |options |
+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|acct |[{"key":"spencer","val":"spencer"},{"key":"mart","val":"mart"},{"key":"red-fin","val":"-"}] |
|fav_activity |[{"key":"movie","val":"movie"},{"key":"books","val":"books"},{"key":"music","val":"music"},{"key":"swimming","val":"swimming"},{"key":"games","val":"games"},{"key":"team","val":"team"},{"key":"food","val":"food"},{"key":"steam-room","val":"\"steam room\""},{"key":"hiking","val":"hiking"}] |
+---------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
现在我需要比较字典列表中的每个键和 val 以及 return 字典中唯一 key/val 不同的键。
例如,查看属性 acct
- 列表中有 3 个词典。前两个字典的键和值相同,但第三个字典具有不同的 key/val 值。所以我需要 return 第三个字典的键 red-fin
预期输出:
+---------------+------------+
|attrs |result |
+---------------+------------+
|acct |red-fin |
|fav_activity |steam-room |
+---------------+------------+
谁能帮我在 Snowflake 中做这个。
提前致谢。
你只需要展平比较即可。
这解决了示例测试用例:
with data as (
select attrs, parse_json() options
from values ('acct', '[{"key":"spencer","val":"spencer"},{"key":"mart","val":"mart"},{"key":"red-fin","val":"-"}]')
, ('fav_activity', '[{"key":"movie","val":"movie"},{"key":"books","val":"books"},{"key":"music","val":"music"},{"key":"swimming","val":"swimming"},{"key":"games","val":"games"},{"key":"team","val":"team"},{"key":"food","val":"food"},{"key":"steam-room","val":"\"steam room\""},{"key":"hiking","val":"hiking"}]')
)
select attrs, k.value:key
from data, table(flatten(options)) k
where k.value:key!=k.value:val
;