Hive行列互转

目录

一:行转列

1:lateral view---行转列

2:explode函数

3:例子

 二:列转行

1:概念

2:例子


一:行转列

1:lateral view---行转列

lateral view用于和split, explode(展开)等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

一列:直接上面

select 字段,新字段 from 表名 lateral view explode(score) s as 新字段;

多列

select 字段,新字段... from 表名 lateral view explode(score...等字段) s as 新字段....;

s是虚拟的表的名称

2:explode函数

参数仅接受array和map类型,不支持两个一起用。所以lateral view可以解决。

3:例子

(1:当需要转列的数据是数组时、

创建表

create table testArray2(
    name string,
    weight array<string>
)row format delimited 
fields terminated by '\t'
COLLECTION ITEMS terminated by ',';

数据:


小华   "150","170","180"
小明    "150","180","190"

sql语句:

 select name,col1  from testarray2 lateral view explode(weight) t1 as col1;

结果:

小华    150
小华  170
小华    180
小明    150
小明    180
小明    190

 (2:当需要转的是map时(或者其他多个字段数据时)

select key from (select explode(map('key1',1,'key2',2,'key3',3)) as (key,value)) t;

key1
key2
key3

 二:列转行

1:概念

collect_list collect_map转成list或者map列转行

select 字段 collect_list(字段) from 表名 group by 字段;

2:例子

建表

create table testLieToLine(
    name string,
    col1 int
)row format delimited 
fields terminated by '\t';

数据

小明    150
小明    170
小明   180
小华    150
小华    180
小华    190
 

sql:

select name,collect_list(col1) from testLieToLine group by name;

结果:
小明    ["150","180","190"]
小华    ["150","170","180"] 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hive中,contact是一个API中的方法或者函数。根据引用所提到的目录,可能存在一些与contact相关的方法,如client.new_contact、client.update_contact、client.contacts_tags和client.contacts_subscribers。这些方法可能用于处理联系人信息和标签。除此之外,引用和引用中也提到了一个concat函数,它可以用来拼接字符串类型的数据。例如,concat(aa, ':', bb)可以将aa列和bb列用冒号连接起来,形成aa:bb的结果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [wix-hive-ruby:Wix Hive API 的 Ruby 接口](https://download.csdn.net/download/weixin_42133415/19644398)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [hive中的contact,concat_ws,collect_set(),explode实现行列互转](https://blog.csdn.net/jsbylibo/article/details/82859168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [hive中的拼接函数contact,concat_ws,collect_set()及explode(),lateral view函数](https://blog.csdn.net/shuyun123456789/article/details/104726756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值