关于hive的一些操作记录

标签: hive collect_set row_number() group by 分组top
8人阅读 评论(0) 收藏 举报
分类:

1、collect_set函数

        需求:求用户消费的 TOP 100,需要的数据格式是:ID    消费金额    nickname

        分析:消费 TOP 比较简单 group by uuid order by allCnt 可以解决,但是用户的nickname(昵称)是有多个的,随机取一个就行,但是 hive 取的数据字段中必须在 group by 中出现,取nickname就有点麻烦了,这时候collect_set() 函数就派上用场了。

        解决方案:

            table:bank_core

            uuid    payMem    nickname    dt

            10001    12.5            jack            2018-04-16 00:15:00

            10001    15.5            jack_2        2018-04-16 15:00:00

            10002    10.2            tom            2018-04-16 17:00:00

             .....................................

            sql:select uuid, sum(payMem) allCnt, collect_set(nickname)[0] from bank_core group by uuid order by allCnt                      desc limit 100;


2、row_number() over ( partition by 字段a order by 字段b [desc])函数

      row_number() over ( partition by 字段a order by 字段b ) 这个函数用于对 group by 分组里面的数据进行排序的。

      需求:求用户消费的 TOP 100,需要的数据格式是:ID    消费金额    nickname, 此处的nickname 需要是用户最新的昵称。

      分析:上面用到的collect_set() 函数是随机取一个 nickname,此处就不太吻合需求了,row_number() over ... 就可以解决这个问题了,row_number() over (partition by uuid order by dt desc),指在分组中按照 uuid 分组,按照 dt 排序, 这里得到的是 num

       解决方案:

                数据如上。

                sql:select s.uuid, s.allCnt, s.nickname from 

                                    ( select uuid, sum(payMem) allCnt, nickname,

                              row_number() over (partition by uuid order by dt desc) rank from bank_core group by uuid,nickname, dt) s where s.rank <= 1


关于 row_number() over (partition by 字段a order by 字段b ) 这个函数解释得可能很不清楚。。。

这里有写关于这个函数的博客,大家可以看看。

http://blog.sina.com.cn/s/blog_6676d74d0102vm2c.html

https://blog.csdn.net/u010670689/article/details/49337137

查看评论

spark操作hive简单代码

import org.apache.spark.SparkConf import org.apache.spark.sql.SparkSession /** * Created by zengx...
  • zengxiaosen
  • zengxiaosen
  • 2016-09-23 00:54:59
  • 544

关于位操作的一些技巧小结

网上也有很多关于位处理操作的东西,也都写的很详细,但也有很多人再问关于这方面的问题,自己最近在看《hackers delight》,那里面有很多有趣的东东,然后写了一些读书笔记...在C语言中的位处理...
  • kingbox
  • kingbox
  • 2007-01-01 11:05:00
  • 920

Hive的基本操作

Hive数据类型 基础数据类型: TINYINT,SMALLINT,INT,BIGINT,BOOLEAN,FLOAT,DOUBLE,STRING,BINARY,TIMESTAMP,DECIMAL,CH...
  • jiangshouzhuang
  • jiangshouzhuang
  • 2016-05-24 10:33:18
  • 2891

大数据时代--Hive数据操作之insert操作

前面文章中讲解了Hive的数据定义语言,接下来就是数据操作语言,数据定义语言主要包含了Hive表结构的一些操作:包含创建表、删除表、修改表的结构、增加列等等一系列操作。数据操作语言主要是对表中的数据的...
  • wangyang1354
  • wangyang1354
  • 2016-09-23 22:01:58
  • 2954

Hive优化----排序

hive 中的排序优化 在hive中进行字段排序统计过程中,使用ORDER BY是全局排序,hive只能通过一个reduce进行排序.效率很低,采用hive提供的distribute by +s...
  • csliuruidongdn
  • csliuruidongdn
  • 2014-01-08 16:10:37
  • 1247

Hive总结(二)hive基本操作

阅读本文章可以带着下面问题: 1.与传统数据库对比,找出他们的区别 2.熟练写出增删改查(面试必备) 创建表: hive> CREATE TABLE pokes (foo INT, bar...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2014-10-19 11:42:08
  • 14032

HIVE操作注册表.rar

  • 2010年09月18日 23:21
  • 245KB
  • 下载

关于hive的一些笔记和例子

  • 2018年03月30日 11:40
  • 2KB
  • 下载

Hadoop基础知识---Hive篇

HIVE 简介 Hive是Hadoop生态系统中必不可少的一个工具,它提供了一种SQL方言,可以查询存储在Hadoop分布式文件系统(HDFS)中的数据或其它和hadoop集成的文件系统,如果Ma...
  • bigdata_player
  • bigdata_player
  • 2016-09-03 17:46:25
  • 1926

hive的插入操作

1.insert 语法格式为: 基本的插入语法: INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]s...
  • csliuruidongdn
  • csliuruidongdn
  • 2013-07-08 14:35:28
  • 2018
    个人资料
    等级:
    访问量: 2万+
    积分: 401
    排名: 18万+
    最新评论