2015-04-02 34 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。