5

次の表を利用できると想像してください。

A: { x: int, y: int, z: int, ...99 other columns... }

ここで、これをwhereにz設定されるように変換し、結果のデータセットをとして保存します。NULLx > yB

これはメンテナンスの悪夢になるので、他のすべての列について明示的に言及することなく、それを実行したいと思います。

簡単な解決策はありますか?

4

4 に答える 4

2

この問題は、このJIRAで追跡されます 。PIG-1693「および残りのすべてのフィールド」を示すためにforeachに方法が必要です。

現在、私はあなたが言うことをするか、Zをロードせず、星の式で新しい列Zを追加するよりも簡単なことは何も知りません。

于 2011-01-14T17:06:17.413 に答える
0

単列バッグに入れ子にして、後で平らにすることで、カラムの膨張の一部を落とすことができました。

それでも、それはちょっとしたハックのように感じます。そのため、カスケードを調査して、自分のシナリオにより適しているかどうかを確認しています。

于 2011-01-18T18:27:17.620 に答える
0

シナリオを容易にする機能がPig0.9に追加されました。新しいプロジェクト範囲演算子(..)を使用すると、次の例のように、開始フィールド名や終了フィールド名を指定することで、フィールドの範囲を表すことができます。

結果=FOREACHsomeInput GENERATE field1、field2、null as field3、field4 ..;

上記の例では、field1/2/3/4は実際のフィールド名です。フィールドの1つはnullに設定され、他のフィールドはそのまま保持されます。

この「新しいApachePig0.9機能–パート3」の記事の詳細:http://hortonworks.com/blog/new-apache-pig-0-9-features-part-3-additional-features/

特定の問題を解決するには、おそらくFILTERとUNIONを実行して結果を結合する必要があります。

于 2014-05-30T14:54:57.107 に答える
0

もちろん、列番号で列を選択することもできますが、何かを変更すると、それは簡単に悪夢になります。列名の方がはるかに安定していることがわかったため、次の解決策をお勧めします。

2つの既知の列の間にあるときにmycolを更新します

..先頭または末尾の列(または列の間)を示すために使用できます。'MyCol'の値を'updatedvalue'に変更する場合は、次のようになります。

aliasAfter = FOREACH aliasBefore GENERATE 
             .. colBeforeMyCol, updatedvalue, colAfterMyCol ..;
于 2016-08-19T14:28:47.443 に答える