cogroup
- 内部 cogroup
- 左外部 cogroup
- 右外部 cogroup
- 完全外部 cogroup
内部 cogroup
1result = cogroup data_stream_1 by field1, data_stream_2 by field2;field1 と field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner', quota by 'Name'; のようになります。
例 - 内部 cogroup
たとえば、営業担当が各取引先とのミーティングにどれだけ時間をかけているかを把握したいとします。かける時間の多さと商談成立との間に関係があるのでしょうか? 営業担当によっては、かける時間が平均とは大きく異なるのでしょうか? これらの質問に答えるには、最初に cogroup を使用して、ミーティングデータを取引先データと組み合わせます。
Salesforce の行動オブジェクトから取得したミーティング情報のデータセットがあるとします。この例では、営業担当は 4 つの異なる会社と 6 回のミーティングを実施しました。「Meetings (ミーティング)」データセットには [MeetingDuration (ミーティング時間)] 列があり、この列にはミーティング時間 (時単位) が含まれます。

取引先データは Salesforce の商談オブジェクトに存在します。「Ops (運用)」データセットには、[Account (取引先)]、[Won (成立)]、[Amount (金額)] 列があります。[Amount (金額)] 列には、100 万ドル単位の商談金額が含まれます。

ミーティング時間が商談に及ぼす影響を確認するには、まず cogroup を使用してこの 2 つのデータセットを組み合わせて 1 つのデータストリームにまとめます。
1q = cogroup ops by 'Account', meetings by 'Company';内部的に (この結果をまだ参照できません)、共通グループ化されたデータストリームには次のデータが含まれます。データストリームが 1 つ以上のディメンションに基づいてどのように積み上げ集計されるかを確認してください。
1(1,{(Shoes2Go,2),(Shoes2Go,5)},{(Shoes2Go,1,1.5),(Shoes2Go,0,3})
2
3(2,{(FreshMeals,3),(FreshMeals, 1)},{(FreshMeals,1,2) (FreshMeals,1,1.4)})
4
5(3,{(ZipBikeShare,4)},{(ZipBikeShare,1,1.1)})
6
7(4,{(ZenRetreats,6)},{(ZenRetreats,0,2)})データセットを組み合わせました。データを参照するには、次のように foreach を使用して射影を作成します。
1ops = load "Ops";
2meetings = load "Meetings";
3q = cogroup ops by 'Account', meetings by 'Company';
4q = foreach q generate ops.'Account' as 'Account', sum(ops.'Amount') as 'sum_Amount', sum(meetings.'MeetingDuration') as 'TimeSpent';結果のデータストリームには、会社ごとの総額と総ミーティング時間が含まれます。総額は、会社の各商談金額の合計です。

データを組み合わせて 1 つのデータストリームにまとめました。これで、総ミーティング時間が商談に及ぼす影響を分析できます。
左外部 cogroup
1result = cogroup data_stream_1 by field1 left, data_stream_2 by field2;field1 と field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner' left, quota by 'Name'; のようになります。
例 - coalesce を使用した左外部 cogroup
営業担当が目標の何パーセントを達成したかを確認するとします。目標データセットには、各従業員の目標が示されています (Farah には目標がありません)。

商談データには、各従業員が成立させた商談金額が示されています (Jonathan には、成立した商談がありません)。

左外部 cogroup を使用して、目標がある従業員のみを表示します。また、目標達成率も表示します。
1quota = load "Quota";
2opp = load "Opportunity";
3q = group quota by 'Employee' left, opp by 'Employee';
4q = foreach q generate quota.'Employee' as 'Employee', trunc(sum(opp.'Amount')/sum(quota.'Quota')*100, 2) as 'Percent Attained';Jonathan は、まだ商談を成立させていないため、達成率は null です。

coalesce を使用して、null の商談をゼロに置換します。
1quota = load "Quota";
2opp = load "Opportunity";
3q = group quota by 'Employee' left, opp by 'Employee';
4q = foreach q generate quota.'Employee' as 'Employee', trunc(coalesce(sum(opp.'Amount'),0)/sum(quota.'Quota')*100, 2) as 'Percent Attained';これで Jonathan の達成率がゼロと表示されます。

右外部 cogroup
1result = cogroup data_stream_1 by field1 right, data_stream_2 by field2;field1 と field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner' right, quota by 'Name'; のようになります。
完全外部 cogroup
1result = cogroup data_stream_1 by field1 full, data_stream_2 by field2;field1 と field2 は、型は同じでなければなりませんが、名前は違うものにすることができます。たとえば、q=group ops by 'Owner' full, quota by 'Name'; のようになります。