2015-04-02 28 views
0

我有一个表是这样的:蜂巢横向视图两个列表列

product quantitylist pricelist 
product1 [1,10,100]  [3,2,1] 
product2 [1]    [3] 
product3 [1,10]   [3,1] 

我想这样的输出:

product quantity  price 
product1 1    3 
product1 10    2 
product1 100    1 
product2 1    3 
product3 1    3 
product3 10    1 

我试图用横向视图,但是当我用横向视图与多列表列,它开始建立所有的排列和组合..这导致了大量的重复。

SELECT 
    * 
FROM p1part 
LATERAL VIEW explode(quantitylist) adTable AS quantity 
LATERAL VIEW explode(pricelist) adTable1 AS price 

它给了我:

product quantity  price 
product1 1    3 
product1 1    2 
product1 1    1 
product1 10    3 
product1 10    2 
product1 10    1 
product1 100    3 
product1 100    2 
product1 100    1 
... 

谁能告诉我如何做正确?

回答

0

这是因为第一个lateral view为您提供了每个quantity值与price阵列的组合。我会尽量使用transform

1.增加一个python脚本transer.py

#coding=utf8 
import sys 
for line in sys.stdin: 
    product, quantitylist, pricelist = line.strip().split('\t') 
    quantitylist = quantitylist.split(',') 
    pricelist = pricelist.split(',') 
    if len(quantitylist) != len(pricelist): 
     continue 
    for i in range(len(quantitylist)): 
     print "\t".join([product, quantitylist[i], pricelist[i]]) 

2.Before您的蜂巢的查询,通过

add file transer.py; 

3.Run添加这个脚本由

select transform(product, quantitylist, pricelist) 
using 'python transer.py' 
as (product, quantity, price) 
from YOUR_TABLE_NAME 

变换BTW。你也可以尝试自己编写一个UDTF。