piggybank里面有很多函数,可以用register和define调用。也可以用java仿照piggybank自行开发。

比如读sequence二进制文件,可以用piggybank里面函数SequenceFileLoader,也可以自行开发函数。

--REGISTER piggybank.jar;

REGISTER wizad-etl-udf-0.1.jar;

--DEFINE SequenceFileLoader org.apache.pig.piggybank.storage.SequenceFileLoader();

DEFINE SequenceFileLoader com.etl.pig.SequenceFileCSVLoader();

--origin_cleaned_data = LOAD '$Cleaned_Log' USING PigStorage(',')

origin_cleaned_data = LOAD '$Cleaned_Log' USING SequenceFileLoader



以下是pig内置函数,可直接使用:


load函数:pigstorage,hbasestorage

  TestLoader按行读取text文件,每行做作为一个tuple(是一个chararay类型的字段)



存储函数:PigStorage(hdfs),HBaseStorage(hbase)



内置数学函数:

ABS()绝对值,

TAN()正切

ATAN()反正切

TANH()双曲正切



SQRT()平方根

CBRT()立方根



SIN正弦

SINH双曲正弦

COS()余弦

ACOS()反余弦值

COSH()双曲余弦

EXP():e的幂次方(e为底的指数函数)

LOG()自然对数

LOG10():10为底的对数函数



ROUND:四舍五入取值

CEIL()向上取整



FLOOR(double) 小于等于某表达式的最大整数







注意:{(int)}是包含int类型字段的tupe的bag。

内置聚合函数:

AVG({(int)}):所有值平均值,null忽略。

AVG({(long)}):所有值平均值,null忽略。

AVG({(float)}):所有值平均值,null忽略。

AVG({(double)}):所有值平均值,null忽略。

AVG({(bytearray)}):所有bytearray值转化为double类型后的平均值,null忽略。



COUNT

COUNT_STAR:相当于sql中的count(*)

SUM({(int)}):还有SUM({(float)})。。。

SUM({(bytearray)}):bytearray类型转double后求和,null忽略。

MAX()找最大

MIN()找最小



内置chararray和bytearray的UDF

CONCAT(chararray a, chararray b):连接字符串字段a,b

CONCAT(bytearray a, bytearray b):连接字符串字段a,b



字符查找,返回查找的首位置与末位置。

INDEX_OF(chararray source,chararray search):在source字段中,查找search字段,返回search出现的第一个位置,无则返回-1

如:SPLIT ios INTO ios6 IF (INDEXOF(os_version,'7')!=0),ios7 IF INDEXOF(os_version,'7')==0;



LAST_INDEX_OF(chararray source,chararray search):在source中查找search字段,返回search最后一个字符出现的位置。无则返回-1



LCFIRST(chararray):第一字符转小写

UCFISRT(chararray input):第一个字符转大写

LOWER(chararray):所有字符转小写

UPPER(chararray):所有字符转大写



REGEX_EXTRACT(chararray source, chararray regex, int n):regex是正则表达式,在source中所有匹配regex的字符串(chararray),返回第n个(n从1开始);无则返回null


实例:allAdId =FOREACH allRow GENERATE REGEX_EXTRACT((chararray)$3,'(.*) (.*)',1) AS time,REGEX_EXTRACT((chararray)$0,'(.*)_(.*)',1) AS adn,$6 AS ad_id;


(chararray)REGEX_EXTRACT_ALL(chararray source, chararray regex):在source中找到匹配regex的所有部分作为一个tuple返回(chararray),没有则返回null。



chararry REPLACE(chararry source, chararray toReplace, chararray newValue):在source字段中,用newValue去替换所有的toReplace字段。



long SIZE(chararray input):返回input中字符的个数





(chararray) STRSPLIT(chararray source):将source字符串按空格分隔,返回包含一个字段的tuple,如(aa bb cc)

(chararray) STRSPLIT(chararray source, chararray regex):将source字符串按正则表达式regex分隔,返回包含一个字段的tuple

(chararray) STRSPLIT(chararray source, chararray regex, int maxsplits):将source字符串按正则表达式regex分隔,超过最大分隔数maxsplits后的部分丢弃,只保留前面部分,返回包含一个字段的tuple



SUBSTRING(chararray source,int start, int end):提取source的子串,位置从start到end(不包含end位置上的内容,只留end之前的)。起始位置从0开始,不是从1。输入字符串小于start会报错。



{(chararray)} TOKENIZE(chararray source):按空格分割source字符串成多个部分,分别存入tuple,整体作为一个bag返回。



chararray TRIM(chararray input):去字符串前面和后面的所有空格



还有很多。。

RANDOM():0到1的随机数

判空IsEmpty(bag)和IsEmpty(tuple)