8

我的用例是我在 hive 中有一个表,其中一列是 INT,一列是数组数据类型。我想水平显示它..

4

3 回答 3

16

Explode 函数将集合数据类型的每个元素显示为单行。

CREATE TABLE Products
(id INT, ProductName STRING, ProductColorOptions ARRAY<STRING>);
select * from products;

1 手表 [“红色”、“绿色”]

2 件衣服 [“蓝色”、“绿色”]

3 本书 [“蓝色”、“绿色”、“红色”]

select explode(ProductColorOptions ) from products;

红色的

绿色的

但我想加入 id 等其他列,但这会导致错误。

在这种情况下,我们需要使用横向视图。横向视图为分解列创建一个虚拟表,并与基表进行连接。

我们不必担心虚拟表,因为它是由 hive 内部完成的。

SELECT p.id,p.productname,colors.colorselection FROM default.products P
LATERAL VIEW EXPLODE(p.productcoloroptions) colors as colorselection;

1 手表红色

1 手表绿色

2衣服蓝色

于 2018-12-04T06:41:28.963 回答
5

简单的解释,假设您的表具有名称和资格等数据

表格内容:

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;
于 2016-08-25T10:16:59.703 回答
2

创建名称为 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 Sonal ['全明星','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 阿克谢·朗·德·巴桑蒂

1 Akshay 活下去

2 索纳尔全明星

2 索纳尔 1000 年

于 2018-07-25T11:40:12.407 回答