2012-04-25 8 views
2

私はブタのリレーションにフィルタをかけようとしていますが、最初のフィールド文字列に3番目のフィールドがあるすべてのレコードが必要です。豚のフィルタリング

私が試した:そこには構文エラーがありませんが、私は、フィルタリングのための任意の出力を取得していない午前

Filtered= FILTER SRC BY $0 matches 'CONCAT(".*",$2,".")'; 
DUMP Filtered; 

(私の元関係がSRCであると仮定) 。

答えて

2

私はCONCATはあなたが期待しているものに解決されるとは思わない、もっとので、試合はおそらく、あなたがどんな結果

できます取得されていません理由は全体unevalutated文字列CONCAT(".*",$2,".")を、一致しようとしています

TMP = FOREACH SRC GENERATE $0, CONCAT(".*",$2,"."); 
Filtered = FILTER TMP BY $0 matches $1; 
DUMP Filtered; 

またはそのような何か(完全にテストされていない)

+0

これは動作しません。 –

4
:あなたの二つの文、あなたはCONCATのevalulated内容を含むフィールド、および一致の操作を実行するために第二を作成する場所を最初にこれを破ります

ブタのCONCATは、引数を2つだけ取る。私はそれが実行時に文句されていない理由はわからないんだけど、あなたは、文字列あなたを得るために

CONCAT(".*", CONCAT($2, ".")) 

のように、2つのCONCAT文の文字列にするつもりだhttp://pig.apache.org/docs/r0.10.0/func.html#concat

でマニュアルを参照してください欲しいです。

1

私はあなただけA. Leistraで述べたように、いくつかの構文エラー

  • を持っていると思う、CONCATはわずか2つの引数を取ります。
  • "。"終わりにする必要があります「*」あなたは両面ワイルドカードが必要な場合は
  • FILTER文が引数
  • 豚のときに
ことができるように1つだけを使用し、二重引用符を含む奇妙なエッジケースをたくさん持っているの周りに括弧を好みます

​​

0

3番目のフィールドは、結果がfiltereになることを最初のフィールドが含まれている場合

Filtered= FILTER SRC BY $0 matches '(.*)$2(.*)'; 

DUMP Filtered; 

、これを試してみてくださいd。 これはRegexを使って行います。