0

パラメーター置換を使用して、豚のスクリプトでフィルターステートメントを渡したい

そのために私は試しました

    exec -param flt='a1==1 AND a2=2' filterscript.pig

しかし悲しいことに、例外メッセージがスローされています

    ERROR org.apache.pig.tools.grunt.Grunt - ERROR 101: Local file 'AND' does not exist.

豚バージョン - 0.9.2

私は apache フォーラムで豚のユーザーが試してみflt='\'a1==1 AND a2=2\''flt="a1==1 AND a2==2"提案したり、SO で同様の投稿を見たりしました。

どんな助けでも大歓迎です

4

2 に答える 2

1

grunt シェルの外でスクリプトを実行すると、次のことができます。

pig -param flt="a1\=\=1 AND a2\=\=2" -f filterscript.pig

次のようなものはどこにfilterscript.pigありますか:

A = load ...
...
B = filter A by $flt;
...

もエスケープされることに注意してください'='。そうしないと、フィルター条件がブール値に評価されません。exec で試したように、grunt シェル内で

フィルター置換を使用する場合は、空白の問題が発生します。空白文字のエスケープが機能しないため、回避策としてパラメーター ファイルを作成できます。

cat params.txt
flt="a1\=\=1 AND a2\=\=2"

次に発行します。

exec -param_file params.txt filterscript.pig

注:Pig 0.12を使用しています

于 2013-04-26T09:28:44.910 に答える
1

渡されたパラメータをそのまま条件として使っていると思います。その場合、このようなエラーが発生します。代わりに、それらを個別のパラメータとして渡し、pig スクリプト内で条件文字列を形成できます。

exec -p p1=1 -p p2=2 filterscript.pig

filterscript.pig スクリプト内では、これらのパラメーター値を条件句で使用できます。例えば

a1==$p1 AND a2=$p2
于 2013-04-26T08:41:25.680 に答える