我在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'
还有其他方法可以做同样的事吗?
答案 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)
仅使用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
中不存在。使用MATCHES
是正则表达式匹配,使用正则表达式的Java格式。
BY NOT(employee_id MATCHES '8[0127][39]')