0

内の「親」フィールドを参照するのに問題がありますforeach:

grunt> describe METRICS_SOURCE_WITH_CNT
METRICS_SOURCE_WITH_CNT: 
{group: (hostname: chararray,site_guid: chararray,timestamp: long),
JOIN_FIELDS_ONLY: {(timestamp: long, unique_pageviews: long)},cnt: long

cntタプルの合計であることに注意してください。

METRICS_SOURCE_TOP3 = foreach METRICS_SOURCE_WITH_CNT {

    SORTED = ORDER JOIN_FIELDS_ONLY by unique_pageviews DESC;
    TOPK = LIMIT SORTED 10;

    REVSORTED = ORDER JOIN_FIELDS_ONLY by unique_pageviews ASC;
    BOTTOMK = LIMIT REVSORTED cnt;

    generate TOPK, BOTTOMK;
}

しかし、2 番目の を適用するとLIMIT、Pig はcntフィールドが 内REVSORTEDにあると考えているようですが、実際には「親」フィールドです。

Invalid field projection. Projected field [cnt] does not exist in schema: timestamp:long,....

フィールドを番号で参照しようとしました$xが、うまくいきません。Pig は常に、参照されたフィールドがリレーション内にあると考えますLIMIT

4

1 に答える 1

1

で親を参照できるPigの逆参照演算子.を使用する必要があります。あなたの例:

METRICS_SOURCE_TOP3 = foreach METRICS_SOURCE_WITH_CNT {

    SORTED = ORDER JOIN_FIELDS_ONLY by unique_pageviews DESC;
    TOPK = LIMIT SORTED 10;

    REVSORTED = ORDER JOIN_FIELDS_ONLY by unique_pageviews ASC;
    BOTTOMK = LIMIT REVSORTED METRICS_SOURCE_WITH_CNT.cnt;

    generate TOPK, BOTTOMK;
}

また、興味深いことに、0.10 より前の Pig はLIMITステートメントでスカラーをサポートしていなかったため、この種のステートメントは失敗していました。

于 2013-01-22T13:57:13.063 に答える