pig-split,缺少默认值或if/else

2izufjch  于 2021-06-25  发布在  Pig
关注(0)|答案(2)|浏览(579)

既然pig split操作中没有其他语句或默认语句,那么执行以下操作的最优雅的方法是什么?我不喜欢复制粘贴代码。

  1. SPLIT rawish_data
  2. INTO good_rawish_data IF (
  3. (uid > 0L) AND
  4. (value1 > 0) AND
  5. (value1 < 100) AND
  6. (value1 IS NOT NULL) AND
  7. (value2 > 0L) AND
  8. (value2 < 200L) AND
  9. (value3 >= 0) AND
  10. (value3 <= 300)),
  11. bad_rawish_data IF (NOT (
  12. (uid > 0L) AND
  13. (value1 > 0) AND
  14. (value1 < 100) AND
  15. (value1 IS NOT NULL) AND
  16. (value2 > 0L) AND
  17. (value2 < 200L) AND
  18. (value3 >= 0) AND
  19. (value3 <= 300)));

我想做一些像

  1. SPLIT data
  2. INTO good_data IF (
  3. (value > 0)),
  4. good_data_big_values IF (
  5. (value > 100)),
  6. bad_data DEFAULT;

不管怎样,这样的事情可能发生吗?

yduiuuwa

yduiuuwa1#

您可以编写一个isgood()自定义项来检查所有条件。那你的Pig就是

  1. SPLIT data
  2. INTO good_data IF (IsGood(data))
  3. good_data_big_values IF (IsGood(data) AND value > 100)),
  4. bad_data IF (NOT IsGood(data))
  5. ;

另一种选择可能是使用宏

mm9b1k5b

mm9b1k5b2#

它是。查看文档 SPLIT ,您要使用 OTHERWISE . 例如:

  1. SPLIT data
  2. INTO good_data IF (
  3. (value > 0)),
  4. good_data_big_values IF (
  5. (value > 100)),
  6. bad_data OTHERWISE;

所以你差点就成功了
注: SPLIT 可以把一行放进两行 good_data 以及 good_data_big_values 例如,如果, value 是150。我不知道这是否是你想要的,但你应该意识到这一点。这也意味着 bad_data 只包含以下行 value 等于或小于0。

相关问题