hive 之 行拆列explode,lateral view

1、explode

explode(ARRAY) 列表中的每个元素生成一行
explode(MAP) map中每个key-value对,生成一行,key为一列,value为一列
image
限制:
1、No other expressions are allowed in SELECT

    SELECT pageid, explode(adid_list) AS myCol... is not supported

2、UDTF's can't be nested

    SELECT explode(explode(adid_list)) AS myCol... is not supported

3、GROUP BY / CLUSTER BY / DISTRIBUTE BY / SORT BY is not supported

    SELECT explode(adid_list) AS myCol ... GROUP BY myCol is not supported

2、lateral view

可使用lateral view解除以上限制,语法:

lateralView: LATERAL VIEW explode(expression) tableAlias AS columnAlias (',' columnAlias)*
fromClause: FROM baseTable (lateralView)*

案例:

table名称为pageAds

image

SELECT pageid, adid

FROM pageAds LATERAL VIEW explode(adid_list) adTable AS adid;

输出结果:
image

3、多个lateral view

from语句后面可以带多个lateral view语句

案例:

表名:baseTable

image

from后只有一个lateral view:

SELECT myCol1, col2 FROM baseTable

LATERAL VIEW explode(col1) myTable1 AS myCol1;

结果:
image

多个lateral view:

SELECT myCol1, myCol2 FROM baseTable

LATERAL VIEW explode(col1) myTable1 AS myCol1

LATERAL VIEW explode(col2) myTable2 AS myCol2;

结果:

image

4、Outer Lateral Views

如果array类型的字段为空,但依然需返回记录,可使用outer关键词。

比如:select * from src LATERAL VIEW explode(array()) C AS a limit 10;

这条语句中的array字段是个空列表,这条语句不管src表中是否有记录,结果都是空的。

而:select * from src LATERAL VIEW OUTER explode(array()) C AS a limit 10;

结果中的记录数为src表的记录数,只是a字段为NULL。

比如:

238 val_238 NULL
86 val_86 NULL
311 val_311 NULL
27 val_27 NULL
165 val_165 NULL
409 val_409 NULL
255 val_255 NULL
278 val_278 NULL
98 val_98 NULL

### 回答1: Hive 中的 lateral view explode 是用来将一个表中的一列数组类型的数据拆分成多,每一对应数组中的一个元素。这样可以方便地对数组中的元素进计算和分析。使用方法如下: ``` SELECT ... FROM table_name LATERAL VIEW explode(array_column_name) exploded_table_alias AS column_alias ``` 其中 array_column_name 是数组类型的列名,exploded_table_alias 是拆分后的表的别名,column_alias 是拆分后新增的列的别名。 ### 回答2: Hive Lateral View ExplodeHive 的一种语法,可以将数组或者 Map 类型的列,展开成多数据。Lateral View 关键字是用来处理嵌套类型的数据,而 Explode 函数可以将数组或 Map 类型的列展开成多数据,每一包含一组键值对或值。这个语法语句会将每个数组或 Map 对象分解成独立的,其中包含了键和值。这样对于数组或 Map 中的数据就可以进分组、过滤、排序等操作,这种方式可以方便的处理多类型数据。 它的基本语法如下: select a.id, b.device_name from user_info a lateral view explode(a.devices) b as device_name; 这个语句的主要作用是将 user_info 表中的 devices 列展开成多数据,每数据包含一个用户设备名称和设备id。此时,可以通过 device_name 字段来分组、过滤、聚合等操作,从而方便地对数据进处理。Lateral ViewExplode 结合使用,可以方便的处理复杂数据类型,挖掘数据更深层次的信息,使数据分析更加高效、方便、精准。 总的来说,Hive Lateral View Explode 能够方便地将数组或 Map 类型的列进展开,使得数据处理更加方便和高效。使用它可以应对各种统计需求,分析更加深入有效。同时也要注意到 Lateral View Explode 这种语法可能会影响计算效率,因此在实际的使用中需要仔细设计和优化查询语句,以提高计算效率。 ### 回答3: Hive Lateral View Explode 是在 Hive 中用于将一个数组或 Map 字段转换为的扩展函数。它通过创建新来展开数组或 Map 字段中的每个元素,以便更容易地进查询和分析。 在 Hive 中,数组和 Map 字段是常见的数据类型,用于存储多个值或键值对。但是,这些类型常常难以查询和分析,因为它们不能直接展开成一些Lateral View Explode 解决了这个问题。它允许将数组和 Map 字段展开成多,这样就可以更轻松地进分析和查询。 使用 Lateral View Explode 函数,可以将数组字段展开成多,每包含数组中的一个元素。例如,假设有一个包含成绩的数组字段 grades,它包含多个数字。使用 Lateral View Explode 函数,可以将 grades 字段展开成新的一组,每一包含一个成绩。 另外,Lateral View Explode 也可用于 Map 字段,使每个键值对都展开成一Lateral View Explode 还可以与其他 Hive 函数结合使用,以进一步扩展查询。 总之,Lateral View ExplodeHive 中一个重要的扩展函数,它可将数组和 Map 字段转换成,方便查询和分析。使用 Lateral View Explode 函数可以大大简化数据分析的过程,提高查询效率,并使数据更加有用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值