presto:将数组转换为行?

use*_*479 6 pivot distinct presto

我有一个包含数组列 all_available_tags 和used_tags 的表。

example row1: 
all_available_tags:A,B,C,D
used_tags:A,B

example row2: 
all_available_tags:B,C,D,E,F
used_tags:F
Run Code Online (Sandbox Code Playgroud)

我想从所有行中获取不同的 all_available_tags 集,并执行除所有行中的所有used_tags 集之外的操作。从上面的示例中,所有行的 all_available_tags 将为 A、B、C、D、E、F,所有used_tags 将为 A、B、F。我正在寻找的最终结果是C,D,E

我认为我需要以某种方式旋转表格,但可能有数百个不同的标签,因此列出每个标签是不切实际的。有没有好的方法可以做到这一点?

Nee*_*wal 2

你可以试试:

with tags(at, ut) as
( 
select "A,B,C,D", "A,B"
union all
select "B,C,D,E,F", "F"
)
select splitat
from tags
cross join unnest(split(at, ",")) as t1 splitat
except
select splitut
from tags
cross join unnest(split(ut, ",")) as t2 splitut
Run Code Online (Sandbox Code Playgroud)