赞
踩
将 arrary 或 map 结构数据拆分成多行,并返回拆分后的每个元素。
select explode(arraycol) as newcol from tablename;
-- data表 源数据 id | names --------------- 1 | ["Alice", "Bob"] 2 | ["Charlie", "Dave", "Eve"] -- 使用explode函数拆分names列 SELECT explode(names) AS name FROM data; -- 输出结果 name -------- Alice Bob Charlie Dave Eve
select explode(mapcol) as (keyname,valuename) from tablename;
注意:这两个值需要在 as 之后用括号括起来然后以逗号分隔。
-- 源数据 id | info --------------- 1 | {"name":"Alice", "age":25} 2 | {"name":"Bob", "age":30, "gender":"Male"} -- 使用explode(map)函数拆分info列 select explode(info) as (kkk, vvv) from data; -- 输出结果 kkk | vvv -------------------- name | Alice age | 25 name | Bob age | 30 gender | Male
将 arrary 数据(不能用于map数据)拆分成多行,并返回拆分后的 行索引 和 对应的 arrary 元素 。
select posexplode(arraycol) as newcol from tablename;
-- data表 源数据 id | names --------------- 1 | ["Alice", "Bob"] 2 | ["Charlie", "Dave", "Eve"] -- 使用posexplode函数拆分names列 SELECT posexplode(names) AS (pos, name) FROM data; -- 输出结果 pos | name ---------------- 0 | Alice 1 | Bob 0 | Charlie 1 | Dave 2 | Eve
lateral view 是 Hive 中提供给 UDTF 函数使用的,它可以解决使用 UDTF 后不能添加额外 select 列的问题。
lateral view 会将 UDTF 生成的结果放到一个虚拟表中,然后这个虚拟表会和 输入行 进行 join 来达到关联 UDTF 外的 select 字段的目的。
-- 语法
lateral view udtf(expression) tableAlias as columnAlias (,columnAlias)*
-- data表 源数据 id | names --------------- 1 | ["Alice", "Bob"] 2 | ["Charlie", "Dave", "Eve"] -- 使用explode函数拆分names列,并查询出 id列 SELECT id, name FROM data lateral view explode(names) tmp as name; -- 输出结果 id | name -------------- 1 | Alice 1 | Bob 2 | Charlie 2 | Dave 2 | Eve
-- data表 源数据 id | info --------------- 1 | {"name":"Alice", "age":25} 2 | {"name":"Bob", "age":30, "gender":"Male"} -- 使用explode(map)函数拆分info列,并查询出 id列 SELECT id, key, value FROM data LATERAL VIEW explode(info) tmp AS key, value; -- 输出结果 id | key | value -------------------------- 1 | name | Alice 1 | age | 25 2 | name | Bob 2 | age | 30 2 | gender | Male
-- data表 源数据 id | names --------------- 1 | ["Alice", "Bob"] 2 | ["Charlie", "Dave", "Eve"] -- 使用posexplode函数拆分names列 SELECT id, pos, name FROM data LATERAL VIEW posexplode(names) tmp AS pos, name; -- 输出结果 id | pos | name ---------------------- 1 | 0 | Alice 1 | 1 | Bob 2 | 0 | Charlie 2 | 1 | Dave 2 | 2 | Eve
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。