使用shell扩展将参数传递给字符串中的pig

时间:2016-03-02 22:26:58

标签: bash shell apache-pig

在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[];

1 个答案:

答案 0 :(得分:2)

尝试使用双引号命令替换(template<typename F> void ApplyToFields(const NodeStatus &ns1, const NodeStatus &ns2, F func) { func(ns1.float_val, ns2.float_val); func(ns1.int_val, ns2.int_val); } struct add_print { template<typename T> void operator() (T a, T b) { std::cout << b + a << std::endl; } }; ):

$(...)
  • 正如您所发现的,brace expansion仅在使用未加引号时有效。

  • 但是,为了将生成的所有数字作为option-argument pig -f cart_abandonment.pig -param input="$(echo {20160218..20160224} | tr ' ' ',')" 的一部分传递,数字列表必须双引号

  • 这是通过使用command substitutioninput=)生成数字列表(并将其回显到stdout,命令替换捕获)来实现的,这是 double -quoted ,以便shell将其输出视为单个字,以便$(...)形成选项参数。< / p>

  • input=num1 num2 ...在这种情况下需要以逗号分隔的值,而传递给pig的大括号扩展会产生以空格分隔的值因此需要使用echo将空格转换为逗号。