需要通过Pig Script实现生成序列号的ETL逻辑

时间:2016-08-30 13:44:53

标签: apache-pig etl

我有一个当前的ETL逻辑,我必须在猪中实现。 如果传入值为空或空白,ETL Logic将为列创建唯一的序列号。

需要通过猪来做到这一点。

1 个答案:

答案 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>;  

希望这会有所帮助!!