我想根据来自两个不同表的列中的元素创建一个集合。对于第一张表table1
,我想根据第一列的值对第二列的元素进行分组。
SELECT Id, collect_set(lib) AS l FROM table1 WHERE (Id LIKE '%RT') GROUP BY ID
我得到这样的东西:
|Id|l|
|1RT|[ab,a1,b5,....]|
|xRT|[c5,g2,l1,....]|
对于第二张表,我想从给定的列中选择不同的元素(没有任何条件),并将它们与从table1
计算出的每个组合并。
SELECT collect_set(ind) AS d FROM table2
我得到:
|d|
|[xy, xz, e1 ,...]|
我想通过将d
组合到l
的每个输出来合并两个输出。我尝试以下代码:
SELECT Id, array(l,d) AS a from(SELECT Id, collect_set(lib) AS l FROM table1 WHERE (Id LIKE '%RT') GROUP BY ID) AS t1 cross join (SELECT collect_set(ind) AS d FROM table2) AS t2
但是我在一个数组中得到了两组:
|Id|a|
|1RT|[[ab,a1,b5,....],[xy, xz, e1 ,...]]|
|xRT|[[c5,g2,l1,....],[xy, xz, e1 ,...]]|
我想买一套;像这样的东西:
|Id|a|
|1RT|[ab,a1,b5,....,xy, xz, e1 ,...]|
|xRT|[c5,g2,l1,....,xy, xz, e1 ,...]|
我该怎么办? (我使用了collect_set但它不起作用)。
有什么想法吗?
答案 0 :(得分:0)
解决方案是使用砖房CombineUniqueUDAF
或CombineUDAF
:
他们还为download准备了一些预制罐。
然后创建临时函数并在查询中使用它(以及之前的ADD JAR命令,提供正确的jar名称):
ADD JAR /path/to/jar/brickhouse-<version number>.jar;
CREATE TEMPORARY FUNCTION combine_unique AS 'brickhouse.udf.collect.CombineUniqueUDAF';
SELECT Id, combine_unique(l,d) AS a
from(SELECT Id, collect_set(lib) AS l FROM table1 WHERE (Id LIKE '%RT') GROUP BY ID) AS t1
cross join (SELECT collect_set(ind) AS d FROM table2) AS t2