3

1 行のみの関係 X で

X.A=null
X.B= "blahblah"

今私はやりたい:

Y = FILTER X BY A != B ;

A は null で、B は null ではないので、条件は true である必要があります。しかし、実際の結果は Y が空であり、条件が false と評価されます。

これは、null を含むすべての条件が false である SQL と同じです。SQLはNVL()関数でnullを変換できますが、PIGにはそれがないようです。上記の比較を行うきれいな方法はありますか?

4

2 に答える 2

2

ちょっとハックですが、比較を行って結果をリレーションに保存し、結果と元の比較を使用してフィルター処理できます。

Y = foreach X generate *,
        (((A is null and B is not null) or (A is not null and B is null) ? 'y' : 'n') as oneNull;
Y = filter Y by (oneNull == 'y' or A != B);
Y = foreach Y generate A, B;

これを使用して、X が次の場合:

(,blahblah)
(blah,blah)
(,)
(blah,)
(abc,def)

Y は次のようになります。

(,blahblah)
(blah,)
(abc,def)
于 2012-07-27T02:10:45.440 に答える
0

Pig バージョン 0.12.1 がインストールされています。条件を直接書くと実際にうまくいきます:

Y = filter X by (A is null and B is not null) or (A is not null and B is null) or A != B;

null/null の場合、式 A != B は null と評価されるため、フィルターはタプルを除外することに注意してください。

http://pig.apache.org/docs/r0.12.1/basic.html#nulls .

于 2015-05-28T02:00:54.047 に答える