【问题标题】:Pig Join with null values带有空值的猪连接
【发布时间】:2012-09-28 05:23:51
【问题描述】:

在实现How to optimize a group by statement in PIG latin? 提供的解决方案时,我发现所有具有一个空列的行都被删除,这是 Pig 中的预期行为。我想知道下面的代码是否可以工作?

A = B join by ( Bcol1 is null?'UNK',Bcol2 is null?'UNK',Bcol2 is null?999),
C join by ( Ccol1 is null?'UNK',Ccol2 is null?'UNK',Ccol2 is null?999)

我遇到了一些解析错误。

【问题讨论】:

    标签: apache-pig


    【解决方案1】:

    PIG 是一种数据流脚本语言,添加额外的 FOREACH GENERATE 来修复 null 不会导致额外的 map reduce 作业。

    B = foreach B generate ....., (Bcol1 is null) ? 'UNK' : Bcol1 as Bcol1, (Bcol2 is null) ? 'UNK' : Bcol2 as Bcol2, (Bcol3 is null) ? 999 : Bcol3;
    C = foreach C generate ....., (Ccol1 is null) ? 'UNK' : Ccol1 as Ccol1, (Ccol2 is null) ? 'UNK' : Ccol2 as Ccol2, (Ccol3 is null) ? 999 : Ccol3;
    A = join B by (Bcol1, Bcol2, Bcol3), C by (Ccol1, Ccol2, Ccol3);
    

    【讨论】:

    • 感谢 Alexejpab 的回复,我确实以同样的方式在我这边实现了,但是唯一的缺点是它本质上会将值从 null 更改为某个确定性值,这可能会呈现为值..但我认为由于连接中没有 NVL 功能.. 这是要走的路..
    • 你总是可以做"(Bcol1 is null) ? 'UNK' : Bcol1 as JOIN_Bcol1",所以你用改变的空值复制列并在加入后丢弃它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2011-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多