Как отделить уникальные значения от столбца в kusto и создать для них новые строки?

У меня столик в Кусто. Это выглядит так: -

------------------
| Tokens | Shop  |
------------------
| a      |  P    |
| a,b    |  Q    |
| c,d,e  |  P    |
| c      |  R    |
| c,d    |  Q    |
------------------

Всего имеется 12 различных токенов, и столбец токенов может иметь любую их перестановку (включая пустую), а столбец магазина будет иметь только одно фиксированное значение из 5 возможных значений (не может быть пустым).

Я хочу получить выходную таблицу с тремя столбцами, например: -

----------------------------------
| Distinct Tokens | Shop | Count |
----------------------------------
| a               | P    |  12   |
| b               | P    |  13   |
| c               | R    |  16   |
| d               | Q    |  2    |
----------------------------------

Короче говоря, я хочу, чтобы все отдельные токены были в одном столбце, и каждый токен был сопоставлен с каждым из 5 доступных магазинов, а счетчик - это количество строк в исходной таблице, где конкретный токен поступил с конкретным магазином.

Примечание. Счетчик «а» с магазином «P» в новой таблице будет включать количество строк в исходной таблице, в которых указано «а» в любом из значений, разделенных запятыми.

Я не могу написать для этого запрос kusto, пожалуйста, помогите.


person Shivam Raina    schedule 25.02.2021    source источник


Ответы (1)


Вот один пример:

datatable(Tokens:dynamic, Shop:string)[dynamic(["a"]), "P", 
dynamic(["a", "b"]), "Q", 
dynamic(["a", "d", "e"]), "P", 
dynamic(["c"]), "R", 
dynamic(["a", "b", "c", "d"]), "Q"]
| mv-expand Token =Tokens to typeof(string)
| summarize count() by Token, Shop
| order by Token asc

Вот результат:

введите описание изображения здесь

person Avnera    schedule 25.02.2021
comment
Должен ли я писать динамическую строку для каждой исходной строки? Если да, то это невозможно, поскольку в таблице тысячи строк. - person Shivam Raina; 25.02.2021
comment
Нет, оператор mv-expand расширяет массив до строк, а функция summarize объединяет их. - person Avnera; 25.02.2021
comment
Просто замените datatable(...)[...] именем своей таблицы. datatable - это способ создания временной таблицы in-mem с некоторыми данными, которая часто используется в примерах как замена реальных таблиц. - person Slavik N; 25.02.2021