2016-10-02 45 views

回答

1

FLATTEN运算符在语法上看起来像UDF,但它实际上是一个运算符,它以UDF不能的方式更改元组和结构。展开un-nests元组以及袋子。这个想法是一样的,但每种结构的操作和结果都不相同。

对于元组来说,flatten用元组的字段代替元组。例如,考虑具有形式(a,(b,c))的元组的关系。表达式GENERATE $ 0,flatten($ 1)将导致该元组变为(a,b,c)。

对于手提包来说,情况会变得更加复杂。当我们取出一个包时,我们创建了新的元组。如果我们有一个由({(b,c),(d,e)})形式的元组构成的关系,并且我们应用GENERATE flatten($ 0),则最终得到两个元组(b,c)和(d,e)所示。当我们删除一个包中的嵌套层次时,有时会导致交叉产品发生。例如,考虑具有由GROUP运算符通常产生的形式(a,{(b,c),(d,e)})的元组的关系。如果我们应用表达式GENERATE $ 0,将这个元组展开($ 1),我们将创建新的元组:(a,b,c)和(a,d,e)。

你可以找到更多的信息link