如何在猪中创建一个小的恒定关系(表)?

时间:2012-11-16 09:56:57

标签: apache-pig

有没有办法在猪中创建一个小的常数关系(表)? 我只需要创建一个包含常量值的1元组的关系。 类似的东西:

A = LOAD using ConstantLoader('{(1,2,3)}');

谢谢,Ido

3 个答案:

答案 0 :(得分:2)

我不确定你为什么需要这个,但是,这是一个丑陋的解决方案:

A = LOAD 'some/sample/file' ;
B = FOREACH A GENERATE '' ;
C = LIMIT A 1 ;

现在,您可以将'C'用作具有一个空元组的'空关系'。

答案 1 :(得分:1)

快速回答:不。

我在pig-dev mailing list询问了这个问题。

答案 2 :(得分:1)

DEFINE GenerateRelationFromString(string) RETURNS relation {
    temp = LOAD 'somefile';
    tempLimit1 = LIMIT temp 1;
    $relation = FOREACH tempLimit1 GENERATE FLATTEN(TOKENIZE('$string', ','));
};

用法:

fourRows = GenerateRelationFromString('1,2,3,4');
myConstantRelation = FOREACH fourRows GENERATE ( 
CASE $0
    WHEN '1' THEN (1, 'Ivan')
    WHEN '2' THEN (2, 'Boris')
    WHEN '3' THEN (3, 'Vladimir')
    WHEN '4' THEN (4, 'Olga')
END
) as myTuple;

这肯定是hacky,在我看来,正确的方法是实现一个像这样工作的StringLoader():

fourRows = LOAD '1,2,3,4' USING StringLoader(',');

通常用于文件位置的参数只能用作字符串输入。