2014-07-10 31 views
0

我正在使用复杂的foreach语句来生成我的数据。 这是一个示例行:Pig SUBSTRING函数不生成列

(2013-07-01)

下面是我的代码:

joined_data = foreach old_data { 

     date = old_data::date; 
     month = SUBSTRING(date, 5, 7); 

generate date, month; 
}; 

当我继续使用的表,我得到以下错误:

<file script.pig, line 24, column 66> Invalid field projection. Projected field [month] does not exist in schema: old_data::date:chararray,:chararray. 

为什么月份没有名字? 我明确地命名它。

当我写:

joined_data = foreach data { 

     date = old_data::date; 
     month = SUBSTRING(date, 5, 7); 

    generate date, $1; 
    }; 

的代码永远不会完成运行(它不能完成降低阶段)。

任何想法为什么会发生这种情况,以及我如何确保Pig拿起我给月份列的名字?

谢谢。

+0

我发现了一个愚蠢的解决方法: 生成日期,月份为月; – Michal

+0

这不是一个愚蠢的解决方法,将它分配给“月”并不能告诉猪有关模式的任何事情 – bridiver

回答

0

Indeep你可以强制与AS月份的标签,但它并不能解释为什么$ 1不工作:S

我会建议你用适当的正则表达式使用EXTRACT并尝试DESCRIBE joined_data;DESCRIBE old_data;为了看到标签过程:)