猪不支持IN条款吗?

时间:2016-08-29 13:46:06

标签: hadoop apache-pig

我在PIG中使用了In子句

emp =
FILTER employee_table
BY employee_id IN ('873', '809','819','829')
;

现在我需要使用NOT IN Clause

no_emp =
FILTER employee_table
BY employee_id  NOT IN ('873', '809','819','829')
;

生成错误

2016-08-29 13:22:46,165 [main] ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 146, column 14>  Syntax error, unexpected symbol at or near 'NOT'

还有其他方法可以做同样的事吗?

2 个答案:

答案 0 :(得分:1)

您可以使用SPILLED和OTHERWISE命令。下面提到了一个例子

SPLIT employee_table INTO emp1 IF employee_id IN ('873', '809','819','829'),  emp2 OTHERWISE;

您可以猜到,具有4个员工ID的数据将指向关系emp1,而rest将指向关系emp2

答案 1 :(得分:0)

Boolean Operators

仅使用NOT而不是NOT IN

no_emp =
FILTER employee_table
BY employee_id  NOT ('873', '809','819','829')
;

如果上述方法不起作用,请尝试: NOT (in ('873', '809','819','829'))

{p> 更新: NOT IN运算符在PIG中不存在。使用MATCHES是正则表达式匹配,使用正则表达式的Java格式。

BY NOT(employee_id MATCHES '8[0127][39]')