Apache Pig – operador de conexión

EN UNIRSE El operador se utiliza para combinar registros de dos o más relaciones. Al realizar una operación de unión, declaramos una (o grupo) de tuplas de cada relación como claves. Cuando estas claves coinciden, dos tuplas específicas coinciden; de lo contrario, las entradas se eliminan. Las conexiones pueden ser de los siguientes tipos:

  • Auto-unirse
  • Conexión interna
  • Combinación externa: combinación izquierda, combinación derecha y combinación completa

Este capítulo explica con ejemplos cómo utilizar el operador de combinación en Pig Latin. Supongamos que tenemos dos archivos, a saber clientes.txt y orders.txt en / pig_data / Directorio HDFS como se muestra a continuación.

clientes.txt

1,Ramesh,32,Ahmedabad,2000.00
2,Khilan,25,Delhi,1500.00
3,kaushik,23,Kota,2000.00
4,Chaitali,25,Mumbai,6500.00 
5,Hardik,27,Bhopal,8500.00
6,Komal,22,MP,4500.00
7,Muffy,24,Indore,10000.00

orders.txt

102,2009-10-08 00:00:00,3,3000
100,2009-10-08 00:00:00,3,1500
101,2009-11-20 00:00:00,2,1560
103,2008-05-20 00:00:00,4,2060

Y cargamos estos dos archivos en Pig con relaciones clientela y pedidos Como se muestra abajo.

grunt> customers = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int);
  
grunt> orders = LOAD 'hdfs://localhost:9000/pig_data/orders.txt' USING PigStorage(',')
   as (oid:int, date:chararray, customer_id:int, amount:int);

Realicemos ahora varias operaciones de combinación en estas dos relaciones.

Por ti mismo Р̼nete

Auto-unirse se utiliza para unir una tabla consigo misma como si fueran dos relaciones, cambiando temporalmente el nombre de al menos una relación.

Como regla general, en Apache Pig cargamos los mismos datos varias veces bajo diferentes alias (nombres) para realizar la auto-conexión. Por tanto, carguemos el contenido del archivo clientes.txt en forma de dos tablas, como se muestra a continuación.

grunt> customers1 = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int);
  
grunt> customers2 = LOAD 'hdfs://localhost:9000/pig_data/customers.txt' USING PigStorage(',')
   as (id:int, name:chararray, age:int, address:chararray, salary:int); 

Sintaxis

A continuación se muestra la sintaxis de ejecución auto-afiliación operación usando UNIRSE operador.

grunt> Relation3_name = JOIN Relation1_name BY key, Relation2_name BY key ;

Ejemplo

Hagamos auto-afiliación operación en clientelacombinando las dos relaciones clientes1 y clientes2 Como se muestra abajo.

grunt> customers3 = JOIN customers1 BY id, customers2 BY id;

Controlar

Verifica la conexión clientes3 usando DUMP operador como se muestra a continuación.

grunt> Dump customers3;

Salida

Producirá el siguiente resultado mostrando el contenido de la relación clientela

(1,Ramesh,32,Ahmedabad,2000,1,Ramesh,32,Ahmedabad,2000)
(2,Khilan,25,Delhi,1500,2,Khilan,25,Delhi,1500)
(3,kaushik,23,Kota,2000,3,kaushik,23,Kota,2000)
(4,Chaitali,25,Mumbai,6500,4,Chaitali,25,Mumbai,6500)
(5,Hardik,27,Bhopal,8500,5,Hardik,27,Bhopal,8500)
(6,Komal,22,MP,4500,6,Komal,22,MP,4500)
(7,Muffy,24,Indore,10000,7,Muffy,24,Indore,10000)

Conexión interna

Conexión interna utilizado con bastante frecuencia; esto también se conoce como Equijoin… Una combinación interna devuelve filas si hay una coincidencia en ambas tablas.

Crea una nueva relación combinando los valores de columna de dos relaciones (digamos A y B) basándose en un predicado de unión. La consulta compara cada fila de A con cada fila de B para encontrar todos los pares de filas que satisfacen el predicado de combinación. Cuando se satisface el predicado de unión, los valores de columna para cada par coincidente de filas A y B se concatenan en una fila de resultados.

Sintaxis

Aquí está la sintaxis de ejecución conexión interna operación usando UNIRSE operador.

grunt> result = JOIN relation1 BY columnname, relation2 BY columnname;

Ejemplo

Hagamos conexión interna operación en dos relaciones clientela y pedidos Como se muestra abajo.

grunt> coustomer_orders = JOIN customers BY id, orders BY customer_id;

Controlar

Verifica la conexión coustomer_orders usando DUMP operador como se muestra a continuación.

grunt> Dump coustomer_orders;

Salida

Recibirá el siguiente resultado que contendrá el contenido de la relación denominada coustomer_orders

(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)

Nota

Conexión externa: A diferencia de una conexión interna, unión externa devuelve todas las filas de al menos una relación. La operación de combinación externa se realiza de tres formas:

  • Izquierda combinación externa
  • Unión exterior derecha
  • Unión externa completa

Izquierda combinación externa

EN izquierda combinación externa la operación devuelve todas las filas de la tabla de la izquierda, incluso si no hay coincidencia en la relación de la derecha.

Sintaxis

A continuación se muestra la sintaxis de ejecución izquierda combinación externa operación usando UNIRSE operador.

grunt> Relation3_name = JOIN Relation1_name BY id LEFT OUTER, Relation2_name BY customer_id;

Ejemplo

Realicemos una operación de unión externa izquierda en dos relaciones de cliente y pedido como se muestra a continuación.

grunt> outer_left = JOIN customers BY id LEFT OUTER, orders BY customer_id;

Controlar

Verifica la conexión external_left usando DUMP operador como se muestra a continuación.

grunt> Dump outer_left;

Salida

Producirá el siguiente resultado mostrando el contenido de la relación external_left

(1,Ramesh,32,Ahmedabad,2000,,,,)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,,,,)
(6,Komal,22,MP,4500,,,,)
(7,Muffy,24,Indore,10000,,,,) 

Unión exterior derecha

EN unión externa derecha la operación devuelve todas las filas de la tabla de la derecha, incluso si no hay ninguna coincidencia en la tabla de la izquierda.

Sintaxis

A continuación se muestra la sintaxis de ejecución unión externa derecha operación usando UNIRSE operador.

grunt> outer_right = JOIN customers BY id RIGHT, orders BY customer_id;

Ejemplo

Hagamos unión externa derecha operación en dos relaciones clientela y pedidos Como se muestra abajo.

grunt> outer_right = JOIN customers BY id RIGHT, orders BY customer_id;

Controlar

Verifica la conexión external_right usando DUMP operador como se muestra a continuación.

grunt> Dump outer_right

Salida

Producirá el siguiente resultado mostrando el contenido de la relación external_right

(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)

Unión externa completa

EN unión externa completa la operación devuelve filas cuando hay una coincidencia en una de las relaciones.

Sintaxis

A continuación se muestra la sintaxis de ejecución unión externa completa usando UNIRSE operador.

grunt> outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;

Ejemplo

Hagamos unión externa completa operación en dos relaciones clientela y pedidos Como se muestra abajo.

grunt> outer_full = JOIN customers BY id FULL OUTER, orders BY customer_id;

Controlar

Verifica la conexión external_full usando DUMP operador como se muestra a continuación.

grun> Dump outer_full; 

Salida

Producirá el siguiente resultado mostrando el contenido de la relación external_full

(1,Ramesh,32,Ahmedabad,2000,,,,)
(2,Khilan,25,Delhi,1500,101,2009-11-20 00:00:00,2,1560)
(3,kaushik,23,Kota,2000,100,2009-10-08 00:00:00,3,1500)
(3,kaushik,23,Kota,2000,102,2009-10-08 00:00:00,3,3000)
(4,Chaitali,25,Mumbai,6500,103,2008-05-20 00:00:00,4,2060)
(5,Hardik,27,Bhopal,8500,,,,)
(6,Komal,22,MP,4500,,,,)
(7,Muffy,24,Indore,10000,,,,)

Usando múltiples claves

Podemos realizar la operación JOIN usando múltiples claves.

Sintaxis

Así es como puede UNIR dos tablas usando múltiples claves.

grunt> Relation3_name = JOIN Relation2_name BY (key1, key2), Relation3_name BY (key1, key2);

Supongamos que tenemos dos archivos, a saber employee.txt y employee_contact.txt en / pig_data / Directorio HDFS como se muestra a continuación.

employee.txt

001,Rajiv,Reddy,21,programmer,003
002,siddarth,Battacharya,22,programmer,003
003,Rajesh,Khanna,22,programmer,003
004,Preethi,Agarwal,21,programmer,003
005,Trupthi,Mohanthy,23,programmer,003
006,Archana,Mishra,23,programmer,003
007,Komal,Nayak,24,teamlead,002
008,Bharathi,Nambiayar,24,manager,001

employee_contact.txt

001,9848022337,[email protected],Hyderabad,003
002,9848022338,[email protected],Kolkata,003
003,9848022339,[email protected],Delhi,003
004,9848022330,[email protected],Pune,003
005,9848022336,[email protected],Bhuwaneshwar,003
006,9848022335,[email protected],Chennai,003
007,9848022334,[email protected],trivendram,002
008,9848022333,[email protected],Chennai,001

Y cargamos estos dos archivos en Pig con relaciones empleado y empleado_contacto Como se muestra abajo.

grunt> employee = LOAD 'hdfs://localhost:9000/pig_data/employee.txt' USING PigStorage(',')
   as (id:int, firstname:chararray, lastname:chararray, age:int, designation:chararray, jobid:int);
  
grunt> employee_contact = LOAD 'hdfs://localhost:9000/pig_data/employee_contact.txt' USING PigStorage(',') 
   as (id:int, phone:chararray, email:chararray, city:chararray, jobid:int);

Ahora concatenamos el contenido de estas dos relaciones usando UNIRSE operador como se muestra a continuación.

grunt> emp = JOIN employee BY (id,jobid), employee_contact BY (id,jobid);

Controlar

Verifica la conexión emp usando DUMP operador como se muestra a continuación.

grunt> Dump emp; 

Salida

Producirá el siguiente resultado mostrando el contenido de la relación denominada emp Como se muestra abajo.

(1,Rajiv,Reddy,21,programmer,113,1,9848022337,[email protected],Hyderabad,113)
(2,siddarth,Battacharya,22,programmer,113,2,9848022338,[email protected],Kolka ta,113)  
(3,Rajesh,Khanna,22,programmer,113,3,9848022339,[email protected],Delhi,113)  
(4,Preethi,Agarwal,21,programmer,113,4,9848022330,[email protected],Pune,113)  
(5,Trupthi,Mohanthy,23,programmer,113,5,9848022336,[email protected],Bhuwaneshw ar,113)  
(6,Archana,Mishra,23,programmer,113,6,9848022335,[email protected],Chennai,113)  
(7,Komal,Nayak,24,teamlead,112,7,9848022334,[email protected],trivendram,112)  
(8,Bharathi,Nambiayar,24,manager,111,8,9848022333,[email protected],Chennai,111)

🚫