Kusto: суммировать разные строки, имеющие действительные числовые значения в столбце, в фиксированных ячейках фиксированных размеров

#azure-data-explorer #kql

#azure-data-explorer #kql

Вопрос:

У меня есть 3 таблицы, подобные этой: —

 Table A:
------
Delay 
------
2.3
4.5
6.7
12.36

Table B:
-------
Delay 
-------
12.31
74.556
16.744

Table C:
-------
Delay 
-------
2.35
8.5
637.3
5.36
1.23

 

Я хочу присоединиться к ним и иметь задержку в ячейках размеров (<0,5, > 0,5 и <1, > 1 и <1,5, > 1,5 и <2, > 2), только эти фиксированные размеры, не более.
Я хочу, чтобы таблица выглядела следующим образом: —

 Delay | Source | Count 
-----------------------
<0.5  |  A     | 6
<0.5  |  B     | 16
<0.5  |  C     | 26
0.5-1 |  A     | 25
0.5-1 |  B     | 25
0.5-1 |  C     | 25
1-1.5 |  A     | 6
1-1.5 |  B     | 6
1-1.5 |  C     | 6
1.5-2 |  A     | 2
1.5-2 |  B     | 2
1.5-2 |  C     | 2
>2    |  A     | 36
>2    |  B     | 36
>2    |  C     | 36

 

Какой наиболее эффективный запрос для этого?

Ответ №1:

Поехали:

 union withsource=Source TableA, TableB, TableC
| extend Delay = case(
    d < 0.5,            "A <0.5",
    d >= 0.5 and d < 1, "B 0.5-1",
    d >= 0.5 and d < 1, "C 0.5-1",
    d >= 1 and d < 1.5, "D 1-1.5",
    d >= 1.5 and d < 2, "E 1.5-2",
                        "F >2")
| summarize Count = count() by Source, Delay
| project-reorder Delay, Source, Count
| order by Delay asc, Source asc
| extend Delay = substring(Delay, 2)
 

«Хитрости», необходимые для достижения желаемого, следующие:

  • Используйте union withsource=Source — это объединит ваши три таблицы, и новый столбец с именем Source будет содержать имя исходной таблицы
  • case будет выполнено разделение на сегменты (обратите внимание, что я добавил букву ко всем параметрам, чтобы упростить сортировку сегментов) — затем я удаляю эту букву в последней строке запроса
  • project-reorder для отображения выходного столбца в запрошенном вами порядке
  • order by чтобы отсортировать записи в соответствии с вашими потребностями (именно для этой строки я добавил буквы Af в case — это обеспечивает сортировку в соответствии с тем, что вы просили)