精华内容
下载资源
问答
  • Hive中列转行函数collect_set详解
    千次阅读
    2017-10-11 23:39:30
    Hive中列转行函数collect_set详解

    --1.创建测试表
    create table test1011
    (
       c1  string,
       c2  string,
       c3  string
    )
    row format delimited fields terminated by ' '
    stored as textfile;

    --2.添加测试文件和数据
    test20171011.txt
    a b 1
    a b 2
    a b 3
    c d 4
    c d 5
    c d 6

    --3.加载数据
    --使用场景: 通过hue文件上传
    load data inpath '/user/pabrdm/test20171011.txt' into table pabrdm.test1011;  
    --使用场景: linux后台执行         
    --load data local inpath '/user/pabrdm/test20171011.txt' into table pabrdm.test1011;  
    有local表示从本地文件系统加载(文件会被拷贝到hdfs中)
    无local表示从hdfs中加载数据(注意:文件直接被移动,而不是拷贝)
    overwrite 表示是否覆盖表中数据(或指定分区的数据)(没有overwrite 会直接append,而不会滤重)

    --4.查询
    select * from test1011;
    select c1,c2,collect_set(c3) as c3
      from test1011
     group by c1,c2;
     
    结果如下:
    c1 c2 c3
    a b ["1","2","3"]
    c d ["4","5","6"]

    --5.补充字符串连接函数:concat_ws  带分隔符
    它是一个特殊形式的concat(),第一个参数为分隔符。
    这个函数会跳过分隔符参数后的任何null和空字符串。
    分隔符将被加到被连接的字符串之间,如果分隔符是null,返回值也将为null。

    select c1,c2,concat_ws(',',collect_set(c3)) as c3
    from test1011
    group by c1,c2;
    c1 c2 c3
    a b 1,2,3
    c d 4,5,6

    更多相关内容
  • 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》 悬疑,警匪,动作,...

    Hive列转行函数

    select split("a,b,c,d",',');
    

    效果:

    在这里插入图片描述

    select explode(split("a,b,c,d",','));
    

    效果:

    在这里插入图片描述

    案例:

    原始数据

    moviecategory
    《疑犯追踪》悬疑,动作,科幻,剧情
    《Lie to me》悬疑,警匪,动作,心理,剧情
    《战狼2》战争,动作,灾难

    需求

    《疑犯追踪》      悬疑
    《疑犯追踪》      动作
    《疑犯追踪》      科幻
    《疑犯追踪》      剧情
    《Lie to me》   悬疑
    《Lie to me》   警匪
    《Lie to me》   动作
    《Lie to me》   心理
    《Lie to me》   剧情
    《战狼2》        战争
    《战狼2》        动作
    《战狼2》        灾难
    

    实现 第一步,炸开类型

    select
    	explode(split(category,','))
    from movie_info;
    

    实现第二步:尝试使用join进行连接,但是不行,没有办法写join条件,造成了笛卡尔积

    SELECT 
    	t1.movie,
    	t2.category_name
    from
    (
    	select movie from  movie_info
    ) t1
    left join
    (
    	select
    		explode(split(category,',')) category_name
    	from movie_info
    ) t2;
    

    实现第三步:

    我们的需求是·想让炸开后的临时表和炸开之前表所在行的其他字段进行join

    hive帮我们实现了这个需求 lateral view (侧写视图)

    select
    	movie,
    	category_name
    from movie_info
    LATERAL VIEW explode(split(category,',')) tmp as category_name;
    

    一定要写表别名和列别名

    效果:
    在这里插入图片描述

    LATERAL VIEW

    用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

    解释:lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

    lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。

    展开全文
  • 列转行函数介绍 EXPLODE(col) EXPLODE(col) 大白话是,如果你传递的参数是Array, 会给这个Array分隔转成多行 ,如果你传递的是Map,就会给Map里面的每个元素分隔成多行和多. 参数只能是Array或者是Map explode函数...

    列转行函数介绍

    EXPLODE(col)

    EXPLODE(col)
    大白话是,如果你传递的参数是Array, 会给这个Array分隔转成多行 ,如果你传递的是Map,就会给Map里面的每个元素分隔成多行和多列. 参数只能是Array或者是Map

    explode函数属于udtf,udtf在使用时候,不能和其它表达式一起出现在select子句后,言外之意只能单独出现在select子句中.

    LATERAL VIEW

    用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
    解释:用于和split, explode等UDTF一起使用,它能够将一列数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。

    需求

    将电影分类中的数组数据展开。结果如下:
    比如说 疑犯追踪 属于 悬疑的,又属于动作的 又属于科幻的 又属于剧情 的

    《疑犯》 悬疑,动作,科幻,爱情
    《lie to me》 悬疑,警匪,动作,心理,剧情
    《战狼》 战争,动作,灾难
    

    转成下面的格式

    《疑犯》 悬疑
    《疑犯》 动作
    《疑犯》 科幻
    《疑犯》 爱情
    《lie to me》 悬疑
    《lie to me》 警匪
    《lie to me》 动作
    《lie to me》 心理
    《lie to me》 剧情
    《战狼》 战争
    《战狼》 动作
    《战狼》 灾难
    

    准备数据

    movie_info.txt
    千万注意 电影名和类目之前要用 tab 分隔,不要弄错了,否则就出现问题.

    《疑犯》	悬疑,动作,科幻,爱情
    《lie to me》	悬疑,警匪,动作,心理,剧情
    《战狼》	战争,动作,灾难
    
    

    查看是否用指定分隔符
    有^I 说明是tab分割的

    [root@zjj101 soft]# cat -T movie_info.txt 
    《疑犯》^I悬疑,动作,科幻,爱情
    《lie to me》^I悬疑,警匪,动作,心理,剧情
    《战狼》^I战争,动作,灾难
    

    创建表

    sql:

    create table movie_info
    (
        movie    string,
        category array<string>
    )
        row format delimited
            fields terminated by "\t"
            collection items terminated by ",";
    

    指定分隔符用 tab分隔的,也就是\t ,
    指定集合类目用逗号进行分隔的

    导入数据

    sql

    load data local inpath "/root/soft/movie_info.txt" into table movie_info;
    

    思路

    将类目进行行转列
    sql:

    select explode(category)
    from movie_info;
    

    在这里插入图片描述

    现在想办法让每个类目和电影名字做关联,

    sql:

    select movie, explode(category)
    from movie_info;
    

    会报错.因为movie的结果只有三条,而explode(category)有 4 + 5 + 3 = 12条记录。解决办法,使用LATERAL VIEW函数.

    LATERAL VIEW

    1.Lateral View 用于和UDTF函数【explode,split】结合来使用。
    2.首先通过UDTF函数将数据拆分成多行,再将多行结果组合成一个支持别名的虚拟表。
    3…主要解决在select使用UDTF做查询的过程中查询只能包含单个UDTF,不能包含其它字段以及多个UDTF的情况。
    4.语法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias (’,’ columnAlias)

    使用LATERAL VIEW + explode 函数进行查询
    sql:

    
    select movie, category_name
    from movie_info
             LATERAL VIEW explode(category) tmpTable as category_name;
    -- category_name 是给 explode(category) 列起的别名
    
    

    在这里插入图片描述

    展开全文
  • Hive的行转列列转行函数使用

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

    行转列:

    函数说明:

    CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字

    符串;

    CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 CONCAT()。第一个参数剩余参

    数间的分隔符。分隔符可以是与剩余参数一样的字符串。如果分隔符是 NULL,返回值也将

    为 NULL。这个函数会跳过分隔符参数后的任何 NULL 和空字符串。分隔符将被加到被连接

    的字符串之间;

    注意: CONCAT_WS must be "string or array<string>

    COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重

    汇总,产生 Array 类型字段。

    数据准备:

    nameconstellationblood_type
    孙悟空白羊座A
    大海射手座A
    宋宋白羊座B
    猪八戒白羊座A
    凤姐射手座A
    苍老师白羊座B


    需求:

    把星座和血型一样的人归类到一起。结果如下:

    射手座,A 大海|凤姐

    白羊座,A 孙悟空|猪八戒

    白羊座,B 宋宋|苍老师

    创建本地 constellation.txt,导入数据

    vim constellation.txt

    孙悟空  白羊座  A

    大海    射手座  A

    宋宋    白羊座  B

    猪八戒  白羊座  A

    凤姐    射手座  A

    苍老师  射手座  A

    创建 hive 表并导入数据:

    create table person_info(
    
    name string,
    
    constellation string,
    
    blood_type string)
    
    row format delimited fields terminated by "\t";
    
    load data local inpath "/export/servers/apache-hive-2.1.1-bin/datas/constellation.txt"
    
    into table person_info;

    按需求查询数据:

    SELECT
    
    t1.c_b,
    
    CONCAT_WS("|",collect_set(t1.name))
    
    FROM (
    
    SELECT
    
    NAME,
    
    CONCAT_WS(',',constellation,blood_type) c_b
    
    FROM person_info
    
    )t1
    
    GROUP BY t1.c_b

    列转行:

    函数说明:

    EXPLODE(col):将 hive 一列中复杂的 Array 或者 Map 结构拆分成多行。

    LATERAL VIEW

    用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias

    解释:用于和 split, explode 等 UDTF 一起使用,它能够将一列数据拆成多行数据,在此

    基础上可以对拆分后的数据进行聚合。

    数据准备:

    moviecategory
    《疑犯追踪》悬疑,动作,科幻,剧情
    《Lie to me》悬疑,警匪,动作,心理,剧情
    《战狼 2》战争,动作,灾难

    需求:

    将电影分类中的数组数据展开。结果如下:

    《疑犯追踪》 悬疑

    《疑犯追踪》 动作

    《疑犯追踪》 科幻

    《疑犯追踪》 剧情

    《Lie to me》 悬疑

    《Lie to me》 警匪

    《Lie to me》 动作

    《Lie to me》 心理

    《Lie to me》 剧情

    《战狼 2》 战争

    《战狼 2》 动作

    《战狼 2》 灾难

    创建本地 movie.txt,导入数据:

    vi movie_info.txt

    《疑犯追踪》 悬疑,动作,科幻,剧情

    《Lie to me》悬疑,警匪,动作,心理,剧情

    《战狼 2》 战争,动作,灾难

    创建 hive 表并导入数据:

    create table movie_info(
    
     movie string,
    
     category string)
    
    row format delimited fields terminated by "\t";
    
    load data local inpath "/export/servers/apache-hive-2.1.1-bin/datas/movie.txt"
    
    into table movie_info;

    按需求查询数据:

    SELECT
    movie,
    category_name
    FROM
    movie_info
    lateral VIEW
    explode(split(category,",")) movie_info_tmp AS category_name;
    展开全文
  • 行转 concat(string,string……...Explode(字段名):将某列中的array或map拆分成多行 Split(字段名,分隔符):根据分隔符来切分某字段元素 Lateral view:写在split,explode等UDTF前,将一数据拆成多行,再聚合 ...
  • 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列转行案例

    2021-01-07 06:50:26
    hive列转行 1.函数说明 EXPLODE(col):将 hive列中复杂的 array 或者 map 结构拆分成多行。 LATERAL VIEW : 用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias 解释:用于和 split, explode 等 ...
  • Hive 案例 列转行

    2021-08-03 21:18:13
    EXPLODE(col):将 hive列中复杂的 array 或者 map 结构拆分成多行。 LATERAL VIEW 用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias 解释:用于和 split, explode 等 UDTF 一起使用,它能够将一...
  • Hive列转行 (if函数

    千次阅读 2018-10-09 19:56:50
    最近有个项目需要做数据导出(基于底层...转换 –方案一 case when 与max 或sum select * from (select dzgs_dqbm, max(bs_wks) bs_wks, max(bs_jxz) bs_jxz, max(bs_ywc) bs_ywc, max(bs_wks_ztdm) wks_ztdm, max...
  • Hive 列转行

    2021-08-31 10:59:12
    Hive 列转行 将某转为数组返回,可以用collect_ws,collect_list函数,其中collect_ws去重,collect_list不去重。如需要返回字符串,可联合concat_ws函数指定分隔符。 1、对单列转行 列子: 原数据 id fruit 11 ...
  • explode(col):将hive列中复杂的array或者map结构拆分成多行。 lateral view 用法:lateral view udtf(expression) tableAlias as columnAlias 解释:用于和split, explode等UDTF一起使用,它能够将一数据拆成...
  • hive> select arch_value, industry from dim.company_arch_value_condition_tag limit 10; OK 高 IT互联网_IT信息技术 高 金融_银行业|金融_保险业|金融_资本市场_证券期货 高 教育 高 商贸 高 (除上
  • hive的行转列转行

    2022-04-08 16:48:15
    一、行转 1.函数说明 concat CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串; concat_ws CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 ...
  • EXPLODE(col):将hive列中复杂的array或者map结构拆分成多行。 LATERAL VIEW 用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias 解释:用于和split, explode等UDTF一起使用,它能够将一数据拆成...
  • Hive 行转列转行

    2021-12-21 09:59:21
    hive 行列之间数据相互转换
  • Hive函数、开窗函数、UDF、UDTF1、系统内置函数2、常用函数2.1、关系运算2.2、数值运算2.3、条件函数2.4、日期函数2.5、字符串函数2.6、Hive求WordCount3、列转行4、行转5、窗口函数5.1、常用窗口函数5.2、测试row...
  • 1、HIVE多行转多 源数据样式 把CAMERA_NO,RESULT_DATA两列转换为CAMERA_NO字段的数据为列名,RESULT_DATA字段对应CAMERA_NO的数据为值 方法一:利用str_to_map函数 alter table ods.iot.iot_5060_iotdaq.5060_...
  • hive行转列转行函数使用说明

    千次阅读 2021-12-16 17:53:44
    hive,concat_ws(),collect_set(),collect_list(), LATERAL VIEW explode
  • 二、函数NVL,相当于mysql的lfnull 格式:NVL(列表名,用来替换null的值) 三、case when 格式: case 列表名 when 表的一个值 then 替代他的值 else 另外一个值 end 总体类似于三元运算符 如一性别的数据均...
  • 在实际使用Hive的过程,常常会涉及到行列转换,细分的话,有下面4种类型的行列转换,分别是: 1. 行转多 2. 多列转行 3. 行转单列 4. 单列转行 下面我们通过样例介绍每种行列转换的实现方法。 样例表 班级成绩表...
  • Hive-基础】行转列转行,窗口函数

    千次阅读 多人点赞 2020-08-03 22:43:06
    1)函数说明(可以是一行转一,多行转一) CONCAT(string A, string B...):返回输入字符串连接后的结果,支持任意个输入字符串; CONCAT_WS(separator, str1, str2,...):它是一个特殊形式的 concat()。第一个参数...
  • 1、laterval view 常 和 explode 一起使用用来进行行转 (单个字段有多个指定分隔符的字段) explode 函数我称它为爆炸函数,可以将单个字段有多个指定分隔符的字 1、比如以下这个 array 这个 例子 array ...
  • Hive列转行、行转

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

    千次阅读 2021-09-22 20:08:11
    Hive sql应用会遇到“行转”和“列转行”的场景,下面介绍其基本使用语法。 1.行转: 关键字:collect_set() / collect_list()、concat_ws() 1)collect_set()/collect_list():collect_set( )函数只接受...
  • hive 列转行 和 行转

    2021-02-07 18:41:06
    列转行 测试数据的格式如下: 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 104
  • 一、行转 CONCAT(string A/col, string B/col ) 返回输入字符串连接后的结果,支持任意个输入字符串 CONCAT_WS(separator, str1, str2,...): 它是一个特殊形式的 CONCAT() 。第一个参数剩余参数间的分隔符。分隔符...
  • 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 ...
  • 建测试表 create table test_k_v (k string , v double) row format delimited fields terminated by ','; 插入测试数据 insert overwrite table test_k_v select 'day',1.3 ...union a...
  • 文章目录Hive 函数22.3 行转2.4 列转行 Hive 函数2 2.3 行转 1)相关函数说明(可以是一行转一,多行转一) CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串; ...

空空如也

空空如也

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

hive中列转行函数