有人可以解释猪这个奇怪的错误

时间:2015-06-01 17:33:39

标签: hadoop macros apache-pig hadoop2

我正在使用猪中的宏,但是它引发了一个错误说:未定义的别名' result_1'。

我正在使用的宏:

 define macro_result (source , metric_name , metric_value) returns  result_metric 
        {
                result_1= foreach $source generate
                        timestamp,
                        member_sk as id,
                        '$metric_name' as minor_metric,
                        'Lts_seo' as major_metric,
                        $metric_value as value;
                $result_metric = result_1;

        };

我将宏调用为:

page_views_to_jserp_from_job_detail    = macro_result(metadata_final,'PAGE_VIEWS_TO_JSERP_FROM_JOB_DETAIL', PV_to_jserp_from_job_detail  );

我将宏更改为此错误似乎已解决(更改为粗体):

 define macro_result (source , metric_name , metric_value) returns  result_metric 
            {
                    ***$result_metric***= foreach $source generate
                            timestamp,
                            member_sk as id,
                            '$metric_name' as minor_metric,
                            'Lts_seo' as major_metric,
                            $metric_value as value;
            ***--       $result_metric = result_1;***

            };

最初导致错误的原因是什么?为什么我不能将result_1用作中间步骤并将其存储在宏内的result_metric中?

1 个答案:

答案 0 :(得分:2)

我们不能将一个别名直接分配给另一个别名。

我们可以从一个别名中投射所需的字段并返回相同的字段。

对于共享的用例:

$result_metric = FOREACH result_1 GENERATE *;

除非这两个别名之间的投影字段发生变化,否则不需要执行此步骤。