Агрегировать содержимое столбца массива в проводнике данных Azure

У меня есть некоторые данные, хранящиеся в пакете свойств customEvents, для которого я хочу выполнить агрегацию и аналитику. Я новичок в аналитических запросах, которые вы можете запускать в AppInsights с помощью языка запросов Azure Data Explorer, и я застрял.

У меня есть ручка для преобразования содержимого одной из пар ключ-значение пакета свойств в массив чисел (в приведенном ниже примере этот вывод представлен items,

let items = parse_json('{"operation_Id": "12345Z12", "days":[43, 21, 65]}');
print items.operation_Id, items.days;

Однако, когда мне нужно вычислить среднее значение элементов в массиве для каждого идентификатора операции, я сталкиваюсь со стеной документации. Я смотрел на mvexpand, let (используя лямбда-выражение), datatableиспользование динамических типов данных и т. д. Проблема с блокировками, с которой я столкнулся при использовании mvexpand является то, что я хочу связать каждую строку в выходных данных, связанных с его работой operation_Id, а также mvexpand только кажется, что сохраняются эти отношения в первом ряду. С datatableтип не поддерживает конвейерный ввод.

Еще одна распространенная ошибка (в том числе из приведенного ниже примера кода: выражение оператора должно быть таблицей или столбцом).

let items = parse_json('{"days":[43, 21, 65]}');

let arraySum = (T:(x: long))
{
   T 
   | summarize sum(x) 
};
items
| project days | invoke arraySum()

При необходимости я могу выполнить код агрегации в JavaScript и передать только вычисленное среднее значение в пакете свойств, но это кажется пустой тратой на выброс значений необработанных данных. Есть ли какая-то очевидная функция вычисления или агрегирования, которая решает эту проблему?

1 ответ

Обе следующие опции должны позволить вам рассчитать среднее значение по вашему усмотрению:

(предостережение: это основано на примере, который вы показали, который потенциально может быть "ошарашен", чтобы не отражать ваш реальный сценарий, поэтому, пожалуйста, уточните, если это не поможет):

let items = dynamic({"operation_Id": "12345Z12", "days":[43, 21, 65]});
print operationId = tostring(items.operation_Id), days = items.days
| mvexpand days to typeof(int)
| summarize avg(days) by operationId

// or

let items = dynamic({"operation_Id": "12345Z12", "days":[43, 21, 65]});
print operationId = tostring(items.operation_Id), days = items.days
| project operationId, series_stats_dynamic(days)['avg']

Ваш второй пример действительно недействителен (скаляры и табличные аргументы не равны), но его можно переписать следующим образом:

(тоже самое, что и выше)

let items = dynamic({"days":[43, 21, 65]});
let arraySum = (T:(x: long))
{
   T 
   | summarize sum(x) 
};
print items 
| mvexpand x = items.days to typeof(long)
| invoke arraySum()

// or

let items = dynamic({"days":[43, 21, 65]});
print items
| project sum = series_stats_dynamic(items.days)["avg"] * array_length(items.days)

Некоторые ссылки на операторы / функции, используемые выше:

Другие вопросы по тегам