Как «обновить» колонку используя латинскую свинью - PullRequest
5 голосов
/ 13 января 2011

Представьте, что у меня есть следующая таблица:

A: { x: int, y: int, z: int, ...99 other columns... }

Теперь я хочу преобразовать это так, чтобы z был установлен на NULL, где x > y, а результирующий набор данных должен быть сохранен как B.

и я хочу сделать это без явного упоминания всех остальных столбцов, поскольку это становится кошмаром обслуживания.

Есть ли простое решение?

Ответы [ 4 ]

2 голосов
/ 14 января 2011

Эта проблема отслеживается в этой JIRA: PIG-1693 В foreach должен быть способ указать "и все остальные поля"

В настоящее время я не знаю ничего проще, чем делать то, что вы говорите, или не загружать Z и добавлять новый столбец Z со звездным выражением .

0 голосов
/ 19 августа 2016

Конечно, вы можете выбирать столбцы по номеру столбца, но это может легко стать кошмаром, если вы вообще что-то измените. Я обнаружил, что имена столбцов гораздо более стабильны, и поэтому я рекомендую следующее решение:

Обновить mycol, когда он находится между двумя известными столбцами

Вы можете использовать .., чтобы указать начальные или конечные столбцы (или промежуточные столбцы). Вот как это сработает, если вы захотите изменить значение «MyCol» на «updatedvalue».

aliasAfter = FOREACH aliasBefore GENERATE 
             .. colBeforeMyCol, updatedvalue, colAfterMyCol ..;
0 голосов
/ 30 мая 2014

Функция для облегчения вашего сценария была добавлена ​​в Pig 0.9.Новый оператор диапазона проекта (..) позволяет вам выразить диапазон полей, указав имена начальных и / или конечных полей, как в этом примере:

result = FOREACH someInput GENERATE field1, field2, null какfield3, field4 ..;

В приведенном выше примере field1 / 2/3/4 являются фактическими именами полей.Одно из полей имеет значение NULL, в то время как другие поля остаются без изменений.

Подробнее в этой статье «Новые возможности Apache Pig 0.9 - Часть 3»: http://hortonworks.com/blog/new-apache-pig-0-9-features-part-3-additional-features/

Чтобы решитьконкретная проблема, вы, вероятно, хотите сделать ФИЛЬТР и СОЮЗ, чтобы объединить результаты.

0 голосов
/ 18 января 2011

Мне удалось отбросить часть скопления колонны, вложив их в однорядные пакеты и сгладив впоследствии.

Тем не менее, это похоже на взлом. Поэтому я также исследую каскадирование, чтобы выяснить, подходит ли оно для моего сценария.

...