Pig JOIN 运算符
-
JOIN 运算符
在JOIN操作符是用来记录从两个或两个以上的关系结合起来。在执行联接操作时,我们将每个关系中的一个(或一组)元组声明为键。当这些键匹配时,两个特定的元组将匹配,否则记录将被删除。联接可以是以下类型-- Self-join
- Inner-join
- Outer-join − left join, right join, 和 full join
本章举例说明如何在Pig Latin中使用join运算符。假设我们在HDFS的/pig_data/目录中有两个文件,即customers.txt和orders.txt,如下所示。我们已将这两个文件与customers和orders的关系加载到Pig中,如下所示。现在让我们对这两个关系执行各种Join操作。 -
Self-join
Self-join 用于将表与其自身联接,就好像表是两个关系一样,临时重命名至少一个关系。通常,在Apache Pig中,要执行 Self-join,我们将使用不同的别名(名称)多次加载相同的数据。因此,让我们将文件customer.txt的内容加载为两个表,如下所示。句法下面给出的是使用JOIN运算符执行自联接操作的语法。例子让我们通过关联两个客户customers1和customers2来对关系客户执行自联接操作,如下所示。验证如下所示,使用DUMP运算符验证关系customers3。输出它将产生以下输出,显示关系客户的内容。 -
Inner-join
Inner-join的使用非常频繁;它也称为Equijoin。当两个表中都匹配时,Inner-join将返回行。它通过基于Join谓词组合两个关系(例如A和B)的列值来创建新关系。该查询将A的每一行与B的每一行进行比较,以找到满足Join谓词的所有行对。当满足连接谓词时,A和B的每个匹配行对的列值将合并为结果行。句法这是使用JOIN运算符执行内部联接操作的语法。例子让我们对两个关系客户和订单执行内部联接操作,如下所示。验证如下所示,使用DUMP运算符验证关系coustomer_orders。输出您将获得以下输出,该输出将包含名为coustomer_orders的关系的内容。注意-Outer Join:与Inner Join 不同,Outer Join 返回至少一个关系中的所有行。Outer Join 操作以三种方式执行-
- Left outer join
- Right outer join
- Full outer join
-
Left outer join
在LEFT OUTER JOIN操作返回左表中所有行,即使是在右表中的关系不匹配。句法下面给出的是使用JOIN运算符执行LEFT OUTER JOIN操作的语法。例让我们对两个关系客户和订单执行左外部联接操作,如下所示。验证如下所示,使用DUMP运算符验证关系external_left。输出量它将产生以下输出,显示关系external_left的内容。 -
Right outer join
在Right outer join返回的所有行右表中,即使有左表中的不匹配。句法下面给出的是使用JOIN运算符执行右外部联接操作的语法。例让我们对两个客户和订单执行正确的外部联接操作,如下所示。验证如下所示,使用DUMP运算符验证关系external_right。输出它将产生以下输出,显示关系external_right的内容。 -
Full outer join
当其中一种关系匹配时,Full outer join操作将返回行。句法下面给出的是使用JOIN运算符执行完全外部联接的语法。例让我们对两个关系客户和订单执行完全外部联接操作,如下所示。验证如下所示,使用DUMP运算符验证关系external_full。输出它将产生以下输出,显示关系external_full的内容。 -
使用多个键
我们可以使用多个键执行JOIN操作。句法这是您可以使用多个键在两个表上执行JOIN操作的方法。假设我们在HDFS的/pig_data/目录中有两个文件,即employee.txt和employee_contact.txt,如下所示。并且我们已将这两个文件通过关系employee和employee_contact加载到Pig中,如下所示。现在,让我们使用JOIN运算符连接这两个关系的内容,如下所示。验证如下所示,使用DUMP运算符验证关系emp。输出它将产生以下输出,显示名为emp的关系的内容,如下所示。