• 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;
    学习中,博客都是自己学习用的笔记,持续更新改正。。。
  • 相关阅读:
    4.关于QT中的QFile文件操作,QBuffer,Label上加入QPixmap,QByteArray和QString之间的差别,QTextStream和QDataStream的差别,QT内存映射(
    PlSql加入数据库链接
    UserScan的处理流程分析
    第八十八题(金山笔试题,字符串移动)
    4Sum_leetCode
    LeetCode Add Binary
    Hibernate or JPA Annotation中BLOB、CLOB注解写法
    配置Nginx防止直接用IP訪问Webserver
    Java集合系列之TreeMap源代码分析
    使用Application Loader上传APP流程解读[APP公布]
  • 原文地址:https://www.cnblogs.com/Tunan-Ki/p/11802628.html
Copyright © 2020-2023  润新知