什么是'外袋'和'内袋'在Pig拉丁语的区别?

zlwx9yxi  于 2021-06-25  发布在  Pig
关注(0)|答案(1)|浏览(398)

手册/文件广泛使用“内袋”和“外袋”的语言(例如:http://pig.apache.org/docs/r0.11.1/basic.html ),但我还没能明确区分这些术语的确切定义。
e、 g.所有内在的相互关联:
如果我给你一个袋子“foo”,你需要知道什么才能把foo标记为“内袋”而不是“外袋”?
不是最外层袋子的“任何袋子”是“内层袋子”吗?
内部和外部的标签总是排他性的吗?
在古拉丁语中,所有的“包”都是“关系”,还是只有“最外层的包”是一种关系(与内袋无关)
创建一个可讨论的示例:

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——哪个在里面,哪个在外面?

klsxnrf1

klsxnrf11#

外袋其实是关系 A . 这有点奇怪,但一旦你知道什么是内袋,你就会明白了。让我们看看 W1 ,以便于阅读,因为嵌套的袋子不会改变答案。
的架构和输出 W1 :

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

我们可以看到他们是一个领域 W1 命名 A 这是一个袋子。这是一个内部包,因为包是关系中的一个字段。
请记住,包只是无序的元组集,我们可以看到这是的输出 W1 . 现在,看看关系的输出 A :

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

pig不保证这些元组的顺序(除非 ORDER 或者别的什么)。所以,如果你仔细想想 A 实际上只是一组无序的元组。这是一个外袋。
你可以在这里找到一些这样的例子。

相关问题