• Hive_行转列(多行转一个集合/数组)


    1.相关函数说明

    CONCAT(string A/col, string B/col…):

      返回输入字符串连接后的结果,支持任意个输入字符串;

    CONCAT_WS(separator, str1, str2,...):

      它是一个特殊形式的 CONCAT()。

      第一个参数剩余参数间的分隔符。

      分隔符可以是与剩余参数一样的字符串。

      如果分隔符是 NULL,返回值也将为 NULL。

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

    COLLECT_SET(col):

      函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。

    2. 数据准备

    表6-6 数据准备

    name

    constellation

    blood_type

    孙悟空

    白羊座

    A

    大海

    射手座

    A

    宋宋

    白羊座

    B

    猪八戒

    白羊座

    A

    凤姐

    射手座

    A


    3. 需求

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

    射手座,A            大海|凤姐

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

    白羊座,B            宋宋

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

    [hadoop@hadoop102 datas]$ vi constellation.txt

    孙悟空    白羊座    A

    大海      射手座    A

    宋宋      白羊座    B

    猪八戒    白羊座    A

    凤姐      射手座    A

    5. 创建hive表并导入数据

    create table person_info(

    name string,

    constellation string,

    blood_type string)

    row format delimited fields terminated by " ";

    load data local inpath "/opt/module/datas/constellation.txt" into table person_info;

    6. 按需求查询数据

    select 
        t.base
        CONCAT_WS("|",COLLECT_SET(t.name)) as name
    from
       (select 
            name,
            concat(constellation,',',blood_type) as base
        from 
            person_info;) t
    group by 
        t.base;
    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    mac访达中的位置
    ResponseEntity和@ResponseBody以及@ResponseStatus区别
    Spring Boot中进行Junit测试
    添加数据库时出现time zone无法识别问题
    HTTPS
    表达式求值
    《进击JavaScript核心》学习笔记
    GitLab领取任务+建立分支+本地修改+上传分支+合并分支详细步骤
    黑苹果使用感受和常见问题注意事项!
    JS进阶练习
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11802628.html
Copyright © 2020-2023  润新知