hive的窗口函数


  • 概述

    hive中一般求取TopN时就需要用到窗口函数

    专业窗口函数一般有三个

    rank() over

    dense rank() over

    row_number() over

  • 实例

    • 创建一个f_test表拿到以下数据
      +------------+--------------+-------------+--+
      | f_test.id | f_test.name | f_test.sal |
      +------------+--------------+-------------+--+
      | 1 | a | 10 |
      | 2 | a | 12 |
      | 3 | b | 13 |
      | 4 | b | 12 |
      | 5 | a | 14 |
      | 6 | a | 15 |
      | 7 | a | 13 |
      | 8 | b | 11 |
      | 9 | a | 16 |
      | 10 | b | 17 |
      | 11 | a | 14 |
      +------------+--------------+-------------+--+
    • 现在用窗口函数求取TopN
      SELECT id,name,sal,
      RANK() over(PARTITION by name ORDER BY sal DESC) rp,
      DENSE_RANK() over(PARTITION by name ORDER BY sal DESC) drp,
      ROW_NUMBER() over(PARTITION by name ORDER BY sal DESC) rmp
      FROM f_test;

      partition by就相当于group by,但是这里不能替换为group by,而且partition by后只能跟一个字段,group by可以跟多个字段

    • 结果
      +-----+-------+------+-----+------+------+--+
      | id | name | sal | rp | drp | rmp |
      +-----+-------+------+-----+------+------+--+
      | 9 | a | 16 | 1 | 1 | 1 |
      | 6 | a | 15 | 2 | 2 | 2 |
      | 11 | a | 14 | 3 | 3 | 3 |
      | 5 | a | 14 | 3 | 3 | 4 |
      | 7 | a | 13 | 5 | 4 | 5 |
      | 2 | a | 12 | 6 | 5 | 6 |
      | 1 | a | 10 | 7 | 6 | 7 |
      | 10 | b | 17 | 1 | 1 | 1 |
      | 3 | b | 13 | 2 | 2 | 2 |
      | 4 | b | 12 | 3 | 3 | 3 |
      | 8 | b | 11 | 4 | 4 | 4 |
      +-----+-------+------+-----+------+------+--+

      可以看出在a组的sal中有两个相同值

      rank() over是给出了相同的序号3,然后直接跳到5,所以他最后的序号要比实际数据数量少

      dense rank() over同样给出了相同的序号3,但是是接着顺序给出了4,最后序号和实际数据数量相同

      row_number() over则是单纯地按照顺序进行排序,不受相同name影响

【Hadoop离线基础总结】hive的窗口函数的更多相关文章

  1. 【Hadoop离线基础总结】Hive调优手段

    Hive调优手段 最常用的调优手段 Fetch抓取 MapJoin 分区裁剪 列裁剪 控制map个数以及reduce个数 JVM重用 数据压缩 Fetch的抓取 出现原因 Hive中对某些情况的查询不 ...

  2. 【Hadoop离线基础总结】流量日志分析网站整体架构模块开发

    目录 数据仓库设计 维度建模概述 维度建模的三种模式 本项目中数据仓库的设计 ETL开发 创建ODS层数据表 导入ODS层数据 生成ODS层明细宽表 统计分析开发 流量分析 受访分析 访客visit分 ...

  3. 【Hadoop离线基础总结】oozie的安装部署与使用

    目录 简单介绍 概述 架构 安装部署 1.修改core-site.xml 2.上传oozie的安装包并解压 3.解压hadooplibs到与oozie平行的目录 4.创建libext目录,并拷贝依赖包 ...

  4. 【Hadoop离线基础总结】Hue的简单介绍和安装部署

    目录 Hue的简单介绍 概述 核心功能 安装部署 下载Hue的压缩包并上传到linux解压 编译安装启动 启动Hue进程 hue与其他框架的集成 Hue与Hadoop集成 Hue与Hive集成 Hue ...

  5. 【Hadoop离线基础总结】impala简单介绍及安装部署

    目录 impala的简单介绍 概述 优点 缺点 impala和Hive的关系 impala如何和CDH一起工作 impala的架构及查询计划 impala/hive/spark 对比 impala的安 ...

  6. 【Hadoop离线基础总结】Sqoop常用命令及参数

    目录 常用命令 常用公用参数 公用参数:数据库连接 公用参数:import 公用参数:export 公用参数:hive 常用命令&参数 从关系表导入--import 导出到关系表--expor ...

  7. Hadoop(分布式系统基础架构)---Hive与HBase区别

    对于刚接触大数据的用户来说,要想区分Hive与HBase是有一定难度的.本文将尝试从其各自的定义.特点.限制.应用场景等角度来进行分析,以作抛砖引玉之用.  Hive是什么? Apache Hive是 ...

  8. 【Hadoop离线基础总结】Hue与Hive集成

    目录 1.更改hue的配置hue.ini 2.启动hive的metastore以及hiveserver2服务 3.启动hue进程,查看Hive是否与Hue集成成功 1.更改hue的配置hue.ini ...

  9. 【Hadoop离线基础总结】Hive的基本操作

    Hive的基本操作 创建数据库与创建数据库表 创建数据库的相关操作 创建数据库:CREATE TABLE IF NOT EXISTS myhive hive创建表成功后的存放位置由hive-site. ...

随机推荐

  1. Python中有许多HTTP客户端,但使用最广泛且最容易的是requests

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:北京尚脑软件测试 PS:如有需要Python学习资料的小伙伴可以加点击 ...

  2. L1线性回归

    线性回归 主要内容包括: 线性回归的基本要素 线性回归模型从零开始的实现 线性回归模型使用pytorch的简洁实现 代码下载地址 https://download.csdn.net/download/ ...

  3. C#开发BIMFACE系列33 服务端API之模型对比4:获取模型对比结果

    系列目录     [已更新最新开发文章,点击查看详细] 模型对比可以对两个文件/模型进行差异性分析,确定两个文件/模型之间构件的几何和属性差异,包括增加的构件.删除的构件和修改的构件. 模型对应可以用 ...

  4. python 规范篇 如何合理使用 assert

    assert 的合理使用,可以增加代码的健壮度,同时也方便了程序出错时开发人员的定位排查. 什么是 assert? Python 的 assert 语句,可以说是一个 debug 的好工具,主要用于测 ...

  5. fasttext的使用,预料格式,调用方法

    数据格式:分词后的句子+\t__label__+标签 fasttext_model.py from fasttext import FastText import numpy as np def ge ...

  6. 将jar包发布到maven中央仓库

    将jar包发布到maven中央仓库 最近做了一个swagger-ui的开源项目,因为是采用vue进行解析swagger-json,需要前端支持,为了后端也能方便的使用此功能,所以将vue项目编译后的结 ...

  7. 新的知识点来了-ES6 Proxy代理 和 去银行存款有什么关系?

    ES给开发者提供了一个新特性:Proxy,就是代理的意思.也就是我们这一节要介绍的知识点. 以前,ATM还没有那么流行的时候(暴露年纪),我们去银行存款或者取款的时候,需要在柜台前排队,等柜台工作人员 ...

  8. 总结:js世界中的特殊符号

    常用符号:+ ++ - -- || / /' && 等 这些基本上每天都能用到,但是 js 世界中有些特殊符号是不常用的,我也是偶然在阅读大神代码的时候发现的,一番查找之后得出了以下结 ...

  9. python25之进制转换

    一.进制转换函数 bin():将十进制转换为二进制 oct():将十进制转换为八进制 hex():将十进制转换为十六进制 >>> x=1234>>> bin(x)' ...

  10. 利用jsDeliver+github实现免费CDN

    title: 利用jsDeliver+github实现免费CDN jsDeliver jsDelivr 是一个免费开源的 CDN 解决方案,用于帮助开发者和站长.包含 JavaScript 库.jQu ...