IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive sql 按照字段拆分之后(列转行)进行映射,再进行列转行 -> 正文阅读

[大数据]hive sql 按照字段拆分之后(列转行)进行映射,再进行列转行

这个需求会稍微复杂一点:
首先我们有一张 table_A表:

idcode
10010,1,3,4
10022,3
10030,24

还有一张 code表

codecode_value
0法人
1董事
2股东
3监事
4高管

我们现在的需求是想把code表的value按照code值给映射回table_A ,如下:

idcode
1001法人,董事,监事,高管
1002股东,监事
1003法人,股东,高管

使用Hive SQL来实现具体如下:

一、先进行按字段拆分,列转行
其语法如下:

select  f.id, f.code, new_code 
from
    (select id,code_value  from table_A 
     where 字段x = 条件x
     ) f  
lateral view explode(split(a.code, ',')) myTable as new_code;

这一步会将code字段的0,1,2,3拆分开。
注意,这里的new_code不属于f表,不需要加f.。

二、拆分完成以后进行case when映射

select t.id, t.code,
       case new_code 
       when '0' when '法人'
       when '1' when '董事'
       when '2' when '股东' 
       when '3' when '监事'
       when '4' when '高管'
       end as new_value
from       
        (select  f.id, f.code,new_code 
        from
             (select id,code_value  from table_A 
              where 字段x = 条件x
              ) f  
        lateral view explode(split(a.code, ',')) myTable as new_code
        ) t;

三、映射结束以后再使用 concat_ws进行列转行

select v.id, concat_ws(',', collect_list(new_value)) as concat_value
from
      (
        select t.id, t.code,
               case new_code 
               when '0' when '法人'
               when '1' when '董事'
               when '2' when '股东' 
               when '3' when '监事'
               when '4' when '高管'
               end as new_value 
       from
        (select  f.id, f.code,new_code 
        from
             (select id,code_value  from table_A 
              where 字段x = 条件x
              ) f  
        lateral view explode(split(a.code, ',')) myTable as new_code
        ) t
    ) v   
group by  v.id;

第三步结束就可以直接打成我们的需求了。
但是一般实际的生产过程中,表会复杂很多,也会有其他的字段,这里可能最终还需要进行把多余的字段join回去,这里不在赘述。

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:50:33  更:2022-08-06 10:52:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 0:16:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码