7

マニュアル/ドキュメントでは、「インナー バッグ」と「アウター バッグ」の言語が広範に使用されています (例: http://pig.apache.org/docs/r0.11.1/basic.html )。用語を分離する正確な定義を明確に示します。

たとえば、すべてが本質的に相互に関連しています。

  • 「foo」というバッグを渡す場合、foo を「内側のバッグ」と「外側のバッグ」のどちらにラベル付けするために何を知る必要がありますか?
  • 一番外側のバッグではない「どんなバッグ」も「内側のバッグ」ですか?
  • インナーとアウターのラベルは常に排他的ですか?
  • PigLatin では、すべての「バッグ」は「関係」ですか? それとも「最も外側のバッグ」だけが関係ですか? (内袋とは関係ありません)

議論可能な例を作成するには:

grunt> dump A;      
(1,2,3)
(4,2,1)
(8,3,4)
(4,3,3)


grunt> W1 = GROUP A   ALL;         
grunt> W2 = GROUP W1  ALL;
grunt> W3 = GROUP W2  ALL;
grunt> W4 = GROUP W3  ALL;

grunt> describe W4;
W4: {group: chararray,W3: {(group: chararray,W2: {(group: chararray,W1: {(group: chararray,A: {(f1: int,f2: int,f3: int)})})})}}


grunt> illustrate W4;
(1,2,3)
---------------------------------------------------
| A     | f1:int      | f2:int      | f3:int      | 
---------------------------------------------------
|       | 1           | 2           | 3           | 
|       | 8           | 3           | 4           | 
---------------------------------------------------
------------------------------------------------------------------------------------------------
| W1     | group:chararray      | A:bag{:tuple(f1:int,f2:int,f3:int)}                          | 
------------------------------------------------------------------------------------------------
|        | all                  | {(1, 2, 3), (8, 3, 4)}                                       | 
------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------------------------------------------------
| W2     | group:chararray      | W1:bag{:tuple(group:chararray,A:bag{:tuple(f1:int,f2:int,f3:int)})}                                         | 
-----------------------------------------------------------------------------------------------------------------------------------------------
|        | all                  | {(all, {(1, 2, 3), (8, 3, 4)})}                                                                             | 
-----------------------------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| W3     | group:chararray      | W2:bag{:tuple(group:chararray,W1:bag{:tuple(group:chararray,A:bag{:tuple(f1:int,f2:int,f3:int)})})}                                                        | 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|        | all                  | {(all, {(all, {(1, 2, 3), (8, 3, 4)})})}                                                                                                                   | 
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| W4     | group:chararray      | W3:bag{:tuple(group:chararray,W2:bag{:tuple(group:chararray,W1:bag{:tuple(group:chararray,A:bag{:tuple(f1:int,f2:int,f3:int)})})})}                                                                       | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|        | all                  | {(all, {(all, {(all, {(1, 2, 3), (8, 3, 4)})})})}                                                                                                                                                         | 
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

grunt> dump W4;
(all,{(all,{(all,{(all,{(1,2,3),(4,2,1),(8,3,4),(4,3,3)})})})})

バッグの中で - W1、W2、W3、W4 - どれが内側で、どれが外側ですか?

4

1 に答える 1

4

外袋は実際関係ありAます。ちょっと変な話ですが、インナーバッグとは何かを知ればわかると思います。W1ネストされたバッグを持っていても答えは変わらないので、読みやすくするために を見てみましょう。

のスキーマと出力W1:

W1: {group:chararray, A:bag{:tuple(f1:int,f2:int,f3:int)}}
(all,{(1, 2, 3), (8, 3, 4)})

バッグであるW1namedのフィールドであることがわかります。A関係でバッグは畑なのでインナーバッグです。

バッグは順序付けされていないタプルの集合であることに注意してください。これが の出力であることがわかりますW1。ここで、 relationship の出力を見てくださいA

(1,2,3)
(4,2,1)
(8,3,4)
(4,3,3)

Pig は、これらのタプルの順序を保証しません (あなたORDERか何かでない限り)。したがって、考えてみると、関係Aは実際には順序付けられていないタプルのセットです。アウターバッグです。

このいくつかの例をここで見つけることができます。

于 2013-10-08T09:13:07.247 に答える