hive的列转行&行转列&拼接函数

列转行(一列转多行)

常用的列转行函数有:
lateral view explode(array或map类型的字段) tableAlias AS columnAlias
可以理解为,一个select子句只能获得一个explode产生的视图,但是炸裂后的返回视图无法与其它字段一同输出,如果想要显示多个列,就需要将多个视图合并,lateral view 侧视图就解决了这个问题。首先通过explode函数将array或map类型的字段炸裂为多行,接着将炸裂后的多行数据与原表的每行数据进行一个笛卡尔积的join,将结果形成一个虚拟表,同时可以对udtf炸裂后的字段设置别名

  • *hive内置的UDTF函数

udtf 函数说明 示例 输出 explode(ARRAY a) explode函数会将数组中的元素拆分,按行输出每个元素 select explode(array(‘zs’,’ls’,’ww’)) col

ww explode(MAP

zs 99

ls 66 posexplode(ARRAY a) 将数组炸裂为多行,返回两列,一列为数组中各元素所对应的索引下标(从0开始),一列为对应的元素。起别名时需要注意别名数量 select posexplode(array(‘zs’,’ls’,’ww’)) as (id,stu); id stu

0 zs

1 ls

2 ww inline(ARRAY

zs 0 58

ls 1 99 stack(int r,T1 V1,…,Tn/r Vn) 将 n列值 V1,… ,Vn 分解成 r 行。每行有 n/r 列。 r 必须是常数。n必须是r的整数倍 select stack(3,’a’,’1′,’2′,’s’,’3′,’x’); –将6个字段分解为3行,每行6/3=2个字段 col0 col1

a 1

2 s

3 x json_tuple(string jsonStr,string k1,…,string kn) 从一个JSON字符串中获取n个键的值并作为一个元组返回。该udtf至少需要传入两个参数,第一个参数为JSON字符串,从第二个参数开始为要获取的n个键。比get_json_object更有效便捷,只需要一个调用就可以获得多个键值 select json_tuple(‘{“name”:”zs”,”sex”:”0″,”age”:18}’,’name’,’sex’,’age’) as (name,sex,age); name sex age

zs 0 18 parse_url_tuple(string urlStr,string p1,…,string pn) 解析URL字符串,可以同时提取url的多个部分并以元组的形式返回,所有输入参数和输出列类型都是string。提取部分的有效参数为:HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY: select parse_url_tuple(‘https://www.baidu.com/zs?user_id=9999&platform=android’, ‘HOST’, ‘PATH’, ‘PROTOCOL’); c0 c1 c2

www.baidu.com /zs https

  • *LATERAL VIEW简介

语法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias (‘,’ columnAlias)*

用法:和UDTF函数一起使用,为原始表的每行数据调用UDTF函数炸裂为多行数据,lateral view 将原始表中的每一行和UDTF函数输出的每一行进行连接,生成一张新的虚拟表,可以对UDTF产生的记录设置字段名称。

作用:主要解决在select使用UDTF做查询的过程中查询只能包含单个UDTF,不能包含其它字段以及多个UDTF的情况,可以扩展原来的表数据。UDTF炸裂后的字段可以使用在 GROUP BY 、 CLUSTER BY 、 DISTRIBUTE BY 、 SORT BY 等语句中,无需再嵌套一层子查询。

  • *UDTF函数的限制

1、在SELECT子句中不支持UDTF函数和其他字段同时出现,只能获得一个udtf产生的视图。
如explode函数炸裂后的返回视图无法与其它字段一同输出,只能单独使用explode炸裂后的返回视图。

select
 'zs' as  uid,
 explode(array('chinese','math','english')) as info;

Error: Error while compiling statement: FAILED: SemanticException [Error 10081]:
UDTFs are not supported outside the SELECT clause, nor nested in expressions (state=42000,code=10081)

解决:
如果希望得到UDTF和其他字段的结果,需要结合lateral view使用

select
 uid,info
from
 (select 'zs' as uid) a
lateral view  explode(array('chinesee&#

Original: https://blog.csdn.net/weixin_43990245/article/details/125414883
Author: 里奶奶的
Title: hive的列转行&行转列&拼接函数

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/817714/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球