Hadoop 提取Pig中的数据,不包括第一列

Hadoop 提取Pig中的数据,不包括第一列,hadoop,apache-pig,Hadoop,Apache Pig,我有非结构化数据 key1|a1|a11|a21|a31|a41 key2|b1|b11 key3|c1|c11|c21 key4|d1 key2|b101|b111 key1|a101|a111|a121|a131|a141 根据第一列,记录被拆分并分发到目录 z = load '/user/input/data.txt' using PigStorage('|'); split z into z1 if $0 == 'key1', z2 if $0 == 'key2', z3 if $0

我有非结构化数据

key1|a1|a11|a21|a31|a41
key2|b1|b11
key3|c1|c11|c21
key4|d1
key2|b101|b111
key1|a101|a111|a121|a131|a141
根据第一列,记录被拆分并分发到目录

z = load '/user/input/data.txt' using PigStorage('|');
split z into z1 if $0 == 'key1', z2 if $0 == 'key2', z3 if $0 == 'key3', z4 if $0 == 'key4';
z11 = foreach z1 generate $1,$2,$3,$4,$5;
z22 = foreach z2 generate $1,$2;
z33 = foreach z3 generate $1,$2,$3;
z44 = foreach z4 generate $1;
对于上述输入:键1 | a1 | a11 | a21 | a31 | a41

我需要输出为a1 | a11 | a21 | a31 | a41,键1除外

我可以通过指定位置来获得值

z11=foreach z1生成$1、$2、$3、$4、$5


是否有一种方法可以提取上述数据而不指定位置?

如果您不确切知道有多少字段,可以使用此synthax:

z11 = foreach z1 generate $1..;
z22 = foreach z2 generate $1..;
z33 = foreach z3 generate $1..;
z44 = foreach z4 generate $1..;

因此,排除第一个字段$0,并保留从第二个字段$1开始的其余字段,而不明确指定所有字段

Error:grunt>z11=foreach z1 generate$1,。。;2017-05-19 06:00:22553[main]ERROR org.apache.pig.tools.grunt.grunt-ERROR 1200:语法错误,在“;”处或附近出现意外符号详细信息见日志文件:/home/cloudera/test/pig1495185127904.log