проецируя все столбцы вложенного отношения в свинье - PullRequest
2 голосов
/ 06 февраля 2012

У меня есть отношение MY_REL, которое является результатом объединения X и Y:

MY_REL = {X::x1,X::x2,Y::y1,Y::y2}

И я пытался сделать

Bla =       foreach MY_REL generate X;

Свинья рвота:

ERROR 1000: Error during parsing. Scalars can be only used with projections

Я попробовал X :: * и он выдает: неверный псевдоним X.

Уродливый обходной путь: я переключился на явное написание всех имен столбцов:

Bla =       foreach MY_REL generate X::x1, X::x2;

Есть ли хороший способ генерировать все столбцы X?

Ответы [ 2 ]

3 голосов
/ 10 февраля 2012

Вместо использования JOIN используйте COGROUP.COGROUP создаст отношение, которое выглядит как {X : {x1, x2}, Y : {y1, y2}}.Таким образом, вы можете сделать:

foreach MY_REL GENERATE FLATTEN(X);

Обратите внимание, что там находится сумка, поэтому вы хотите flatten it.

1 голос
/ 11 февраля 2012

Если все ваши столбцы перед JOIN имеют другое имя, вы можете просто использовать их, как показано ниже:

Bla =       foreach MY_REL generate x1 + y1, x2 + y2;

Если только один конфликт, вам нужно использовать исходное отношение префикса

Bla =       foreach MY_REL generate x1, x2, y1, Y:y1 AS y2;

An с новым диапазоном Pig PIG-1693

Bla =       foreach MY_REL generate ..$2, $3 AS y2;

И есть также некоторые разговоры в PIG-2511

...