在比较操作(==,!=,>,<,>=,<=),matches,算数操作(+,-,*,/ ,包含%,?,CASE)中,如果有一个操作数为空,那么结果为空,
PIG中的null问题
。COUNT_STAR ,不过滤null数据
CAST 操作:将一个null数据从一个数据类型转换到另一个数据类型,结果为空
AVG,MIN,MAX,SUM,COUNT :这几个操作将忽略空值
CONCAT :任意一个字表达式为空,结果为空
SIZE :任意计算的对象为null,结果也为null
tuple(.) or map(#):如果 被引用的对象为空,那么结果为空 。
FILTER 操作 :如果一个filter的表达式为空,filter将不会拒绝操作。(eg :b = filter a by X!=5 ,如果X为空,!X也为空,X!=5 将为空,那么filter将不会处理这一行数据。)
三元操作符 ? :如果一个bool表达式的结果为null,结果将为空。
以下操作会产生nulls : 1、除0 2、用户的UDFs 3、引用一个不存在的字段 4、引用一个map中不存在的字段 5、引用一个tuple中不存在的字段 6、load不存在的数据时产生null,空字符串不会被load,会被替换成null null可以作为一个常量使用 。 7、load时数据类型不匹配产生null
GROUP /COGROUP/JOIN: 当使用group来处理一个关系时,一个关系中的null会被聚集在一起当做一个null处理 ,
电脑资料
《PIG中的null问题》(http://meiwen.anslib.com)。 当cogroup来处理多个关系是,如果有key为空的情况时,多个关系之间的的空是不一样的,会被分别当做不同的null key来处理。JOIN :
数据 : a : 1 5 43 6
b : 1 7
2 8
10
JOIN【inner】如:join中空和空是匹配不上的,会被过滤掉 。在join之前过滤出key为空的数据 ,有助于提高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)