數據類型:基本類型,複雜類型。
基本類型: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、