在比較操作(==,!=,>,<,>=,<=),matches,算數(shù)操作(+,-,*,/ ,包含%,?,CASE)中,如果有一個操作數(shù)為空,那么結(jié)果為空,
PIG中的null問題
。COUNT_STAR ,不過濾null數(shù)據(jù)
CAST 操作:將一個null數(shù)據(jù)從一個數(shù)據(jù)類型轉(zhuǎn)換到另一個數(shù)據(jù)類型,結(jié)果為空
AVG,MIN,MAX,SUM,COUNT :這幾個操作將忽略空值
CONCAT :任意一個字表達(dá)式為空,結(jié)果為空
SIZE :任意計(jì)算的對象為null,結(jié)果也為null
tuple(.) or map(#):如果 被引用的對象為空,那么結(jié)果為空 。
FILTER 操作 :如果一個filter的表達(dá)式為空,filter將不會拒絕操作。(eg :b = filter a by X!=5 ,如果X為空,!X也為空,X!=5 將為空,那么filter將不會處理這一行數(shù)據(jù)。)
三元操作符 ? :如果一個bool表達(dá)式的結(jié)果為null,結(jié)果將為空。
以下操作會產(chǎn)生nulls : 1、除0 2、用戶的UDFs 3、引用一個不存在的字段 4、引用一個map中不存在的字段 5、引用一個tuple中不存在的字段 6、load不存在的數(shù)據(jù)時產(chǎn)生null,空字符串不會被load,會被替換成null null可以作為一個常量使用 。 7、load時數(shù)據(jù)類型不匹配產(chǎn)生null
GROUP /COGROUP/JOIN: 當(dāng)使用group來處理一個關(guān)系時,一個關(guān)系中的null會被聚集在一起當(dāng)做一個null處理 ,
電腦資料
《PIG中的null問題》(http://m.clearvueentertainment.com)。 當(dāng)cogroup來處理多個關(guān)系是,如果有key為空的情況時,多個關(guān)系之間的的空是不一樣的,會被分別當(dāng)做不同的null key來處理。JOIN :
數(shù)據(jù) : a : 1 5 43 6
b : 1 7
2 8
10
JOIN【inner】如:join中空和空是匹配不上的,會被過濾掉 。在join之前過濾出key為空的數(shù)據(jù) ,有助于提高join的速度。a = load './t1.txt' as (a1:int,a2:int); b = load './t2.txt' as (b1:int,b2:int); c= join a by a1,b by b1 ; dump c ; (1,5,1,7)
JOIN【outer】 d = join a by a1 left,b by b1 ; dump d ; (1,5,1,7)
(3,6,,)
(,4,,)
d = join a by a1 right,b by b1; dump d ; (1,5,1,7)
(,,2,8)
(,,,10)
d = join a by a1 full,b by b1; dump d ; (1,5,1,7)
(,,2,8)
(3,6,,)
(,4,,)
(,,,10)