Hive函数-UDTF-炸裂函数-lateral view

一、概述

在hive中,udtf(user defined tableGenerating function)是指接收一行数据,输出一行或者多行数据的函数,也称制表函数,通常指的是炸裂函数。炸裂函数最常见的操作是lateral view结合explode函数进行使用。

二、常见的炸裂函数

(1)explode(array<T> a)

explode函数,可以将每个数组元素拆分成多行,每行包含一个元素。

如通过以下建表语句创建表并插入数据:

CREATE TABLE user_data (id INT, items ARRAY<STRING>);

INSERT INTO user_data VALUES 
(1, ARRAY('apple', 'banana', 'cherry')),
(2, ARRAY('grape', 'orange'));

使用 explode 函数可以将每个 items 数组中的元素展开为单独的行:

SELECT id, item 
FROM user_data 
LATERAL VIEW explode(items) exploded_table AS item;

输出结果如下所示:
iditem

1

apple
1banana
1cherry
2grape
2orange

(2) posexplode(array<T> a)

posexplode函数与explode函数类似,也是对数组元素进行拆分返回多行,不过posexplode函数还会额外返回一列元素在数组中的pos位置信息。

如对上面的表数据应用posexplode:

SELECT id, pos, item FROM user_data

LATERAL VIEW posexplode(items) exploded_table AS pos, item;

输出结果如下:

idpositem
10apple
11banana
12cherry
20grape
21orange

(3) inline(array<struct<f1,t1,...,fn,tn>>)

inline函数用于将结构体数组进行展开,结构体数组的每一个结构体是一行,一个结构体的每个字段都会展开成表的列。

如创建以下表,并插入数据:

CREATE TABLE user_data (id INT, items ARRAY<STRUCT<name: STRING, price: INT>>);

INSERT INTO user_data

VALUES (1, ARRAY(NAMED_STRUCT('name', 'apple', 'price', 5),NAMED_STRUCT('name', 'banana', 'price', 2))),

(2, ARRAY(NAMED_STRUCT('name', 'orange', 'price', 3), NAMED_STRUCT('name', 'grape', 'price', 4)));

用inline函数展开结构体数组:

SELECT id, name, price

FROM user_data

LATERAL VIEW inline(items) exploded_table AS name, price;

输出结果如下:

idnameprice
1apple5
1banana2
2orange3
2grape4

三、lateral view 

lateral view成为侧视图,通常与炸裂函数配合使用,可以将炸裂函数应用到源表的每一行数据上,让每个被展开的元素与原始表的每一行数据连接在一起,将每行数据转换为一行或多行,形成一个虚拟表。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值