猪是否支持 NOT IN 子句?

Is NOT IN clause supported in pig?

我在 PIG 中使用了 In 子句作为

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

现在我需要使用 NOT IN 子句

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'

还有其他方法可以做到吗?

Boolean Operators

仅使用 NOT 而非 NOT IN


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

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


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

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

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

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

如你所料,有 4 个员工 ID 的数据将指向关系 emp1,其余数据将指向关系 emp2