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

我认为您正在使用传递的参数作为条件。如果是这样,您将收到这样的错误。相反,您可以将它们作为单独的参数传递,并在 pig 脚本中形成条件字符串。

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

在您的 filterscript.pig 脚本中,您可以在条件子句中使用这些参数值。例如

a1==$p1 AND a2=$p2
于 2013-04-26T08:41:25.680 回答
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中使用过滤器替换,那么您将遇到空格问题。由于转义空白字符不起作用,作为一种解决方法,您可以创建一个参数文件

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 回答