zoukankan      html  css  js  c++  java
  • Hive 行转列和列转行

    1.行转列(多行变一行,聚合)

      表数据

    select * from student;
    student.id    student.name
    4    fuqiang
    5    minzhu
    6    hexie

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

    select collect_set(name) from student;
    ["fuqiang","minzhu","hexie"]

    2.列转行(一行变多行,炸裂)

      表数据

    select * from movie_info;
    movie_info.movie movie_info.category
    《疑犯追踪》 ["悬疑","动作","科幻","剧情"]
    《Lie to me》 ["悬疑","警匪","动作","心理","剧情"]
    《战狼 2》 ["战争","动作","灾难"]

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

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

    select movie,categoryname from movie_info lateral view explode(category) t as categoryname;
    movie    categoryname
    《疑犯追踪》    悬疑
    《疑犯追踪》    动作
    《疑犯追踪》    科幻
    《疑犯追踪》    剧情
    《Lie to me》    悬疑
    《Lie to me》    警匪
    《Lie to me》    动作
    《Lie to me》    心理
    《Lie to me》    剧情
    《战狼 2》    战争
    《战狼 2》    动作
    《战狼 2》    灾难

      以上写法虽然很蛋疼,但是直接这样写会报错。

    #错误写法
    select
    movie,explode(category) from movie_info;
  • 相关阅读:
    HCNA配置ssh远程登陆
    HCNA配置telnet远程管理
    HCNA配置接口IP地址
    HCNA配置console线路密码aaa认证
    HCNA配置console线路密码password认证
    CentOS6.9上安装FreeSWITCH1.6.19
    vos语音业务规范操作承诺函
    vos对接时业务确认及信息安全责任承诺书
    Ubuntu 16下安装64位谷歌Chrome浏览器
    Python更新pip出现错误解决方法
  • 原文地址:https://www.cnblogs.com/noyouth/p/12715855.html
Copyright © 2011-2022 走看看