Оператор reduce

Группирует набор строк на основе сходства значений.

Для каждой такой группы оператор возвращает pattern, countи representative. Лучше pattern всего описывает группу, в которой * символ представляет подстановочный знак. — count это количество значений в группе, а representative — одно из исходных значений в группе.

Синтаксис

T|reduce [kind=ReduceKind] byExpr [with [threshold=пороговое значение] [,characters=символы]]

Дополнительные сведения о соглашениях о синтаксисе.

Параметры

Имя Тип Обязательно Описание
Expr string ✔️ Значение, на которое требуется уменьшить.
Пороговое значение. real Значение от 0 до 1, определяющее минимальную долю строк, необходимую для соответствия критериям группирования для запуска операции сокращения. Значение по умолчанию — 0,1.

Рекомендуется задать небольшое пороговое значение для больших входов. При меньшем пороговом значении более похожие значения группируются вместе, что приводит к меньшему числу похожих групп. Большее пороговое значение требует меньше сходства, что приводит к по большему объему групп, которые менее похожи. См. примеры.
Символы string Список символов, разделяющих термины. По умолчанию используется каждый числовой символ, отличный от ascii. Примеры см. в разделе Поведение параметра Characters.
ReduceKind string Единственное допустимое значение — source. Если source задано значение , оператор добавляет Pattern столбец к существующим строкам в таблице вместо агрегирования с помощью Pattern.

Возвращаемое значение

Таблица с таким количеством строк, как есть группы и столбцы с названиями pattern, countи representative. Лучше pattern всего описывает группу, в которой * символ представляет подстановочный знак или заполнитель для произвольной строки вставки. — count это количество значений в группе, а representative — одно из исходных значений в группе.

Например, результат выполнения reduce by city может быть таким:

Шаблон Count Representative
Сан * 5182 Сан-Бернард
Сант * 2846 Сент-Люси
Москва 3726 Москва
*-На-* 2730 Один-на-один
Париж 2716 Париж

Примеры

Небольшое пороговое значение

range x from 1 to 1000 step 1
| project MyText = strcat("MachineLearningX", tostring(toint(rand(10))))
| reduce by MyText  with threshold=0.001 , characters = "X" 

Выходные данные

Шаблон Count Representative
MachineLearning* 1000 MachineLearningX4

Большое пороговое значение

range x from 1 to 1000 step 1
| project MyText = strcat("MachineLearningX", tostring(toint(rand(10))))
| reduce by MyText  with threshold=0.9 , characters = "X" 

Выходные данные

Шаблон Count Representative
MachineLearning* 177 MachineLearningX9
MachineLearning* 102 MachineLearningX0
MachineLearning* 106 MachineLearningX1
MachineLearning* 96 MachineLearningX6
MachineLearning* 110 MachineLearningX4
MachineLearning* 100 MachineLearningX3
MachineLearning* 99 MachineLearningX8
MachineLearning* 104 MachineLearningX7
MachineLearning* 106 MachineLearningX2

Поведение параметра Characters

Если параметр Characters не указан, то каждый цифровой символ, отличный от ascii, становится разделителем терминов.

range x from 1 to 10 step 1 | project str = strcat("foo", "Z", tostring(x)) | reduce by str

Выходные данные

Шаблон Count Representative
Другие 10

Однако если указать, что "Z" является разделителем, это будет так, как если бы каждое значение в str 2 терминах: foo и tostring(x):

range x from 1 to 10 step 1 | project str = strcat("foo", "Z", tostring(x)) | reduce by str with characters="Z"

Выходные данные

Шаблон Count Representative
Foo* 10 fooZ1

Применить reduce к дезинфицируемым входным данным

В следующем примере показано, как можно применить reduce оператор к "дезинфицированному" входу, в котором идентификаторы GUID в редуцированном столбце заменяются перед уменьшением

// Start with a few records from the Trace table.
Trace | take 10000
// We will reduce the Text column which includes random GUIDs.
// As random GUIDs interfere with the reduce operation, replace them all
// by the string "GUID".
| extend Text=replace_regex(Text, @"[[:xdigit:]]{8}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{4}-[[:xdigit:]]{12}", @"GUID")
// Now perform the reduce. In case there are other "quasi-random" identifiers with embedded '-'
// or '_' characters in them, treat these as non-term-breakers.
| reduce by Text with characters="-_"

autocluster

Примечание

Реализация оператора в значительной reduce степени основана на документе A Data Clustering Algorithm for Mining Patterns From Event Logs (Алгоритм кластеризации данных для шаблонов интеллектуального анализа данных из журналов событий) (Risto Vaarandi).