pig 的chararry类型不能用比较运算符comparison operator
pig 的chararry类型可能是按字段,逐个字段进行比较。
element_id 是chararray类型,
语句:
no_app_category_mapping = filter no_element_id by element_id == '' or element_id is null or element_id == '0' or element_id >='14';
其中,element_id >='14'是错误的用法。
comparison operator不能操作chararray类型。
执行结果是 element_id为8 的被找出来了。‘8’>='14',很奇怪啊!
而改成 element_id <='14'时,再执行时,
执行结果找到了element_id =‘1’和element_id =‘11’的,说明不行。
原理:估计是升级为bytearray,然后,按字段比较,逐个字段,所以,8>1,而1相同时,1<4
所以11小于14,而8大于14.
pig官网有说明:貌似只能用==和!=,两边不一致是,implicit cast支持从低到高,不支持高到低。
如下:
Comparison Operators
Description
| 
 Operator  | 
 Symbol  | 
 Notes  | 
| 
 equal  | 
 ==  | 
|
| 
 not equal  | 
 !=  | 
|
| 
 less than  | 
 <  | 
|
| 
 greater than  | 
 >  | 
|
| 
 less than or equal to  | 
 <=  | 
|
| 
 greater than or equal to  | 
 >=  | 
|
| 
 pattern matching  | 
 matches  | 
 Takes an expression on the left and a string constant on the right. expression matches string-constant Use the Java format for regular expressions.  | 
Use the comparison operators with numeric and string data.
Examples
Numeric Example
X = FILTER A BY (f1 == 8);
String Example
X = FILTER A BY (f2 == 'apache');
Matches Example
X = FILTER A BY (f1 matches '.*apache.*');
Types Table: equal (==) operator
| 
 bag  | 
 tuple  | 
 map  | 
 int  | 
 long  | 
 float  | 
 double  | 
 chararray  | 
 bytearray  | 
 boolean  | 
 datetime  | 
 biginteger  | 
 bigdecimal  | 
|
| 
 bag  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
| 
 tuple  | 
 boolean (see Note 1)  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
|
| 
 map  | 
 boolean (see Note 2)  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
 error  | 
||
| 
 int  | 
 boolean  | 
 boolean  | 
 boolean  | 
 boolean  | 
 error  | 
 cast as boolean  | 
 error  | 
 error  | 
 error  | 
 error  | 
|||
| 
 long  | 
 boolean  | 
 boolean  | 
 boolean  | 
 error  | 
 cast as boolean  | 
 error  | 
 error  | 
 error  | 
 error  | 
||||
| 
 float  | 
 boolean  | 
 boolean  | 
 error  | 
 cast as boolean  | 
 error  | 
 error  | 
 error  | 
 error  | 
|||||
| 
 double  | 
 boolean  | 
 error  | 
 cast as boolean  | 
 error  | 
 error  | 
 error  | 
 error  | 
||||||
| 
 chararray  | 
 boolean  | 
 cast as boolean  | 
 error  | 
 error  | 
 error  | 
 error  | 
|||||||
| 
 bytearray  | 
 boolean  | 
 error  | 
 error  | 
 error  | 
 error  | 
||||||||
| 
 boolean  | 
 boolean  | 
 error  | 
 error  | 
 error  | 
|||||||||
| 
 datetime  | 
 boolean  | 
 error  | 
 error  | 
||||||||||
| 
 biginteger  | 
 boolean  | 
 error  | 
|||||||||||
| 
 bigdecimal  | 
 boolean  | 
Note 1: boolean (Tuple A is equal to tuple B if they have the same size s, and for all 0 <= i < s A[i] == B[i])
Note 2: boolean (Map A is equal to map B if A and B have the same number of entries, and for every key k1 in A with a value of v1, there is a key k2 in B with a value of v2, such that k1 == k2 and v1 == v2)
                    
                
                
            
        
浙公网安备 33010602011771号