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

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

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

SPLIT rawish_data
    INTO good_rawish_data IF (
    (uid > 0L) AND
    (value1 > 0) AND
    (value1 < 100) AND
    (value1 IS NOT NULL) AND
    (value2 > 0L) AND
    (value2 < 200L) AND
    (value3 >= 0) AND
    (value3 <= 300)),

    bad_rawish_data IF (NOT (
    (uid > 0L) AND
    (value1 > 0) AND
    (value1 < 100) AND
    (value1 IS NOT NULL) AND
    (value2 > 0L) AND
    (value2 < 200L) AND
    (value3 >= 0) AND
    (value3 <= 300)));

我想做一些像

SPLIT data
    INTO good_data IF (
    (value > 0)),
    good_data_big_values IF (
    (value > 100)),
    bad_data DEFAULT;

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

yduiuuwa

yduiuuwa1#

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

SPLIT data
    INTO good_data IF (IsGood(data))
         good_data_big_values IF (IsGood(data) AND value > 100)),
         bad_data IF (NOT IsGood(data))
;

另一种选择可能是使用宏

mm9b1k5b

mm9b1k5b2#

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

SPLIT data
    INTO good_data IF (
    (value > 0)),
    good_data_big_values IF (
    (value > 100)),
    bad_data OTHERWISE;

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

相关问题