#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
— это обеспечивает сортировку в соответствии с тем, что вы просили)