首页 > 其他分享 >Hive计算窗口内的累计值

Hive计算窗口内的累计值

时间:2024-05-13 18:20:59浏览次数:15  
标签:窗口 daily 累计 person num Hive test table cum

一个值得记下来的窗口累计计算办法,使用的情况是:计算某个窗口内的累计值

1.Example

Part 1

CREATE TABLE test_table (
  daily DATE,
  person_num INT,
  app_region STRING
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE;-- 一张包含了daily 日期、每天该区域登录人数 person_num 和区域 app_region 三个字段的 Hive 表

Part 2

DROP TABLE IF EXISTS test_table_cum;
CREATE TABLE IF NOT EXISTS test_table_cum AS
SELECT daily, app_region, person_num,
       SUM(person_num) OVER (PARTITION BY app_region ORDER BY daily ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS ttl_person_num
FROM test_table
;-- 计算每个日期下的累计登录人数(比如 第一天为10 第二天为20 则ttl_person_cum值为30

2.Explanation

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
是一个窗口定义子句,用于指定窗口函数计算的行范围。(感觉是限制窗口大小!!
意味着窗口函数将计算从当前行开始,回溯到当前分区中的第一行,即对当前行及其之前的所有行进行累加计算
UNBOUNDED PRECEDING 表示窗口的起始行是当前分区中的第一行
CURRENT ROW 表示窗口的结束行是当前行

3.Extension

  • ROWS BETWEEN AND
    指定从 行到 行的范围
    例如,ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING 表示窗口包括当前行及其前后各一行

  • RANGE BETWEEN AND
    基于值范围进行定义,而不是基于行数。这对于时间序列数据很有用

  • 要计算一周最后一天对应的数据 可以这么写

DROP TABLE IF EXISTS test_table_cum_weekly;
CREATE TABLE IF NOT EXISTS test_table_cum_weekly AS
WITH test_table_cum_week AS (
    SELECT daily,
           YEAR(DATE_ADD(daily, 26 - WEEKOFYEAR(daily))) iso_year,
           WEEKOFYEAR(daily) AS iso_week,
           app_region,
           ttl_person_num,
           ROW_NUMBER() OVER (PARTITION BY iso_year,iso_week,app_region ORDER BY daily DESC) AS rn --每周的最后一天日期
    FROM test_table_cum
)
SELECT iso_year,iso_week, app_region, ttl_person_num
FROM test_table_cum_week
WHERE rn = 1
;

标签:窗口,daily,累计,person,num,Hive,test,table,cum
From: https://www.cnblogs.com/hirateyuriovo/p/18189745

相关文章

  • HiveSQL
    1.表sublime格式化ctrl+kctrl+f--创建学生表DROPTABLEIFEXISTSstudent_info;createtableifnotexistsstudent_info(stu_idstringCOMMENT'学生id',stu_namestringCOMMENT'学生姓名',birthdaystringCOMMENT'出生日期',......
  • 两个窗口如何实现通信
    From: https://blog.csdn.net/CRMEB/article/details/134398554前言介绍在工作中就出现的这种问题,开发的产品的页面需要嵌入到公司中其他产品中,因为是不同的产品,属于不同的系统,最简单的方式就是iframe和window.open()的方式,我选择的是window.open()的方式,因为实现的效果就是点击......
  • Hiddex -窗口管理工具简介
    Hiddex是一款功能强大的窗口管理工具,专注于帮助用户有效管理和隐藏应用程序窗口,提升工作效率和桌面整洁度。通过简单的快捷键操作,用户可以快速隐藏不需要的窗口,轻松切换焦点,专注于当前任务。Hiddex提供多种隐藏模式和定制化隐藏规则,满足用户个性化需求。不仅支持单击隐藏和应用......
  • WPF 稳定的全屏化窗口方法
    本文来告诉大家在WPF中,设置窗口全屏化的一个稳定的设置方法。在设置窗口全屏的时候,经常遇到的问题就是应用程序虽然设置最大化加无边框,但是此方式经常会有任务栏冒出来,或者说窗口没有贴屏幕的边。本文的方法是基于Win32的,由lsj提供的方法,当前已在1000多万台设备上稳定运行......
  • Hive中sql语句是如何转换成MapReduce的(面试题)
    Hive中的sql语句是如何转化成MR任务的(面试)元数据存储在数据库中,默认存在自己自带的derby数据库中(derby在Hive启用的时候会占用元数据库,且数据不会共享给客户端,所以1一次只能有一个客户端使用,开了另一个客户端就会连接不上)1)、解析器(SQLParser):将SQL字符串转换成抽象语法树AST(3.......
  • Hive基础命令
    Hive基本操作1、Hive库操作1)创建一个数据库,数据库在HDFS上的默认存储路径是/hive/warehouse/*.dbcreatedatabasetestdb;2)避免要创建的数据库已经存在错误,增加ifnotexists判断。(标准写法)createdatabaseifnotexiststestdb;2、创建数据库以及位置(loccation)create......
  • Hive优化
    hive优化1、hive的随机抓取策略hive中的sql都应该经过解析器,编译器,优化器和执行器产生mapreduce作业进行处理,但是在我们使用过程中,对于一些进行查询之类的任务的时候并没有产生mapreduce任务进行处理,这是因为hive的抓取策略帮我们省略了这个步骤,将split切片的过程体欠安帮我们做......
  • Hive安装与搭建
    Hive安装搭建1、上传解压配置环境变量#1、解压tar-zxvfapache-hive-3.1.2-bin.tar.gz-C/usr/soft/#2、重名名mvapache-hive-3.1.2-binhive-3.1.2#3、配置环境变量vim/etc/profile#4、在最后增加配置exportHIVE_HOME=/usr/local/soft/hive-3.1.2exportPA......
  • hive on spark配置
     hive-site.xml <?xmlversion="1.0"?><?xml-stylesheettype="text/xsl"href="configuration.xsl"?><configuration>  <!--配置Hive保存元数据信息所需的MySQLURL地址-->  <property>    <name>javax......
  • failed to register layer: ApplyLayer exit status 1 stdout: stderr: archive/tar:
    系统:麒麟V10处理器:飞腾2000,aarch64原因:安装算能,TPU-mlir环境产生 官方教程地址:2.开发环境配置—TPU-MLIR0.7文档(sophgo.com)从DockerHub https://hub.docker.com/r/sophgo/tpuc_dev 下载所需的镜像:dockerpullsophgo/tpuc_dev:latest 产生错误 sia......