我有一个当前的ETL逻辑,我必须在猪中实现。 如果传入值为空或空白,ETL Logic将为列创建唯一的序列号。
需要通过猪来做到这一点。
答案 0 :(得分:0)
您可以使用RANK生成序列号,但在您的情况下,您检查该值是否为' 0'或者' null'那么只有你正在分配序列号..
我的观点是你应该使用UDF ..
package pig.test;
import java.io.IOException;
import org.apache.pig.EvalFunc;
import org.apache.pig.data.Tuple;
public class SequenceNumber extends EvalFunc<Integer> {
static int cnt = 0;
public Integer exec(Tuple v) throws IOException{
int a = (Integer)v.get(0);
if(a == 0) {
cnt++ ;
return new Integer(cnt);
}
else
return new Integer(a);
}
}
猪:
--Replace all null with 0
Step-1 A1 = foreach A generate *, (id is null ? 0 : id) as sq;
Step-2 T1 = foreach A1 generate sq,<your_fields>,<your_fields>;
Step-3 Result = foreach T1 generate sqno(*),<your_fields>,<your_fields>;
希望这会有所帮助!!