我们有一个配置单元表,有三个不同的ID,都是可选的。在每一行中,必须至少提供三个ID中的一个。如果提供了多个id,这将在多个id之间建立等价关系。
我们需要为每一行分配一个唯一的主id,基于在任何一行中建立的等价关系。例如:
Line id1 id2 id3 masterID
--------------------------------------
(1) A1 M1
(2) A2 M1
(3) A3 M1
(4) A1 A2 M1
(5) A2 A3 M1
(6) B1 A2 M1
(7) C1 C3 M2
因为在第4行,a1和a2都存在,我们知道这些id是等价的。
同样,在第5行,a2和a3都存在,我们知道这些ID也是等价的。
同样在第6行,我们有b1和a2,所以它们也是等价的。
在第7行,我们得到了c1和c3之间的等价关系。
鉴于上述信息,a1、a2、a3和b1都是等效的。因此,包含这些id中任何一个的所有行都必须被分配相同的主id,因此我们给了它们相同的主id(“m1”)。第7行自己接收一个唯一的id(“m2”),因为它的两个id都不匹配任何其他id。
我们如何用这种方式编写配置单元查询来分配主ID?如果hive不是实现这一点的最佳工具,您能否建议使用hadoop生态系统中的其他工具为这些行分配主id?
1条答案
按热度按时间gz5pxeao1#
可以通过将ID表示为顶点并查找连接的组件来解决此问题。关于这个想法的更多信息,请参见第3.5节。让
init_table
这是你的table。首先,建立一个链接表接下来,为每个链接生成一些编号,例如行编号并执行传播:
然后将您的ID与匹配的表连接起来:
如果有些ID没有耦合,那么就不难找出是哪个ID。希望这有帮助。