我想从来自两个不同表的列中的元素创建一个集合。第一张table 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 ,...]|
我该怎么办(我用了一套,但它不工作)。
有什么想法吗?
1条答案
按热度按时间fxnxkyjh1#
解决的办法是用砖房
CombineUniqueUDAF
或者CombineUDAF
:从复制(或分叉)回购https://github.com/klout/brickhouse
从命令行运行“mvn package”。
将jar“target/brickhouse-.jar”添加到您的配置单元\u aux\u jars\u文件\u路径中,或者使用“add jar”命令从配置单元cli将其添加到分布式缓存中。
他们也有一些预建的jar供下载。
然后创建临时函数并在查询中使用它(与前面的addjar命令一起,提供正确的jar名称):