精华内容
下载资源
问答
  • Hive行转列、列转行

    2020-12-29 13:18:56
    hive 行转列,列转行

    目录

    行转列

    列转行


    行转列

    数据准备:

    create table stu_score(
        stu_id string,
        english bigint,
        math bigint,
        science bigint
    );
    
    insert into stu_score values
        ('甲',100,90,95),
        ('乙',95,90,100),
        ('丙',65,99,88);

    行转列: 主要用到 Leteral view explode

    select 
         stu_id
        ,subject,score
    from stu_score 
    LATERAL VIEW explode (
        map(
        'english',english,
        'math',math,
        'science',science
            ) ) tmp  
        as subject,score;

    列转行

    数据准备:

    -- 直接拿行转列的结果演示
    create table stu_score_row  
    as
        select 
             stu_id
            ,subject,score
        from stu_score 
        LATERAL VIEW explode (
            map(
            'english',english,
            'math',math,
            'science',science
                ) ) tmp  
            as subject,score;

    列转行:主要用到 concat_wc collect_list

    select 
        stu_id
        ,concat_ws(',',collect_list(subject)) as subs
    from stu_score_row
     group by stu_id
     ;
    
    -- collect_list 不去重,collect_set 去重。 字段类型需要是String

    希望本文对你有帮助,请点个赞鼓励一下作者吧~ 谢谢!

     

    展开全文
  • 一、行转列的使用1、问题hive如何将a b 1a b 2a b 3c d 4c d 5c d 6变为:a b 1,2,3c d 4,5,62、数据test.txta b 1a...

    一、行转列的使用

    1、问题

    hive如何将

    a       b       1

    a       b       2

    a       b       3

    c       d       4

    c       d       5

    c       d       6

    变为:

    a       b       1,2,3

    c       d       4,5,6

    2、数据

    test.txt

    a       b       1

    a       b       2

    a       b       3

    c       d       4

    c       d       5

    c       d       6

    3、答案

    1.建表

    drop table tmp_jiangzl_test;

    create table tmp_jiangzl_test

    (

    col1 string,

    col2 string,

    col3 string

    )

    row format delimited fields terminated by '\t'

    stored as textfile;

    load data local inpath '/home/jiangzl/shell/test.txt' into table tmp_jiangzl_test;

    2.处理

    select col1,col2,concat_ws(',',collect_set(col3))

    from tmp_jiangzl_test

    group by col1,col2;

    二、列转行

    1、问题

    hive如何将

    a       b       1,2,3

    c       d       4,5,6

    变为:

    a       b       1

    a       b       2

    a       b       3

    c       d       4

    c       d       5

    c       d       6

    2、答案

    1.建表

    drop table tmp_jiangzl_test;

    create table tmp_jiangzl_test

    (

    col1 string,

    col2 string,

    col3 string

    )

    row format delimited fields terminated by '\t'

    stored as textfile;

    处理:

    select col1, col2, col5

    from tmp_jiangzl_test a

    lateral  view explode(split(col3,','))  b AS col5

    本文行转列的例子引自:http://my.oschina.net/repine/blog/295961

    展开全文
  • Hive列转行行转

    千次阅读 2020-08-06 23:33:08
    简单说一下Hive行转列、列转行的方式。

    简单说一下Hive行转列、列转行的方式。

    写在前面

    看到一篇文章,看的我很难受。(下面是一张图片)

    在这里插入图片描述

    这玩意SQL,语法它对吗?就搁这列转行?浪费时间!

    上个Demo

    先拿这个数据来实现一个简单的行转列和列转行
    在这里插入图片描述

    表名就都叫hero吧,英雄属性(hero_type)、英雄名s(hero_names)、英雄名(hero_name)

    行转列

    也就是上面的表1到表2。

    select
    	hero_type as "英雄属性",
    	hero_name as "英雄名"
    from hero
    lateral view explode(split(hero_names, ",")) lat as hero_name;
    	
    

    列转行

    也就是上面的表2到表1

    select 
    	hero_type,
    	concat_ws(",", collect_list(hero_name))
    from hero 
    group by hero_type;
    

    参考

    hive函数document:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF


    之后再细细总结吧,先这样。

    展开全文
  • HIVE行转列和列转行

    千次阅读 2019-05-15 16:14:21
    行转列 select dt_month,valid_num,unvalid_num from test.test_xw_rowtocol 数据如下 转换要求:行转列需保留列名,如下图 方式一:采用union all的形式 select dt_month ,'valid_num' as type ​ ,sum...

    行转列

    select dt_month,valid_num,unvalid_num from test.test_xw_rowtocol

    数据如下

    转换要求:行转列需保留列名,如下图

    方式一:采用union all的形式

    select  
      dt_month
     ,'valid_num'      as type
    ​ ,sum(valid_num)   as num 
    ​from  temp.temp_xw_rowtocol
    ​group by dt_month​
     union all
    select  
      dt_month
     ,'unvalid_num'      as type
    ​ ,sum(unvalid_num)   as num 
    ​from  temp.temp_xw_rowtocol
    ​group by dt_month​
    方式二:使用lateral view和str_to_map
    select
      a.dt_month
     ,add_t.type
     ,add_t.num
    from temp.temp_xw_rowtocol a
    lateral view explode(str_to_map(concat('valid_num=',valid_num
                                          ,'&unvalid_num=',unvalid_num
                                          ),'&','='
                                    )
                        ) add_t as type,num
    方式三:思路和方式二一致,稍微简单点,缺点只能含explode函数(列名称默认key和value也可自定义)

    select 
       explode(str_to_map(concat('valid_num=',valid_num
                                 ,'&unvalid_num=',unvalid_num
                                ),'&','='
                           )
               )                
    from temp.temp_xw_rowtocol a
    ;
    ps:方式一在指标少时方便使用,当行转列的指标比较多时代码量会比较大,维护困难

          方式二极大的减少重复的代码量,需要熟悉lateral view和str_to_map,concat等函数使用,concat主要拼接key-value形式存储的字符串,如在一个项目开发中使用一个sql处理出十多个指标,后期需要列存储各指标值时,使用方式二就可以使代码减少数10倍,极大提升代码可读性和可维护性,同时key值可以自定义。

    列转行

    通过group by

    select
      a.dt_month
     ,sum(case when type = 'valid_num' then num end)    as valid_num
     ,sum(case when type = 'unvalid_num' then num end)  as unvalid_num
    from temp.temp_xw_coltorow a

    =======================

    select t2.name,
           t3.subject,
           t3.score
      from (
            select name,
                   max(case when subject = 'a' then score else 0 end) a,
                   max(case when subject = 'b' then score else 0 end) b
              from (
                    select 'zhangsan' name,
                           'a' subject,
                           100 score
                 union all select 'zhangsan' name,
                           'b' subject,
                           90 score
                 union all select 'lisi' name,
                           'a' subject,
                           95 score
                 union all select 'lisi' name,
                           'b' subject,
                           85 score
                   )t1
             group by name
           )t2 lateral view  explode(str_to_map(concat('a=',a,'&b=',b),'&','=')) t3 as subject,
           score
     

    展开全文
  • hive 行转列转行操作实例

    万次阅读 2018-07-09 21:16:47
    一、行转列的使用1、问题hive如何将a b 1a b 2a b 3c d 4c d 5c d 6变为:a b 1,2,3c d 4,5,6 2、数据test.txta b 1a ...
  • hive 行转列与列转行

    2020-11-08 13:43:09
    列转行:lateralviewexplode 公式:select col1,explode_col1 from table_namelateral view explode(split(col2,',')) t as explode_col1; 举个栗子: selectstage_someone,count(distinct UID)...
  • drop table demo; create table demo ( test1 string, test2 string, id string ) row format delimited fields terminated by '\t' stored as textfile; 或者 1.建表 drop table demo;...test1...
  • 1、HIVE多行 源数据样式 把CAMERA_NO,RESULT_DATA两列转换为CAMERA_NO字段的数据为列名,RESULT_DATA字段对应CAMERA_NO的数据为值 方法一:利用str_to_map函数 alter table ods.iot.iot_5060_iotdaq.5060_...
  • mysql跟hive列转行/行转列一样,但是多行转一行,一行转多行就不太一样了 链接:mysql 行转列,多行转一行,列转行,一行转多列 hive 启动hive时 ./hive -S (去除MR打印日志) hive命令行 set hive.exec.mode.local.auto=...
  • Hive行转列转行行转列 行专列常用的几种方式有 concat concat_ws collect_list collect_set 举例说明 白羊座 SELECT concat_ws("|",collect_set(name)),concat(xz,",",xx) FROM db2.xyj GROUP BY concat...
  • 列转行行转列(hivesql)

    千次阅读 2021-02-01 16:04:38
    二、列转行 concat_ws(): concat_ws (separator,字符串A/字段名A,字符串B/字段名B…)是concat的特殊形式,第一个参数是其他参数的分隔符,分隔符会放到连接的字符串之间,分隔符可以是一个字符串,也可以是其他参数....
  • hive,concat_ws(),collect_set(),collect_list(), LATERAL VIEW explode
  • 按需求查询数据二、列转行1.函数说明2.数据准备3.需求4.创建本地movie.txt,导入数据5.创建hive表并导入数据6.按需求查询数据 一、行转列 1.相关函数说明 CONCAT(string A/col, string B/col…):返回输入字...
  • 一、行转列函数将类似于下面的形式:ABC转化为类似于下面的形式:A B C即将多行转化为一行,排在一行了,就成了一concat函数:select concat('A','B','C');concat_ws函数:select concat_ws('|',array('A','B','C'...
  • Hive行转列列转行函数使用

    千次阅读 2021-05-30 19:04:53
    行转列: 函数说明: CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字 符串; CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参 数...
  • hive行转列与列转行

    千次阅读 2020-11-15 21:41:46
    第一部分:行转列* 1.简单行转列:将一个融合多个信息的字段拆分成多行 步骤:先用split切开按照,进行分隔成数组的形式 ["aaa","bbb","ccc"] 然后再用explode函数炸开,将一行分成多行 (1)将一个融合多个...
  • hive行转列、列转行真题解析

    千次阅读 多人点赞 2020-03-31 16:31:06
    本文目录一、行转列1.1、行转列需要用到的函数1.2、真题实战1.2.1、需求1.2.2、创建hive表并导入数据1.2.3、按需求解题二、列转行2.1、列转行需要用到的函数2.2、真题实战2.2.1 、需求2.2.2、创建hive表并导入数据...
  • hive 行转列转行操作

    千次阅读 2017-08-02 13:36:27
    一、行转列的使用 1、问题 hive如何将 a b 1 a b 2 a b 3 c d 4 c d 5 c d 6 变为: a b 1,2,3 c 
  • hive列转行行转

    2021-01-05 18:18:17
    1.列转行 select t.cust_id ,concat_ws(',',collect_list(group_id)) one_pace from (select 'A_001' cust_id ,'20191014' group_id union all select 'A_001' cust_id ,'20191015' group_id
  • hive中行列,列转行的场景及实现

    千次阅读 2019-04-09 21:02:09
    hive行转列,列转行的应用场景: 1、 需要取“订单号”对应的所有商品“SKU号”,商品“sku号”放在一列,即从table1查询出table2; 2、 当商品“sku号”均在一列的时候,需要查询每个“sku号”对应的“订单号”,即...
  • 1、列转行1.1 相关函数的说明:concat(string1,string,...) //连接括号内字符串,数量不限。concat_ws(separator,string1,string2,...) //连接括号内字符串,数量不限,连接符为separator。collect_set(col) //此...
  • Hive_HQL_行转列与列转行

    万次阅读 2020-06-07 21:52:37
    1.HIVE行转列和列转行 https://www.cnblogs.com/blogyuhan/p/9274784.html 2.HIVE行转列和列转行 https://blog.csdn.net/jiantianming2/article/details/79189672 列转行 方式一 : 通过 GROUP BY + CASE...
  • hive中行列、列转行的实现

    千次阅读 2019-03-01 16:38:30
    行转列实现: 表信息: test_rowcol(dt_m,vaild_num, unvaild_num) 场景一:使用concat_ws和collect_set函数 select dt_m, 'vaild_num', concat_ws(',', collect_set(vaild_num)) from test_rowcol group ...
  • Hive行转列实现Pivot

    2021-01-13 17:09:11
    前言传统关系型数据库中,无论是Oracle(11g之后)还是SQLserver(2005之后),都自带了Pivot函数实现行转列功能,本文主要讲述在Hive中实现行转的两种方式。传统数据库方式这种方式是借鉴在Oracle或者SQLserver在支持...
  • hive sql 行转列&列转行

    2021-04-18 11:28:14
    数据的存储有时候存在一个主键对应多行数据记录的情况,如果我们想把数据做行转列(合并)操作,就可以使用concat_ws(’,’, collect_set(column_name))函数,返回string。仅仅使用collect_set(column_name)函数返回...
  • Hive列转行,行转

    千次阅读 2019-03-22 11:45:13
    列转行 测试数据 hive> select * from col_lie limit 10; OK col_lie.user_id col_lie.order_id 104399 1715131 104399 2105395 104399 1758844 104399 981085 104399 2444143 104399 1458638...
  • Hive经典SQL之行转列,列转行

    千次阅读 多人点赞 2020-10-30 16:17:07
    前言:目前做离线数据计算,由于之前没有完整的数仓功能,前两天把CDH的配置和自己的代码又调试了一遍,目前数据已经进入到Hive原始数据ods层。...2. 行转列用法 -- 这里我们将学科和成绩两列都拼接起来,后边.

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,480
精华内容 992
关键字:

hive行转列列转行