我有一个包含两个字段的表:
+-----+---------+
| id | feature |
+-----+---------+
| x1 | f1 |
| x1 | f5 |
| x2 | f3 |
| x3 | f1 |
| x4 | f5 |
| x4 | f2 |
| x5 | f3 |
| x6 | f4 |
+-----+---------+
问题:
1)如何编写将select
分组为id
- s的集合的feature
,如下所示:S1 = {x1,x3},S2 = {x1,x4 },S3 = {x2,x5},S4 = {x2,x5}
2)如何编写select
将返回一个所有id
- s至少相交一个特征的集合?如何获得所有这些设置?在此示例中,结果应为:S5 = {x1,x3,x4},S6 = {x2,x5}
3)了解支持一些基本SQL子集的Hadoop Hive的查询格式也很棒。
答案 0 :(得分:0)
对于问题1,请使用collect_set或collect_list UDF。
(Protip:一次一个问题在StackOverflow上效果最好。)
答案 1 :(得分:0)
最简单的第二种方法可能是自连接,如果数据集不是太大,这是可行的
SELECT t1.id, t2.id, collect_set( feature ) features
FROM
( SELECT id, feature FROM mytable ) t1
JOIN
( SELECT id, feature FROM mytable ) t2
ON
( t1.feature = t2.feature )
WHERE
t1.id < t2. id
GROUP BY t1.id, t2.id;
请务必使用where子句将输出减半。