上期我们介绍了HQL中用途广泛的高级计算函数——CALCULATEX,该函数方便地用于需要行间聚合来定义虚拟列的场景,而无需构建临时中间聚合表,大大减轻了数据准备的工作量。

本期我们聚焦另一个常用的高级计算函数——DATE_SHIFT。该函数常用于“时间移动窗口统计”,区别于基础日期函数的单一日期处理,其可联动其他聚合函数实现移动时间窗口数据的聚合统计,大幅提升复杂时间序列分析的效率。接下来,我们将结合函数语法、参数说明及实际业务场景,详细拆解其使用方法。

使用场景及案例实战

在日常数据分析中,为了对一些异常波动进行削峰处理或持续关注某个KPI,经常需要基于指定日期字段框定一个时间窗口,分层统计特定指标,例如获取某个日期前N天的平均日报警量、后N个工作日的平均日发货量等,进而实现滚动周期统计、时间区间预警等核心需求。

在传统分析流程中,时间移动窗口计算需先对特定的窗口范围数据进行预聚合,再与原表关联计算。不仅过程繁琐,一旦时间窗口长度需要改变,还得重新聚合计算中间表,极不灵活。而衡石 HQL 的 date_shift 函数专为时间移动计算设计,可直接整合计算类型、时间维度及偏移范围等参数,无需构建中间表,即可实现指定时间窗口内的数据聚合统计,大幅提升分析效率。

date_shift函数语法为:date_shift(function1(function2(expression)), date expression, lowExpr, upperExpr)

各参数含义如下(参数均为必填项):

1,function1:移动计算的计算类型,用于定义对时间窗口内的数据执行的最终聚合方式;

2,function2:数据的基础运算,用于定义对原始字段的基础聚合逻辑。

PS:实际分析场景中,对明细数据往往有两层聚合,比如过去7天的平均日报警总量,需要对过去7天的明细数据,首先在每日粒度内对报警数进行加和汇总(sum),再在过去7天时间窗口内,对日报警总数计算平均数(avg)。date_shift函数中,function2参数对应日粒度内的汇总计算(sum),function1对应时间窗口内的平均数计算(avg)。

3,date expression:基础计算的时间维度,即上面例子“过去7天的平均日报警总量”中的日粒度;

4,lowExpr:移动计算往前偏移的量,例如 -1 表示往前偏移1个时间单位;

5,upperExpr:移动计算往后偏移的量,例如 1 表示往后偏移1个时间单位。

以下结合2个典型实际案例,具体讲解该函数的使用场景及操作方法。

案例一:过去30天的平均日销售额

需求背景:某零售企业以日销售总额评估企业销售表现,为了避免一些特定节假日带来的波动,按过去30天的时间窗口进行平均统计,即按“过去30天的平均日销售额”指标观察企业的整体销售趋势。

图片

需求分析: · 该场景为典型的时间移动窗口统计,确定时间粒度为单日(按天聚合),时间窗口为“过去30天”

 · 由于每天有多条销售记录,在单日粒度内,需对每日销售额进行汇总,因此基础运算(参数function2)采用 sum 函数对销售额字段求和;

 · 时间窗口内的移动计算类型为“平均日销售额”,即参数function1对应的计算函数为avg。

因此,通过 date_shift 函数可以快速构建出“过去30天的平均日销售额”指标

图片

案例2-“过去7天的平均最高水位”

需求背景:某水文观测站每天在不同时间点分别测量河流的水位数据。在汛期时,主要关注每天的最高水位峰值,若最高水位在7天内持续处于高点,则需要发出预警。

因此需要统计和持续监控的指标为“过去7天内,单日最高水位的平均值”

图片

需求分析:

 · 该场景亦是典型的时间移动窗口统计,确定基础的统计时间粒度为单日(按天聚合),时间窗口为“过去7天”

 · 每天有多条水位测量记录,在单日粒度内,需在所有水位测量记录中取最大值,因此基础运算(参数function2)采用 max 函数取最值;

 · 在7天内,对单日最高水位取均值,所以时间窗口内的移动计算类型为“平均”,即参数function1对应的计算函数为avg。

由此,“过去7天单日最高水位的平均值”指标即可表达如下。

图片

结语

在HENGSHI SENSE中,date_shift函数以其“基础聚合+移动计算”的双层逻辑、清晰的参数配置,高效解决了时间序列移动窗口统计的核心痛点,为滚动求和、窗口均值分析、多时间点关联统计等场景提供了强有力的支撑。相较于传统自定义窗口计算方式,date_shift 函数无需繁琐的排序和范围界定,直接通过参数整合实现逻辑,大幅降低了复杂时间分析的门槛。

数百个简洁且功能强大的函数构成了HQL的核心,助力分析师轻松表达各类指标与查询计算的复杂逻辑。在本后续文章中,我们将继续结合实际案例,分享HQL中更多高级函数的功能与用法,助力大家更高效地开展数据分析工作。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐