tutorial script pig funciona como apache-pig

apache-pig - script - pig latin apache pig



cerdo-¿cómo hacer referencia a las columnas en una FOREACH después de un JOIN? (2)

@nweiler: si conoce el primer y último campo de la relación A, puede escribir algo como a continuación:

D = FOREACH C GENERATE A::FirstCol..A:LastCol ;

Esto le dará todas las columnas entre FirstCol y LastCol.

A = load ''a.txt'' as (id, a1); B = load ''b.txt as (id, b1); C = join A by id, B by id; D = foreach C generate id,a1,b1; dump D;

4ta línea falla en: Invalid field projection. Projected field [id] does not exist in schema Invalid field projection. Projected field [id] does not exist in schema

Intenté cambiar a A.id pero la última línea falla: ERROR 0: Scalar has more than one row in the output.


Lo que está buscando es el "Operador Desambiguar" . Lo que quieres es A::id , no A.id

A.id dice "hay una relación / bolsa A y hay una columna llamada id en su esquema"

A::id dice "hay un registro de A y tiene una columna llamada id "

Entonces, harías:

A = load ''a.txt'' as (id, a1); B = load ''b.txt as (id, b1); C = join A by id, B by id; D = foreach C generate A::id,a1,b1; dump D;

Una alternativa sucia:

Solo porque soy perezoso, y la desambiguación se vuelve realmente extraña cuando empiezas a hacer varias combinaciones una tras otra: usa identificadores únicos.

A = load ''a.txt'' as (ida, a1); B = load ''b.txt as (idb, b1); C = join A by ida, B by idb; D = foreach C generate ida,a1,b1; dump D;