Arrays 如何从配置单元中的两个集合创建集合
我想从来自两个不同表的列中的元素创建一个集合。对于第一个表table1,我想根据第一列的值对第二列的元素进行分组Arrays 如何从配置单元中的两个集合创建集合,arrays,hive,set,hiveql,Arrays,Hive,Set,Hiveql,我想从来自两个不同表的列中的元素创建一个集合。对于第一个表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,....]| |Id|a| |1RT|[ab,a1,b5,....,xy,
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,....]|
|Id|a|
|1RT|[ab,a1,b5,....,xy, xz, e1 ,...]|
|xRT|[c5,g2,l1,....,xy, xz, e1 ,...]|
对于第二个表,我希望不带任何条件地从给定列中选择不同的元素,并将它们与根据表1计算的每个组合并
我得到:
|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|l|
|1RT|[ab,a1,b5,....]|
|xRT|[c5,g2,l1,....]|
|Id|a|
|1RT|[ab,a1,b5,....,xy, xz, e1 ,...]|
|xRT|[c5,g2,l1,....,xy, xz, e1 ,...]|
我该怎么办?我用过collect_set,但它不工作
有什么想法吗?解决方案是使用砖砌的CombineUniqueUDAF或CombineUDAF: 从中克隆或派生回购协议 从命令行运行mvn包。 将jar目标/brickhouse-.jar添加到 配置单元\u辅助\u JARS\u文件\u路径,或将其从 带有addjar命令的配置单元CLI。 此外,他们还有一些预先制作的罐子,以备不时之需 然后创建临时函数并在查询中与前面的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