Можно ли использовать в одном запросе 2 разных временных диапазона?

Я хочу выполнить следующий запрос:

( requests
| where timestamp > ago(-24h)
| summarize day = avg(duration) 
)
| union ( requests
| where timestamp > ago(-10m)
| summarize now = avg(duration)
) 

Я хочу получить среднюю продолжительность запроса за последний день и последние 10 минут. Я делаю это сейчас в двух разных запросах, но мне нравится использовать их в одном запросе для повышения производительности.

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


person Lex den Otter    schedule 04.04.2019    source источник


Ответы (1)


с точки зрения языка запросов то, что вы делаете, действительно и должно работать.

вам следует проверить, действительно ли вы собираетесь использовать знак минус (-) при вызове функции ago().

если вы хотите, чтобы результат был в одной строке, вы также можете использовать join вместо union

print ago(24h), ago(-24h)

выведет:

| print_0                     | print_1                     |
|-----------------------------|-----------------------------|
| 2019-04-03 15:04:24.0178923 | 2019-04-05 15:04:24.0178923 |

а также:

let requests = datatable(timestamp:datetime, duration:timespan)
[
    datetime(2019-03-03 14:00), 123s,
    datetime(2019-03-03 15:00), 12s,
    datetime(2019-04-03 16:00), 13s,
    datetime(2019-04-03 17:00), 456s,
    datetime(2019-04-03 18:00), 56s,
    datetime(2019-04-03 19:00), 45s,
    datetime(2019-04-03 20:00), 43s,
    datetime(2019-04-04 16:55), 77s,
]
;
requests
| where timestamp > ago(24h)
| summarize day = avg(duration) 
| union ( 
    requests
    | where timestamp > ago(10m)
    | summarize now = avg(duration)
)

выведет:

| day      | now      |
|----------|----------|
| 00:01:55 |          |
|          | 00:01:17 |

а также:

let requests = datatable(timestamp:datetime, duration:timespan)
[
    datetime(2019-03-03 14:00), 123s,
    datetime(2019-03-03 15:00), 12s,
    datetime(2019-04-03 16:00), 13s,
    datetime(2019-04-03 17:00), 456s,
    datetime(2019-04-03 18:00), 56s,
    datetime(2019-04-03 19:00), 45s,
    datetime(2019-04-03 20:00), 43s,
    datetime(2019-04-04 16:55), 77s,
]
;
requests
| where timestamp > ago(24h)
| summarize day = avg(duration) by dummy = 1
| join kind=inner 
( 
    requests
    | where timestamp > ago(10m)
    | summarize now = avg(duration) by dummy = 1
) on dummy
| project day, now

выведет:

| day      | now      |
|----------|----------|
| 00:01:55 | 00:01:17 |
person Yoni    schedule 04.04.2019
comment
Спасибо за вашу помощь! Оказалось, что дело в минусе (-) в функции ago (). Также спасибо за альтернативу присоединения - person Lex den Otter; 05.04.2019