6

由于在 pig split 操作中没有 else 或 default 语句,执行以下操作的最优雅方法是什么?我不喜欢复制粘贴代码。

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;

无论如何,这样的事情可能吗?

4

2 回答 2

11

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

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

所以你几乎明白了。:)

注意: SPLIT可以在两者中放入一行,例如,如果good_data是150。我不知道这是否是您想要的,但无论如何您都应该意识到这一点。这也意味着它将仅包含0 或更少的行。good_data_big_valuesvaluebad_datavalue

于 2013-09-20T15:34:33.387 回答
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))
;

另一种选择可能是使用

于 2013-09-20T15:38:46.440 回答