azure-data-explorer - 如何:为一系列(日期)值运行用户定义的函数
问题描述
因此,假设我想测试一个在过去数据中发现异常值的函数。我很想得到一个看起来像这样的表:
Time Outliers_At_Time
<somedate> 0
<somedate + interval> 1
该函数如下所示:
let OutliersAt = (TheDate:datetime) {
<… outputs zero or a positive integer>
}
我的直觉是做这样的事情:
let SomeDates = range AtTime from ago(10d) to now() step 10m;
SomeDates | extend NumOutliers = OutliersAt (AtTime)
…但这给了我这个错误信息:
错误语义错误:“”具有以下语义错误:未解析的引用绑定:“AtTime”。clientRequestId: KustoWebV2;1ea28ba0-12f1-4a52-95e7-975db3310f59
建议?
解决方案
如果您正在寻找异常值 - Kusto 中有一个内置函数可以执行此操作: https ://docs.microsoft.com/en-us/azure/kusto/query/series-outliersfunction
例子:
let _data =
range Timestamp from ago(7d) to now() step 1min
| extend Value=case(rand(1000)==10, 1200.0, rand(100));
//
_data
| make-series AvgValue=avg(Value) default=0 on Timestamp in range(ago(7d), now(), 5min)
| extend outliers=series_outliers(AvgValue)
| render timechart
If the question is about general way to provide parameters to user-defined functions, see more info here: https://docs.microsoft.com/en-us/azure/kusto/query/functions/user-defined-functions
In particular, you can pass a serie into a user-defined-function (e.g. to get statistics):
let OutliersAt = (_serie:dynamic) {
let stats = series_stats_dynamic(_serie);
todouble(stats.max_idx) >= 0
};
let _data =
range Timestamp from ago(7d) to now() step 1min
| extend Value=case(rand(1000)==10, 1200.0, rand(100));
//
_data
| make-series AvgValue=avg(Value) default=0 on Timestamp in range(ago(7d), now(), 5min)
| extend outliers=series_outliers(AvgValue)
| project hasOutliers=OutliersAt(outliers)
推荐阅读
- javascript - 上传大量图片时,GCP Bucket 上传无法连接到 oauth2 令牌
- node.js - 如何使用MongoDB获取彼此时间段内的记录
- jquery - 通过 jquery 更新后,Angular 不会重新渲染
- python - 将数据添加到 PostgreSQL 数据库的最佳实践?
- r - 如果新变量不存在,如何在 R 中创建新变量?
- python-3.x - 将值显示为文本,仅在 altair 中具有最大高度的栏
- java - Spring Boot - 处理未找到的静态资源(404)并能够识别异常的原因
- python - 如何在 python 电子邮件机器人中输入和 html 格式发送段落?
- python - 按名称读取 csv 文件列表(另一个 csv 文件具有名称列表)
- reactjs - 为什么 set state 在订阅 observable 时不起作用?