web-dev-qa-db-ja.com

配列として1列のHiveテーブルを使用したサンプル例を含むHiveの側面図

私のユースケースは、Hiveに1つのテーブルがあり、1つの列がINTで、もう1つが配列データ型であるというものです。横に表示したい。

4
Nakul Dev

分解関数は、コレクションデータ型の各要素を単一の行として表示します。

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着ブルー

6
Rohit Yadav

簡単な説明ですが、テーブルに名前や資格などのデータがあるとします。

テーブルの内容:

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年

1