数据类型:基本类型,复杂类型。
基本类型:int,long,float,double,char array(string:注意以单引号),bytearray(byte[])
复杂类型:map,type,bag(能够任意嵌套)
map:key 是char array ;value 能够任意类型。
[’name’#’bob’,’age’#55]:建立一个包含 name 和 age 两个键的map。
tuple:是一个定长,无须相同类型。
(’bob’,55):建立一个包含两个字段的tuple 常量。
bag:是一个无序的tuple集合。无须加载到内存中的数据类型。
{(‘bob’,55),(’sally’,52),(‘john,25’)}:构造了一个包含的3个 tuple 的 bag,每一个tuple 包含两个字段。
模式
一些经常使用的模式(数据以Json格式存储)已经放在HCatalog 中。
mdata = load ‘mydata’ using HCatLoader();
在加载数据时,没有告诉Pig 数据的模式,能够$0 表示第一列。
daily = load ’NYSE_daily’;
calcs = foreach daily generate $7 /1000 , $3 * 100.0 , SUBSTRING($0,0,1) , $6 - $3
注意:因为1000 是个整型,因此$7 会转换成整型。100.0 是个double,$3会自动转换成 double。$0 会推断为chararray。$3,$6 会推断为double ,由于这样更安全。
fltrd = filter daily by $6 > $3;
因为数值型,chararray 和 bytearray 都适合,因此pig 推断不出来,那么pig 都做为bytearray 处理,对这些字段内的数据进行一个字节一个字节的比较。
没有模式是具备感染性
divs = load ’NYSE_dividends’ as ( exchange,stock_symbol,date,dividends );
daily = load ’NYSE_daily’;
jnd = join divs by stock_symbol ,daily by $1;
这个例子中pig 并不知道 daily 的模式,因此他不知道在join 中divs 和 daily 的模式。
类型转换
与java语法同样,(int)值
unintended = foreach player generate (int)bat#’base_on_balls’ - (int)bat#’ibbs’;
全部类型都不容许转换为bytearray。转为复杂类型或者复杂类型转为其余类型目前也是不容许的。
能够从bytearray 转换为复杂类型。
daily = load ’NYSE_daily’ as (exchange:char array,symbol:chararray,volume:int,close:float )
rough = foreach daily generate volume * close;
pig 隐式转换时,会向范围更大的类型转。
int 和 long 一块儿会转long。int,long 和 float 一块儿会转 float。int、long、float 和double 一块儿会转double、