豚の関係のフィルターを実行しようとしています。最初のフィールド文字列に 3 番目のフィールドが出現するすべてのレコードが必要です。
私は試しました:(ソース関係がSRCであると仮定します)
Filtered= FILTER SRC BY $0 matches 'CONCAT(".*",$2,".")';
DUMP Filtered;
構文エラーはありませんが、Filtered の出力が得られません。
豚の関係のフィルターを実行しようとしています。最初のフィールド文字列に 3 番目のフィールドが出現するすべてのレコードが必要です。
私は試しました:(ソース関係がSRCであると仮定します)
Filtered= FILTER SRC BY $0 matches 'CONCAT(".*",$2,".")';
DUMP Filtered;
構文エラーはありませんが、Filtered の出力が得られません。
Pig のCONCAT
引数は 2 つだけです。http://pig.apache.org/docs/r0.10.0/func.html#concatのドキュメントを参照してください。
実行時に文句を言わない理由はわかりませんが、次のように 2 つのCONCAT
ステートメントをつなぎ合わせたいと思うでしょう。
CONCAT(".*", CONCAT($2, "."))
必要な文字列を取得します。
CONCATが期待どおりに解決しているとは思わないので、一致はおそらく評価されていない文字列全体と一致しようとしているためCONCAT(".*",$2,".")
、結果が得られません。
これを2つのステートメントに分割できますか。1つ目はCONCATの評価されたコンテンツを含むフィールドを作成し、もう1つは一致操作を実行します。
TMP = FOREACH SRC GENERATE $0, CONCAT(".*",$2,".");
Filtered = FILTER TMP BY $0 matches $1;
DUMP Filtered;
またはそのようなもの(完全にテストされていません)
構文エラーがあるだけだと思います
Filtered= FILTER SRC BY ($0 matches CONCAT('.*', CONCAT($2, '.*')));
これを試して、
Filtered= FILTER SRC BY $0 matches '(.*)$2(.*)';
DUMP Filtered;
3 番目のフィールドに最初のフィールドが含まれている場合、その結果はフィルター処理されます。これは正規表現を使用して行われます。