この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

foreach

一連の式をデータセットの各行に適用します。このアクションは、射影と呼ばれることもあります。

構文

1q = foreach q generate expression as alias[, expression as alias ...];

出力列名は、as キーワードで指定されます。出力データはグループ化されません。

グループ化されていないデータでの foreach の使用

グループ化されていないデータで使用すると、foreach ステートメントは入力行を出力行に対応付けます。行数は同じままです。

a2 = foreach a1 generate carrier as carrier, miles as miles;

グループ化されたデータでの foreach の使用

グループ化されたデータで使用すると、foreach ステートメントはグループ化されていないデータの場合とは異なる動作をします。

項目は、その値がすべてのグループメンバーで同じ場合にのみ、直接アクセスできます。たとえば、グルーピングキーとして使用された項目の値がすべてのグループメンバーで同じ場合などです。同じではない場合は、集計関数を使用してグループのメンバーにアクセスします。列の型によって、使用できる集計関数が決まります。たとえば、列の型が数値の場合、sum() 関数を使用できます。

z = foreach y generate day as day, unique(origin) as uorg, count() as n;

case 式での foreach の使用

いずれかの条件ステートメントを選択する foreach ステートメントでロジックを作成するには、case 式を使用します。

次のクエリ例では、単純な case 式構文が使用されています。
1q = load "data";
2q = foreach q generate xInt, (case xInt % 3 
3      when 0 then "3n"     
4      when 1 then "3n+1"    
5      else "3n+2"
6end) as modThree;

次のクエリ例では、検索 case 式構文が使用されています。
1q = load "data";
2q = foreach q generate price, (case     
3      when price < 1000 then "category1"     
4      when price >= 1000 and price < 2000 then "category2"    
5      else "category3"
6end) as priceLevel;

一意の名前の使用

射影で名前を複数回使用するとエラーが発生します。

たとえば、次のクエリの最終行は無効で、エラーが発生します。
1l = load "0Fabb000000002qCAA/0Fabb000000002WCAQ";
2r = load "0Fcyy000000002qCAA/0Fcyy000000002WCAQ";
3l = foreach l generate 'value'/'divisor' as 'value' , category as category;
4r = foreach r generate 'value'/'divisor' as 'value' , category as category;
5cg = cogroup l by category right, r by category;
6cg = foreach cg generate r.category as 'category', sum(r.value) as sumrval, sum(l.value) as sumrval;