使用 shell 扩展将参数传递给字符串中的 pig
passing parameters to pig within a string using shell expansion
在 PIG 中,如何在 shell
中传递它
{20160218,20160219,20160220,20160221,20160222,20160223,20160224}
通过 shell 代码如:
pig -f cart_abandonment.pig -param input='{20160218..20160224}'
使用扩展功能?
以上不起作用,因为单引号省略了扩展。
没有单引号,似乎只有 20160218 通过了。
PIG脚本如下:
list = load '/inserteddate={$input}'
USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') as cartjson:map[];
尝试双引号命令替换 ($(...)
):
pig -f cart_abandonment.pig -param input="$(echo {20160218..20160224} | tr ' ' ',')"
如您所见,brace expansion 仅在使用 unquoted.
时有效
但是,为了传递 all 由它生成的数字作为选项参数 input=
的一部分,数字列表必须是 双引号.
这是通过使用 command substitution ($(...)
) 生成数字列表(并将其回显到命令替换捕获的标准输出)来实现的,这是双引号,使其输出被shell视为单字,因此input=num1 num2 ...
形式单个选项参数。
在这种情况下,pig
需要 逗号分隔的 值,而传递给 echo
的大括号扩展会导致 space-separated 值,因此需要将 spaces 转换为带有 tr ' ' ','
.
的逗号
在 PIG 中,如何在 shell
中传递它{20160218,20160219,20160220,20160221,20160222,20160223,20160224}
通过 shell 代码如:
pig -f cart_abandonment.pig -param input='{20160218..20160224}'
使用扩展功能? 以上不起作用,因为单引号省略了扩展。
没有单引号,似乎只有 20160218 通过了。 PIG脚本如下:
list = load '/inserteddate={$input}'
USING com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') as cartjson:map[];
尝试双引号命令替换 ($(...)
):
pig -f cart_abandonment.pig -param input="$(echo {20160218..20160224} | tr ' ' ',')"
如您所见,brace expansion 仅在使用 unquoted.
时有效
但是,为了传递 all 由它生成的数字作为选项参数
input=
的一部分,数字列表必须是 双引号.这是通过使用 command substitution (
$(...)
) 生成数字列表(并将其回显到命令替换捕获的标准输出)来实现的,这是双引号,使其输出被shell视为单字,因此input=num1 num2 ...
形式单个选项参数。
在这种情况下,pig
需要 逗号分隔的 值,而传递给echo
的大括号扩展会导致 space-separated 值,因此需要将 spaces 转换为带有tr ' ' ','
. 的逗号