时序UDF的介绍和使用方法
时序UDF函数列表
类型 | 函数 | 参数 | 输出数据类型 | 说明 |
构建查询表字段 (ETL用) | date_range_build_v2 | (struct_array) | dateRangStruct | 无压缩时间序列值。参数中 struct_array 数组,需要通过 collect_list(struct(date, value)) 等函数来聚合得到。 |
date_text_range_build_v2 | (struct_array) | dateTextRangStruct | ||
date_range_zipper | (dateRangStruct) | dateRangStruct | 相邻等值压缩的时间序列值。对缺省日期添加一条值为 null 的记录并压缩(若有缺省日期且前一个日期值不为 null,则添加与前一个日期相邻日期且值为 null 的记录,当前日期是否压缩与新添记录做比较;同时对相邻等值记录进行去重,仅保留第一条)。 | |
date_text_range_zipper | (dateTextRangStruct) | dateTextRangStruct | ||
date_range_merge | (dateRangStruct_1, dateRangStruct_2) | dateRangStruct | 合并时间序列,合并后不压缩相邻等值。 | |
date_text_range_merge | (dateTextRangStruct_1, dateTextRangStruct_2) | dateTextRangStruct | ||
date_range_period_to_date | (dateRangStruct, period:string) | dateRangStruct | period: 'week','month','year' 1. 原始日期保留,值按指定周期累加;2. 为缺省周期补齐期初日期,值补零;同时对补齐的相邻等值进行压缩,仅保留第一条。适用于周期内累计值的计算和查找,例如周/月/年累计销售额。 | |
查找数据 (卡片用) | date_range_lookup | (dateRangStruct, lookup_date) | Number value | 滚动向上查找,即无对应日期数据就向前查找最近日期的数据,适合库存类数据或者会员状态的查找。 |
date_text_range_lookup | (dateTextRangStruct, lookup_date) | String value | ||
date_range_get | (dateRangStruct, lookup_date) | Number value | 精确查找,适合销售类数据查找;找不到则返回null。 | |
date_text_range_get | (dateTextRangStruct, lookup_date) | String value |
案例:使用时序UDF查询库存
在ETL中使用 date_range_build_v2 函数构建库存查询字段,在卡片中使用 date_range_lookup滚动向上查找库存量。
实现步骤
1. 在ETL里处理好库存查询和MTD库存查询这两个数据。
1)库存查询:
date_range_build_v2(collect_list(struct(`日期`,`库存数`))) as `库存查询`
2)MTD库存查询
date_range_period_to_date([库存查询],'month')
ETL预览效果:
2. 在卡片里新建库存、精确查找和MTD库存查询这三个数据。
1)库存
date_range_lookup([库存查询],to_date([DYNAMIC_PARAMS.查询日期]))
2)库存查询-精确查找
date_range_get([库存查询],to_date([DYNAMIC_PARAMS.查询日期]))
3)MTD库存查询
date_range_lookup([MTD库存查询],to_date([DYNAMIC_PARAMS.查询日期]))
卡片效果: