使用 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 ' ' ','.

  • 的逗号