この例では、cogroupという、テーブル演算子への複数の入力とともに使用されるグループ化操作について説明します。条件を満たすすべての入力が1つのグループにグループ化されます。Cogroupは複数の入力のパーティション キーに一致するため、結果は正しいものになります。cogroupの使用により、複数の入力ストリームおよびディメンション テーブルとともに使用するテーブル演算子の機能が拡張されます。
以下の2つのテーブルがあると仮定します。
| WebLog | ||
|---|---|---|
| cookie | cart_amount | page |
| AAAA | $60 | Thankyou |
| AAAA | $140 | Thankyou |
| BBBB | $100 | Thankyou |
| CCCC | Intro | |
| CCCC | $200 | Thankyou |
| DDDD | $100 | Thankyou |
| AdLog | ||
|---|---|---|
| cookie | ad_name | action |
| AAAA | Champs | Impression |
| AAAA | Puppies | Click |
| BBBB | Apples | Click |
| CCCC | Baseball | Impression |
| CCCC | Apples | Click |
以下の問合わせを実行します。
SELECT cookie, cart_amt, adname, action
FROM attribute_sales (
ON (SELECT cookie,cart_amt FROM weblog
WHERE page = 'thankyou' ) as W PARTITION BY cookie
ON adlog as S PARTITION BY cookie) as result1 ;
入力は以下のテーブルのようにグループ化されます。
| Grouped and Nested Relations With the Cogroup on Cookie | ||
|---|---|---|
| Cookie | WebLog | AdLog |
| AAAA | AAAA,$60, thankyou AAAA,$140,thankyou |
AAAA,champs,impression AAAA,puppies,click |
| BBBB | BBBB,$100,thankyou | BBBB,apples,click |
| CCCC | CCCC,$200,thankyou | CCCC,baseball,impression CCCC,apples,click |
| DDDD | DDDD,$100,thankyou | |
問合わせの出力は以下のようになります。
| adname | attr_revenue |
| champs | $40 |
| puppies | $160 |
| apples | $240 |
| baseball | $40 |
テーブル演算子を呼び出すたびに、同じパーティション キー値を持つ入力のみが呼び出しに関与します。
AMP上にPARTITION BY ANYキー入力およびPARTITION BYキー入力の行がなく、問合わせでDIMENSION入力が使用される場合、そのAMP上でDIMENSIONテーブルに行があってもテーブル演算子は呼び出されません。