1

我的 PigLatin 有问题

我有一段 Pig 代码,它将调用一个带引号的字符串

data = LOAD '$data' AS (...);
a = some_macro(data,'-9999 AS KEY');

宏是这样的:

DEFINE some_macro(data, string) RETURNS results {
    grp = GROUP $data ALL;
    $result = FOREACH grp {
        //...logic and logics
        GENERATE $string, //...other fields
        ...;
    }
}

对于字符串“-9999 AS KEY”,Pig 0.10 似乎不能工作,然后我尝试“'-9999' AS KEY”,它不能再次工作。

那么有人有解决方案吗?我只想要一个灵活的 KEY 名称。

4

3 回答 3

2

请尝试GENERATE '$string', //...other logic,即$string用单引号括起来。我只能用 pig 0.9.1 进行测试,但它对我有用。

some_macro(data,'-9999 AS KEY');用简单的引号是正确的。

但是,这不适用于字符串中的单引号。

于 2012-12-13T11:57:27.390 回答
0

如果你想传递一个带引号的字符串,首先按照 Fred 的描述修改你的脚本,并在传递参数时使用引号的 Unicode 等效项,例如:

a = some_macro(data,'\\u0022-9999 AS KEY\\u0022'); // "-9999 AS KEY"
于 2012-12-14T15:15:45.020 回答
0

好吧,我放弃了,Pig 解析器引擎不能接受单个配额或宏中的减号“-”。

我有一个解决方案,使用驱动程序代码替换猪文件中的一些存根。

实际上猪应该这样做,但我不知道为什么它不在宏中。

于 2012-12-17T06:57:56.083 回答