2016-06-02 5 views
3

コンマで区切られたデータに基づいて列を分割する方法を探しています。以下は私のデータセットハイブ - 複数の行で区切られた列を分割し、位置に基づいて選択

id col1 col2 
1 5,6 7,8 

である私は、私はそれに応じて結果をフェッチする必要があるため、インデックスの位置が一致している必要があり、結果

id col1 col2 
1 5 7 
1 6 8 

を取得したいです。

私は以下のクエリを試しましたが、デカルト積を返します。

クエリ

SELECT col3, col4 
FROM test ext 
lateral VIEW explode(split(col1,'\002')) col1 AS col3 
lateral VIEW explode(split(col2,'\002')) col2 AS col4 

結果

id col1 col2 
1 5 7 
1 5 8 
1 6 7 
1 6 8 
+0

可能な複製([ハイブが爆発/横方向に複数のアレイを表示] http://stackoverflow.com/questions/20667473/hive-explode -lateral-view-multiple-arrays) – gobrewers14

答えて

3

あなたは、分割アレイ用の位置インデックスの列を作成するposexplode()を使用することができます。次に、位置インデックスが等しい行だけを選択します。

SELECT id, col3, col4 
    FROM test 
    lateral VIEW posexplode(split(col1,'\002')) col1 AS pos3, col3 
    lateral VIEW posexplode(split(col2,'\002')) col2 AS pos4, col4 
    WHERE pos3 = pos4; 

出力:

id col3 col4 
1 5 7 
1 6 8 

参考:Hive language manual - posexplode()

+0

これは非常に非効率的です。 – gobrewers14

+0

これは、両方の列に同じサイズがある場合にのみ機能します。分割後のサイズに違いがある場合はどうすればいいですか?その場合にはnullが予想されます。ここで助けてもらえますか – divyabharathi

関連する問題