series_downsample_fl()
函数 series_downsample_fl()
是用户定义函数 (UDF),它按整数因子对时序进行降采样。 此函数采用包含多个时序(动态数值阵列)的表,并对每个序列减少采样。 输出包含较粗的序列及其各自的时间数组。 为了避免别名,该函数会在子采样之前对每个序列都应用简单的低通筛选器。
语法
T | invoke series_downsample_fl(
t_col,
y_col,
ds_t_col,
ds_y_col,
sampling_factor)
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
t_col | string |
✔️ | 列的名称,其中包含要减少采样的序列的时间轴。 |
y_col | string |
✔️ | 列的名称,其中包含要减少采样的序列。 |
ds_t_col | string |
✔️ | 列(用于存储每个序列的已减少采样的时间轴)的名称。 |
ds_y_col | string |
✔️ | 列(用于存储已减少采样的序列)的名称。 |
sampling_factor | int |
✔️ | 一个整数,指定所需要的减少采样程度。 |
函数定义
可以通过将函数的代码嵌入为查询定义的函数,或将其创建为数据库中的存储函数来定义函数,如下所示:
使用以下 let 语句定义函数。 不需要任何权限。
let series_downsample_fl=(tbl:(*), t_col:string, y_col:string, ds_t_col:string, ds_y_col:string, sampling_factor:int)
{
tbl
| extend _t_ = column_ifexists(t_col, dynamic(0)), _y_ = column_ifexists(y_col, dynamic(0))
| extend _y_ = series_fir(_y_, repeat(1, sampling_factor), true, true) // apply a simple low pass filter before sub-sampling
| mv-apply _t_ to typeof(DateTime), _y_ to typeof(double) on
(extend rid=row_number()-1
| where rid % sampling_factor == ceiling(sampling_factor/2.0)-1 // sub-sampling
| summarize _t_ = make_list(_t_), _y_ = make_list(_y_))
| extend cols = bag_pack(ds_t_col, _t_, ds_y_col, _y_)
| project-away _t_, _y_
| evaluate bag_unpack(cols)
};
// Write your query to use the function here.
示例
以下示例使用 invoke 运算符运行函数。
若要使用查询定义的函数,请在嵌入的函数定义后调用它。
let series_downsample_fl=(tbl:(*), t_col:string, y_col:string, ds_t_col:string, ds_y_col:string, sampling_factor:int)
{
tbl
| extend _t_ = column_ifexists(t_col, dynamic(0)), _y_ = column_ifexists(y_col, dynamic(0))
| extend _y_ = series_fir(_y_, repeat(1, sampling_factor), true, true) // apply a simple low pass filter before sub-sampling
| mv-apply _t_ to typeof(DateTime), _y_ to typeof(double) on
(extend rid=row_number()-1
| where rid % sampling_factor == ceiling(sampling_factor/2.0)-1 // sub-sampling
| summarize _t_ = make_list(_t_), _y_ = make_list(_y_))
| extend cols = bag_pack(ds_t_col, _t_, ds_y_col, _y_)
| project-away _t_, _y_
| evaluate bag_unpack(cols)
};
demo_make_series1
| make-series num=count() on TimeStamp step 1h by OsVer
| invoke series_downsample_fl('TimeStamp', 'num', 'coarse_TimeStamp', 'coarse_num', 4)
| render timechart with(xcolumn=coarse_TimeStamp, ycolumns=coarse_num)
输出
该时序减少采样的程度为 4:
下面是原始时序(在减少采样之前),供参考:
demo_make_series1
| make-series num=count() on TimeStamp step 1h by OsVer
| render timechart with(xcolumn=TimeStamp, ycolumns=num)