Вопрос по – Оставить один столбец в Свинья

4

Я фильтрую таблицу по списку из примерно 20 идентификаторов. Прямо сейчас мой код выглядит так:

A = LOAD 'ids.txt' USING PigStorage();
B = LOAD 'massive_table' USING PigStorage();
C = JOIN A BY $0, B BY $0;
D = FOREACH C GENERATE $1, $2, $3, $4, ...
STORE D INTO 'foo' USING PigStorage();

Что мне не нравится, так это строка D, где мне нужно заново создать новую таблицу, чтобы избавиться от объединяющего столбца, явно объявив каждый другой столбец, который я хочу представить (а иногда это много столбцов). Мне интересно, есть ли что-то эквивалентное:

FILTER B BY $0 IN (A)

или же:

DROP $0 FROM C

Ваш Ответ

2   ответа
2

Drop column by number

Если вы хотите удалить столбец № 5, вы можете сделать это так:

D = FOREACH C GENERATE .. $4, $6 .. ;

Drop column by name

Если вы хотите удалить столбец по имени, это не представляется возможным, зная только имя столбца, который вы хотите удалить. Однако это возможно, если вы знаете имена столбцов непосредственно до и после этого столбца. Если вы хотите поместить столбец (столбцы) между colBeforeMyCol и colAfterMyCol, вы можете сделать это следующим образом:

aliasAfter = FOREACH aliasBefore GENERATE 
             .. colBeforeMyCol, colAfterMyCol ..;
9

Может быть, похоже на этот вопрос:

Это ссылается на билет JIRA:https://issues.apache.org/jira/browse/PIG-1693 какие примеры, как вы можете использовать обозначение .. для обозначения всех оставшихся полей:

D = FOREACH C GENERATE $1 .. ;

Это предполагает, что у вас 0.9.0+ PIG

Error: User Rate Limit Exceeded.. $4, $6 ..
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы