sql选择是否通过至少一个公共属性值与记录相交?

8yparm6h  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(351)

我有一个带有两个字段的表:

+-----+---------+
| id  | feature |
+-----+---------+
| x1  |  f1     |
| x1  |  f5     |
| x2  |  f3     |
| x3  |  f1     |
| x4  |  f5     |
| x4  |  f2     |
| x5  |  f3     |
| x6  |  f4     |
+-----+---------+

问题:
1) 如何写作 select 那将是一个群体 id 以相等的 feature -s、 像这样:s1={x1,x3},s2={x1,x4},s3={x2,x5},s4={x2,x5}
2) 如何写作 select 它将返回一组 id -是否至少与一个特征相交?怎么弄到这些东西?在这个例子中,结果应该是:s5={x1,x3,x4}和s6={x2,x5}
3) 了解支持一些基本sql子集的hadoop配置单元的查询格式也很好。

xlpyo6sf

xlpyo6sf1#

第二种最简单的方法可能是自连接,如果数据集不太大,这种方法是可行的

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子句以将输出减半。

ujv3wf0j

ujv3wf0j2#

对于问题1,请使用collect\u set或collect\u list自定义项。
(protip:一次一个问题对stackoverflow最有效。)

相关问题