我的用例是我在 hive 中有一个表,其中一列是 INT,一列是数组数据类型。我想水平显示它..
问问题
51330 次
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 回答