hive 回顾---字段拆分为 多行+多列

 

一、拆分为多行
 


     
     
  1. 测试数据:
  2. huangbo a,1:b,2:c,3
  3. xuzheng a,4:b,5:c,6
  4. wangbaoqiang a,7:b,8:c,9
  5. ---创建表的语句:
  6. create table testMap( name string,info map< string, int>) row format delimited fields terminated by '\t' collection items terminated by ':' map keys terminated by ',';
  7. load data local inpath '/opt/hive_test.txt' into table testMap;

展示效果:


     
     
  1. ---实现行转列---使用lateral view exlode()
  2. case1 ----数据为map
  3. select m.name, tf.key, tf.value from testMap m lateral view explode(m.info) tf as key, value;


     
     
  1. case2 ----数据为Array
  2. 数据源:
  3. 1 子宫病损切除术,经宫腔镜|扩张和刮宫术,诊断性
  4. 2 胫骨内固定装置去除术|腓骨内固定装置去除术
  5. 3 腰椎穿刺术|腰椎穿刺术|腰椎穿刺术
  6. --创建语句
  7. Create table testArray( name string, ssmc array< string> ) row format delimited fields terminated by '\t' collection items terminated by '|';

--展示结果


     
     
  1. --拆分为多行:
  2. select name,ss.ssmc from testArray lateral view explode(testArray.ssmc) ss as ssmc;

--拆分结果:

case3--数据为String

--拆分为多行:
select name,ss.ssmc from testStr lateral view explode(split(ssmc,"\\|")) ss as ssmc;

--拆分结果

 

二、拆分为多列


     
     
  1. 二、拆分为多列
  2. case1 ---字段数据为Array
  3. select name,ssmc[ 0] as ssmc1,ssmc[ 1] as ssmc2,ssmc[ 2] as ssmc3 from testArray;
  4. case2 ---字段数据为String
  5. select t.name,t.ssmcs[ 0] as ssmc1,t.ssmcs[ 1] as ssmc2,t.ssmcs[ 2] as ssmc3 from (
  6. select name, split(ssmc, "\\|") as ssmcs from testArray) t

 

<ins class="adsbygoogle"></ins>
</div>
                                    </div>
                                        </div>            </div>
                  </div>
</article>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值