在pig中删除单个列

s5a0g9ez  于 2021-06-21  发布在  Pig
关注(0)|答案(2)|浏览(483)

我正在按大约20个ID的列表筛选一个表。现在我的代码如下所示:

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
42fyovps

42fyovps1#

也许和这个问题类似:
如何使用pig拉丁语“更新”列
参考jira票证:https://issues.apache.org/jira/browse/pig-1693 以下是您如何使用。。表示所有剩余字段的符号:

D = FOREACH C GENERATE $1 .. ;

这假设您有0.9.0+pig

ffvjumwh

ffvjumwh2#

按数字删除列

如果要删除第5列,可以这样做:

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

按名称删除列

如果要按名称删除列,仅知道要删除的列的名称似乎是不可能的。但是,如果您知道此列前后的列名称,则是可能的。如果要删除colbeforemycol和colaftermycol之间的列,可以这样做:

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

相关问题