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
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.
Numeric Example
String Example
Matches Example
bag
tuple
map
int
long
float
double
chararray
bytearray
boolean
datetime
biginteger
bigdecimal
error
(see Note 1)
(see Note 2)
cast as boolean
cast as 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)