2017-05-14 8 views
0

私は、単一のテーブル(サイズ約12GB)上で単一のクエリで複数回(約9回)ラテラルビューを使用しました。これにより、膨大な量のマップサイドデータ(100Pb +)が生成されました。私はそれが12GBからこの量のデータをどのように生成したのか理解できませんでした。ハイブラテラルビュー爆発内部メカニズム

誰かが横方向の爆発が(内部的に)どのように機能するか説明できますか?事前に

おかげ

答えて

1

デモ

create table mytable (a1 array<int>,a2 array<int>,a3 array<int>); 
insert into mytable select array(1,2),array(3,4,5),array(6,7,8,9); 

select * 

from mytable 
     lateral view explode (a1) e1 as a1_val 
     lateral view explode (a2) e2 as a2_val 
     lateral view explode (a3) e3 as a3_val 
;   

+-------+---------+-----------+--------+--------+--------+ 
| a1 | a2 | a3  | a1_val | a2_val | a3_val | 
+-------+---------+-----------+--------+--------+--------+ 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  3 |  6 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  3 |  7 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  3 |  8 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  3 |  9 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  4 |  6 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  4 |  7 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  4 |  8 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  4 |  9 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  5 |  6 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  5 |  7 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  5 |  8 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  1 |  5 |  9 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  3 |  6 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  3 |  7 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  3 |  8 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  3 |  9 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  4 |  6 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  4 |  7 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  4 |  8 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  4 |  9 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  5 |  6 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  5 |  7 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  5 |  8 | 
| [1,2] | [3,4,5] | [6,7,8,9] |  2 |  5 |  9 | 
+-------+---------+-----------+--------+--------+--------+  
+0

こんにちはドゥドゥ、答えてくれてありがとう。私は側面図の内部メカニズムが爆発し、Hiveがクエリを内部的にどのように実行するのかを知りたい。 –

+0

内部はあなたの問題とは関係ありません。配列分解は要素ごとにレコードを生成します。爆発する複数の配列は、製品結合と同じです。 –

+0

申し訳ありませんDudu、私は忘れました。ありがとう。 –