Hive的Lateral View


Lateral View用于把UDTF的行转列结果集合在一起提供服务。Lateral View可以返回多列数据,前提是UDTF注册的输出个数。

UDTF代码参考:hive/src/ql/src/java/org/apache/hadoop/hive/ql/udf/generic/GenericUDTFExplode.java

准备数据

CREATE TABLE test_array (a array<int>, b array<string>)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '`'
COLLECTION ITEMS TERMINATED BY ',';

测试数据,保存文件为/tmp/test

10,11`tom,mary
20,21`kate,tim

导入数据

LOAD DATA LOCAL inpath '/tmp/test' overwrite INTO TABLE test_array;

测试

hive> SELECT explode(b) AS name, a FROM test_array;
FAILED: SemanticException 1:27 ONLY a single expression IN the SELECT clause IS supported WITH UDTF's. Error encountered near token 'a'

UDTF只能select单列

使用LATERAL VIEW

hive> SELECT a, name FROM test_array LATERAL VIEW explode(b) r1 AS name;
[10,11]	tom
[10,11]	mary
[20,21]	kate
[20,21]	tim

可以有多个lateral view

hive> SELECT id, name FROM test_array LATERAL VIEW explode(b) r1 AS name LATERAL VIEW explode(A) r2 AS id;
10	tom
11	tom
10	mary
11	mary
20	kate
21	kate
20	tim
21	tim

参考

hive中的Lateral View

转自:http://ju.outofmemory.cn/entry/30251

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值