Как: запустить пользовательскую функцию для диапазона значений (даты) - PullRequest
0 голосов
/ 16 ноября 2018

Итак, скажем, я хочу протестировать функцию, которая находит выбросы по прошлым данным.Я бы хотел закончить с таблицей, которая выглядит следующим образом:

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

Предложения?

1 Ответ

0 голосов
/ 16 ноября 2018

Если вы хотите найти выбросы - в 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

Если вопрос касается общего способа предоставления параметров для пользовательских функций, см. больше информации здесь: https://docs.microsoft.com/en-us/azure/kusto/query/functions/user-defined-functions

В частности, вы можете передать серию в пользовательскую функцию (например, для получения статистики):

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)
...