精华内容
下载资源
问答
  • hivesql列转行
    2022-06-09 17:33:20

    hive sql 行转列、列转行【全网最清楚】

    根据一些字段例子可以更好理解

    字段字段释义
    id数据id
    type_类型
    value_类型对应的值
    type_ 1类型1
    type_2类型2
    value_1类型1对应的值
    value_ 2类型2对应的值
    select id,type_,value_ from table_name
    	lateral view explode(
    		map(type_1,value_1
    			type_2,value_2)
    	)  a as type_,value_
    

    以上结果为列转行,将五列结果转换成三列,根据自己的需求,可以作调整;
    行转列可以用case when实现。

    更多相关内容
  • hivesql 列转行

    有一次面试,面试官问了这么一个问题,把每个人的标签统计到一行,并用逗号分隔。

    这种场景很常见,博主平时写存储过程偶尔也会用到这种写法。今天专门建表导数,做个笔记。

     现在假设每个人所带的标签没有重复的,现在要统计出每个人的标签,并以逗号分隔,

    这里就要用到函数concat_ws和collect_list了

    函数名 返回类型描述
    concat_ws(string SEP, string
    A, string B…)
    String以SEP为分隔把A、B……合并起来

     

    SELECT 
    cus_name||'('||concat_ws(',',collect_list(visit_goal))||')' 
    FROM dpm.y_cus_visit
    GROUP BY cus_name

    运行结果如下:

     

    展开全文
  • hive sql列转行

    2021-04-09 10:54:26
    hive sql列转行 SELECT * FROM table UNPIVOT ( score FOR subject IN (“语文”,“数学”,“英语”) )

    hive sql列转行

    SELECT *
    FROM table
    UNPIVOT (
    score FOR subject IN (“语文”,“数学”,“英语”)
    )

    展开全文
  • hive sql 行转列&列转行

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

    数据的存储有时候存在一个主键对应多行数据记录的情况,如果我们想把数据做行转列(合并)操作,就可以使用collect_set()和concat_ws()函数嵌套,返回string。

    concat_ws(',', collect_set(column_name))
    

    仅仅使用collect_set(column_name)函数返回的是数组,见下边第3条说明。
    说明:collect_set()去重,collect_list()不去重,column_name的数据类型要求是string

    1、多行转列

    create table  students_info
    (`sno` string comment '学生编号',
    `name` string comment '姓名',
    `depart` string comment '选修课程'
    )
    --学生信息表数据插入
    insert into  students_info  values    (103,'张三','公司法')
                                            ,(103,'张三','心理学')
                                            ,(105,'王五','python程序设计')
                                            ,(109,'李麻子','数据结构与算法')
                                            ,(109,'李麻子','机器学习');
    
    select * from  students_info
    
    

    在这里插入图片描述
    对数据进行行转列操作

    select sno, name, concat_ws(',', collect_set(depart)) as depart from students_info
    group by sno, name
    

    在这里插入图片描述

    2、列转多行
    使用函数lateral view explode(split(column_name, ‘,’)) new_column_name

    create table  students_info
    (`SNO` string  comment '学生编号',
    `name` string  comment '姓名',
    `DEPART` string  comment '选修课程'
    )
    --成绩表数据插入
    insert into  students_info  values (103,'张三','公司法,心理学')
                                                    ,(105,'王五','python程序设计')
                                                    ,(109,'李麻子','数据结构与算法,机器学习');
    
    select * from  students_info
    

    在这里插入图片描述对数据进行列转行操作

    select sno, name, add_depart from students_info a
    lateral view explode(split(a.depart, ',')) b as add_depart
    

    在这里插入图片描述
    3、多行转列之collect_list()和collect_set()
    Hive中collect相关的函数有collect_list和collect_set,它们都是将分组中的某列转为一个数组返回,不同的是collect_list不去重而collect_set去重。

    创建一张实验用表,存放用户每天点播视频的记录:

    create table t_visit_video
    (username string,
     video_name string
    ) partitioned by (day string)
    
    --学生信息表数据插入
    insert into  t_visit_video  values    ('张三','大唐双龙传')
                                            ,('张三','神探狄仁杰')
                                            ,('王五','机器人总动员')
                                            ,('王五','放牛班的春天')
                                            ,('王五','盗梦空间')
                                            ,('李四','天下无贼')
                                            ,('李四','霸王别姬')
                                            ,('李四','霸王别姬');
    
    

    在这里插入图片描述
    按用户分组,取出每个用户每天看过的所有视频的名字:

    select username, collect_list(video_name) from t_visit_video group by username;
    

    在这里插入图片描述
    上面的查询结果存在视频名称重复情况,因为霸王别姬实在太好看了,所以李四这家伙看了两遍,这直接就导致得到的观看过视频列表有重复的,所以应该增加去重,使用collect_set,其与collect_list的区别就是会去重:

    select username, collect_set(video_name) from t_visit_video group by username;
    

    在这里插入图片描述
    李四的观看记录中霸王别姬只出现了一次,实现了去重效果。

    突破group by限制
    还可以利用collect来突破group by的限制,Hive中在group by查询的时候要求出现在select后面的分组列都必须是出现在group by后面的,即select分组列必须是作为分组依据的列,但是有的时候我们想根据字段A进行分组然后随便取出每个分组中的一个字段B,代入到这个实验中就是按照用户进行分组,然后随便拿出一个他看过的视频名称即可:

    select username, collect_list(video_name)[0] from t_visit_video group by username;
    

    在这里插入图片描述
    video_name不是分组列,依然能够取出这列中的数据。

    实际案例:
    collect_set()和regexp()结合使用

    --在正则表达式中"|"表示“或”
    select case when pro_code regexp '43|45|' then '白名单'
                when pro_code regexp '44|46|56' then '非白名单' 
    		    else '商户付息' end as is_whitelist,
      count(distinct a.partner_id) as store_number
    from databasex.temp_partner_info a
    left join (select partner_id, concat_ws(',',collect_set(market_pro_code)) as pro_code 
               from databasex.temp_partner_prod_map 
    		   where dt='${pdate}' group by partner_id) d 
    on a.partner_id=d.partner_id
    where a.dt='${pdate}'
    and a.partner_type='2'
    group by case when pro_code regexp '43|45|' then '白名单'
                  when pro_code regexp '44|46|56' then '非白名单' 
    		      else '商户付息' end
    

    内容参考链接:https://zhuanlan.zhihu.com/p/59351085,
    https://www.cnblogs.com/kimbo/p/6208973.html,
    https://www.cnblogs.com/cc11001100/p/9043946.html
    仅供学习用,如有侵权请联系删除。

    展开全文
  • 是concat的特殊形式,第一个参数是分隔符,分隔符会放到要连接的字符串之间,分隔符可以是字符串,也可以是其他参数。lateralview首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateralview再把结果...
  • HiveSql一天一个小技巧:如何进行多容器的列转行 2 小结 欢迎关注石榴姐公众号"我的SQL呀",关注我不迷路 0 需求 表名:t 表字段及内容: a b c 001 A/B 1/3/5 002 B/C/D 4/5 问题:转多行 输出结果如下所示:...
  • HIVE 行转列、列转行sql

    千次阅读 2022-03-29 19:17:52
    一、hive转多行 -----hive转多行 SELECT distinct ds ,channel ,rank , name FROM ( SELECT ds ,channel ,MAP( '1' ,prev_n
  • 需求: id list A 大象|狮子 B 老鹰|鸭子|企鹅|麻雀 C 乌龟|螃蟹|小龙虾|皮皮虾|鲸鱼|海豚 转成如下...列转行的处理方式 select t1.id,concat_ws('|',collect_set(t1.name)) from animal_info t1 group by t1.id
  • Hive经典SQL之行转列,列转行

    千次阅读 多人点赞 2020-10-30 16:17:07
    前言:目前做离线数据计算,由于之前没有完整的数仓功能,前两天把CDH的配置和自己的代码又调试了一遍,目前数据已经进入到Hive原始数据ods层。...2. 行转用法 -- 这里我们将学科和成绩两列都拼接起来,后边.
  • hive sql行转列后 列转行 场景: 对拼接的手机号拆分后解密,解密完再拼接 总结 使用函数:concat_ws(’,’,collect_set(column)) 说明:collect_list 不去重,collect_set 去重。 column的数据类型要求是string
  • hive> select arch_value, industry from dim.company_arch_value_condition_tag limit 10; OK 高 IT互联网_IT信息技术 高 金融_银行业|金融_保险业|金融_资本市场_证券期货 高 教育 高 商贸 高 (除上
  • Hive列转行函数

    千次阅读 2020-10-03 15:48:33
    Hive列转行函数 select split("a,b,c,d",','); 效果: select explode(split("a,b,c,d",',')); 效果: 案例: 原始数据 movie category 《疑犯追踪》 悬疑,动作,科幻,剧情 《Lie to me》 悬疑,警匪,动作,...
  • 列转行1.1 Hive Sql1.2 Dataframe Api使用2.行转列2.1 Hive SqlDataframe Api使用 1.列转行 1.1 Hive Sql 基础数据 单列转行(去重) select uid,concat_ws(',',collect_set(name))from test group by uid; 结果: ...
  • hive列转行、行转列、拼接函数
  • – # a – 年份 b – 部门 c – 绩效得分 -- 建表 CREATE TABLE t1 ( a string,b string,c DOUBLE);...1,多行转多 思路:年份分组,取出不同部门的绩效 年份(分组) - 部门A - 部门B SELECT a, max(CASE .
  • hive语句实现列转行

    千次阅读 2018-10-22 21:51:16
    hive语句实现列转行建表语句Oracle中列转行语法,使用 unpivot函数hive列转行语法,使用explode函数最近将解释字段添加上的语句 建表语句 CREATE TABLE XXXX表( evel_id string DEFAULT NULL COMMENT 'xxxxid', ...
  • hive sql的行列转换

    2022-06-07 22:34:39
    hive-sql 行列转换
  • Hive 列转行

    2021-08-31 10:59:12
    Hive 列转行 将某列转为数组返回,可以用collect_ws,collect_list函数,其中collect_ws去重,collect_list不去重。如需要返回字符串,可联合concat_ws函数指定分隔符。 1、对单列转行 列子: 原数据 id fruit 11 ...
  • hivesql:行列转换

    2021-03-12 18:42:12
    1.行转(将多行数据合并成一) 1.1源表person_info: name constellation blood_type 张三 白羊座 A 李四 射手座 A 王五 白羊座 B 赵六 白羊座 A 刘七 射手座 A 1.2需求:把星座和血型一样的人...
  • hive中的lateral view 与explode(列转行) 我们某个字段A,全部由分号组成的字符串,如adfrgter@piuj.com;dfrgter1@piuj.com;dfrgter22@piuj.com 我的需要是将这个字段拆分放到某一行里面。 id email_add 1...
  • hivesql 行转列与列转行 列转行函数——collect_set和collect_list hive里通常通过collect_set和collect_list来进行列转行,其中collect_list为不去重转换,collect_set为去重转换。 下面我们将通过一个实例来进行...
  • 列转行,行转列(hivesql

    千次阅读 2021-02-01 16:04:38
    二、列转行 concat_ws(): concat_ws (separator,字符串A/字段名A,字符串B/字段名B…)是concat的特殊形式,第一个参数是其他参数的分隔符,分隔符会放到连接的字符串之间,分隔符可以是一个字符串,也可以是其他参数....
  • 一、行转 1.相关函数 CONCAT(string A/col, string B/col…) 返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,...) 它是一个特殊形式的 CONCAT()。 第一个参数剩余...
  • Hive常用函数之行转列和列转行函数

    千次阅读 2021-01-13 17:09:09
    一、行转函数将类似于下面的形式:ABC转化为类似于下面的形式:A B C即将多行转化为一行,排在一行了,就成了一concat函数:select concat('A','B','C');concat_ws函数:select concat_ws('|',array('A','B','C'...
  • hive sql面试题:行转列、列转行
  • 列转行 SELECT `项目`,`类型`,`值` FROM ( select `项目` ,map(‘申请率’,`申请率`,‘审批率’,`审批率`) tmp from tmp_table ) LATERAL VIEW EXPLODE(tmp) explode_table AS `类型`,`值` 转置前 转置后 行转列 ...
  • 1.hive自连接 现有这么一批数据,现要求出: 每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数 三个字段的意思: 用户名,月份,访问次数 A,2021-01,5 A,2021-01,15 B,2021-01,5 A,2021-01,8 B,...

空空如也

空空如也

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

hivesql列转行