我有一个表,正在使用Presto SQL进行查询。我需要取消测试一个键值对列。键是一个字符串,值是一个数组。该数组的值是字符串键和int值的键值对。
数据结构看起来像这个
{"key1":[], "key2":[], "key3":[{"nestedKey1":1, "nestedKey2":36}]}
问题是";键3";在这种情况下,基于用户数据来改变值"键3";可能是我事先不知道的多个值之一。我不需要任何有空数组作为值的键,只需要有值的键。
假设您的数据实际上是json,您可以将其解析并处理为键值的map
(键将是varchar
,值可以是json的数组,或者如果需要更多处理,您可以尝试将其细化为array(map(varchar, integer))
(:
-- sample data
WITH dataset(data) AS (
values ('{"key1":[], "key2":[], "key3":[{"nestedKey1":1, "nestedKey2":36}]}')
)
-- query
select k, arr
from(
select cast(json_parse(data) as map(varchar, array(json))) as parsed
from dataset
),
unnest(parsed) as t(k, arr)
where cardinality(arr) > 0;
输出:
k | arr |
---|---|
键3 | [{"嵌套键1":1,"嵌套键2":36}] |