最近遇到一个需求,有一些统计数据,原本是按月更新的计算的,但是现在要按周更新计算。

在hive表中,月更数据一般按照一个月的最后一天进行分区存储,那么如果是按月更新的话直接根据分区进行计算就可以了。

而对于日更的数据,如果要按月计算的话,可以通过substr()函数将日期进行切分,取出只带月份的数据。

例如,对于dt = 2022-02-19这个日期,可以通过substr(dt, 1, 7)取出dt = 2022-02

select substr('2022-02-19', 1, 7);

输出:

2022-02

但是如果要按周计算的话,单纯的substr()就没法达到效果了,可以借助weekofyear()函数,它返回给定日期的周数(1到53之间的数字)。

例如,还是对于dt = 2022-02-19这个日期:

select weekofyear('2022-02-19');

输出:

7

代表2022-02-19是2022年的第7周。

但是这个函数还有一个问题,weekofyear()函数要求一年的第一周必须大于3天。

举个例子:

select weekofyear('2022-01-01');

输出:

52

这是什么情况?2022-01-01明明是2022年的第一天,输出个52是什么意思?


原来2022-01-01是周六,前面有5天还在2021年,是2021年的第52周。

也就是说,2022-01-01所在的周,只有两天在2022年,其余5天都在2021年,所以weekofyear()函数就认为这一周属于2021年的第52周。

那么怎么解决hive中跨年周的问题呢?

weekofyear()函数要求一年的第一周必须大于3天,也就是说至少得有4天在某一年中。

所以,我们对于跨年那几天的日期,我们可以先得到它下周一的日期dt1,然后减去4天得到dt2,dt2所在的年份就是多的那一部分所在的年份,然后再拼上周数就可以啦。

例如:

select concat(year(date_sub(next_day('2022-01-01','monday'),4)), '-', weekofyear('2022-01-01'));

输出:

2021-52
select concat(year(date_sub(next_day('2021-12-31','monday'),4)), '-', weekofyear('2021-12-31'));

输出:

2021-52

hive中如何进行按周计算相关推荐

  1. hive获取月份_【Hive】Hive中常用日期函数整理

    前言 使用hive进行时间处理的过程中,有时忘记一些常用的函数用法,现整理一下hive中常用日期函数,当做备忘录使用,忘记来翻阅一下. 1 时间戳转化日期函数 时间戳必须是10位,默认情况下转化为'y ...

  2. Hive 中的各种常用set设置

    背景 平时在跑数据时,需要在查询语句前设置一些set语句,这些set语句中其中有一些是配置hive的各功能,另一些是可以达到优化的目的,本篇文章对一些常用的set语句进行总结 常用set设置 查询结果 ...

  3. HIVE中的表以及语法

    2019独角兽企业重金招聘Python工程师标准>>> HIVE中的表以及语法 一.HIVE的表 HIVE使用的功能性的表格分为四种:内部表.外部表.分区表.分桶表. 1.内部表.外 ...

  4. 061 hive中的三种join与数据倾斜

    一:hive中的三种join 1.map join 应用场景:小表join大表 一:设置mapjoin的方式: )如果有一张表是小表,小表将自动执行map join. 默认是true. <pro ...

  5. hive中的逻辑运算符 案列_Hive内置运算符

    本章介绍Hive的内置运算符.在Hive有四种类型的运算符: 关系运算符 算术运算符 逻辑运算符 复杂运算符 关系运算符 这些操作符被用来比较两个操作数.下表描述了在Hive中可用的关系运算符: 运算 ...

  6. Hive中的算术运算符:位运算符解释

    Hive中的位运算符运用不多,可能大部分人也不少很熟悉,其实就是将两个数值转为位相应的二进制,在相应位上进行与.或.反.异或操作: 1. 位与操作: & 语法: A & B 操作类型: ...

  7. hive 中某个字段等于0_快速了解hive

    作者丨HappyMint 文章选摘:大数据与人工智能 这是作者的第7篇文章 本文主要针对从事大数据分析和架构相关工作,需要与hive打交道但目前对hive还没有进行深层次了解的小伙伴,希望本文会让你对 ...

  8. hive中如何把13位转化为时间_重要知识点收藏 | Hive常用函数大全

    关系运算 1.等值比较: = 语法:A=B 操作类型:所有基本类型 描述: 如果表达式A与表达式B相等,则为TRUE:否则为FALSE 举例: hive>select 1 from lxw_du ...

  9. hive中导入text文件遇到的坑

    今天帮一同学导入一个excel数据,我把excel保存为txt格式,然后建表导入,失败!分隔符格式不匹配,无法导入!!!!怎么看两边都是\t,怎么不匹配呢? 做为程序员,最不怕的就是失败,因为我们有一 ...

最新文章

  1. python处理csv数据-python 数据处理 对csv文件进行数据处理
  2. 文件共享服务器连接数问题,共享服务器上连接数量的设置
  3. 基于Javaweb的订餐管理系统的介绍和分析
  4. 不同的容器里实现 RadioButton的单选
  5. docker hub push_如何制作Docker镜像(image)?
  6. 20-10-026-安装-KyLin-2.6.0-单机版安装(MAC官网下载)-spark引擎
  7. oracle体系结构视频学习笔记
  8. nginx 新上线、机房白名单
  9. 隐马尔可夫HMM(EM算法(期望最大化算法)
  10. 黄聪:基于jQuery+JSON的省市区三级地区联动
  11. python导入鸢尾花数据集_python鸢尾花数据集的分类问题 -- 逻辑回归问题研究
  12. NATS 分布式消息队列系统
  13. Elasticsearch地理位置总结
  14. 【项目实践】DCGAN绘制理想女朋友照片实践,从爬虫到生产女友
  15. IPSec之IKEv2详解
  16. 研究生科研素养提升的测试题
  17. 261期计算机开机号,福彩3D2017第261期彩吧3D开机号147
  18. 【Windows】Windows10家庭版永久关闭自动更新
  19. laravel5.4新特性
  20. C#蓝牙连接及传输数据的三种方式(蓝牙传输文件、二进制数据)

热门文章

  1. Extjs Window用法详解 2 打印具体应用
  2. 一个简单的桌面应用程序框架示例(Java SE9)
  3. Spark 编程模型(上)
  4. 设计模式3:装饰模式
  5. c++头文件包含技巧
  6. B - Fibonacci Again
  7. socket服务器显示未响应,“程序未响应”的思考总结
  8. nginx匹配规则_Nginx系列之server_name定义与匹配规则
  9. 随机数范围扩展方法总结
  10. (转)c#中const与readonly区别