猪 - 分裂,缺乏默认或if / else

时间:2013-09-20 09:51:54

标签: apache-pig

由于猪分割操作中没有其他或默认语句,以下是最优雅的方法吗?我不喜欢复制粘贴代码。

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;

无论如何这样的事情是否可能?

2 个答案:

答案 0 :(得分:10)

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

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

所以你几乎得到了它。 :)

注意: SPLIT可以在good_datagood_data_big_values中添加一行,例如,value为150。不知道这是不是你想要的,但你应该知道它。这也意味着bad_data将只包含value为0或更小的行。

答案 1 :(得分:2)

您可以编写一个IsGood()UDF,其中检查所有条件。然后你的猪只是

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

另一种选择可能是使用macro