同一查询中可以有2个不同的时间范围吗?

时间:2019-04-04 10:00:48

标签: azure kusto

我要运行以下查询:

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

我想获取最后一天和最近10分钟的平均请求持续时间。 我现在在2个不同的查询中执行此操作,但我希望在1个查询中使用它们以提高性能。

运行此查询时,没有任何响应,我看到的是day和now列,但它没有任何价值。

1 个答案:

答案 0 :(得分:2)

从查询语言的角度来看,您正在做的事情是有效的并且应该有效。

您应该验证您是否真的打算使用减号(-)登录到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 |