Hive无硬编码实现前一天分区数据计数查询方法
Hive 非标准日期分区表动态统计前一天数据实现方案
针对分区列为字符串类型Year、Month、Day、无统一标准日期字段的Hive表,无需硬编码日期值即可动态匹配前一天分区完成按城市分组计数,实现逻辑如下:
核心实现SQL
SELECT City, count(*) AS data_count FROM `Table A` WHERE Year = date_format(date_sub(current_date, 1), 'yyyy') AND Month = date_format(date_sub(current_date, 1), 'MM') AND Day = date_format(date_sub(current_date, 1), 'dd') GROUP BY City;
逻辑说明
- 该写法完全适配跨月、跨年场景,比如1月1日执行时会自动匹配上一年12月31日对应的分区值,不需要额外编写分支判断逻辑
- 函数返回值为补零的两位月份、两位日期字符串,和表中字符串类型分区列的存储格式完全匹配,可直接命中分区,不会触发全表扫描
- 日期计算默认使用Hive集群配置的时区,如果业务统计时区和集群时区不一致,可调整
current_date的取值逻辑对齐业务时间即可 - 因为原表名
Table A包含空格,SQL中需要用反引号包裹表名避免语法错误
内容的提问来源于stack exchange,提问作者Snigh
相关产品推荐
相关产品推荐

