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)


转载于:https://www.cnblogs.com/cl1024cl/p/6205409.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值