我想使用参数替换
在我的猪脚本中传递过滤器语句为此,我尝试了
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中看过类似的帖子。
任何帮助将不胜感激
答案 0 :(得分:1)
我认为您正在使用传递的参数作为条件。如果是这样,你会得到这样的错误。相反,您可以将它们作为单独的paarmeters传递,并在pig脚本中形成条件字符串。
exec -p p1=1 -p p2=2 filterscript.pig
在filterscript.pig脚本中,您可以在条件子句中使用这些参数值。例如
a1==$p1 AND a2=$p2
答案 1 :(得分:1)
如果您在grunt shell之外运行脚本,则可以执行以下操作:
pig -param flt="a1\=\=1 AND a2\=\=2" -f filterscript.pig
其中filterscript.pig
是这样的:
A = load ...
...
B = filter A by $flt;
...
请注意,'='
也会被转义,否则过滤条件将不会被评估为布尔值。
如果你想在exec中使用grunt shell 中的过滤器替换,
然后你会遇到空白问题。由于转义空格字符不起作用,因此您可以创建parameter file:
cat params.txt
flt="a1\=\=1 AND a2\=\=2"
然后发出:
exec -param_file params.txt filterscript.pig
注意:我使用Pig 0.12