有人能解释一下猪的这个奇怪的错误吗

Posted

技术标签:

【中文标题】有人能解释一下猪的这个奇怪的错误吗【英文标题】:Can somebody explain this weird error in pig 【发布时间】:2015-06-01 17:33:39 【问题描述】:

我在 pig 中使用宏,但是它给我一个错误提示:未定义的别名'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】:

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

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

对于共享的用例:

$result_metric = FOREACH result_1 GENERATE *;

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

【讨论】:

谢谢,这解释了问题。只是好奇,错误不应该是未定义的别名'result_metric'而不是未定义的别名'result_1'。

以上是关于有人能解释一下猪的这个奇怪的错误吗的主要内容,如果未能解决你的问题,请参考以下文章

有人能解释一下这个功能吗

你能解释一下这个反应原生代码(渲染方法中的奇怪箭头函数)吗?

有人可以解释为啥条件运算符和赋值运算符一起使用时表现奇怪吗?

printf - 奇怪的混杂结果。有人可以解释一下吗?

有人可以解释为啥会出现这个错误吗?

有人可以解释一下这个 c++ 代码有啥问题并提供解决方案吗