私のユースケースは、Hiveに1つのテーブルがあり、1つの列がINTで、もう1つが配列データ型であるというものです。横に表示したい。
分解関数は、コレクションデータ型の各要素を単一の行として表示します。
CREATE TABLE Products
(id INT, ProductName STRING, ProductColorOptions ARRAY<STRING>);
select * from products;
1時計[「赤」、「緑」]
2着[「青」、「緑」]
3冊[「青」、「緑」、「赤」]
select explode(ProductColorOptions ) from products;
赤
緑
しかし、idのような他の列と結合したいのですが、それはエラーにつながります。
その場合、Lateral Viewを使用する必要があります。LateralViewは、展開された列の仮想テーブルを作成し、ベーステーブルと結合します。
Hiveが内部で行うため、仮想テーブルについて心配する必要はありません。
SELECT p.id,p.productname,colors.colorselection FROM default.products P
LATERAL VIEW EXPLODE(p.productcoloroptions) colors as colorselection;
1時計赤
1時計グリーン
2着ブルー
簡単な説明ですが、テーブルに名前や資格などのデータがあるとします。
テーブルの内容:
Amar ["Btech","Mtech"]
Amala ["Bsc","Msc","Mtech"]
Akash ["Btech","Mba"]
テーブルの作成:
create table raw2(name string, qual array<string>);
クエリ:
select name, myq from <table> lateral view explode(qual) q as myq;
favouritesという名前、int型のID、文字列型の名前、および文字列型の配列のfav_songでテーブルを作成します。
Hive> CREATE TABLE Favourites
> (id INT, Name STRING, fav_song ARRAY<STRING>);
一般に、横方向のビューでは、共通の行をそのままにして、配列要素を連続した行に分散します。
例えば:
Hive> select * from Favourites;
ID名fav_song
1 Akshay ['Rang De Basanti'、 'Live it Up']
2ソナル['オールザスターズ'、 '1000年']
クエリを投稿した行は次のように表示されます。
Hive> SELECT p.id,p.name,colors.my_fav_song FROM default.Favourites P
LATERAL VIEW EXPLODE(p.fav_song) fv as my_fav_song;
ID名my_fav_song
1 Akshay Rang De Basanti
1 Akshay Live it Up
2ソナルオールザスターズ
2ソナル1000年