我有一个Kusto表,其中包含100个“ duration”列。我想计算每个列的平均持续时间。由于列的数量如此之多且千变万化,所以我想在不对列名进行硬编码的情况下创建查询。
创建了一个查询,该查询打印出代表我的查询的硬编码版本的字符串
SomeTable
| getschema
| where ColumnName endswith '_duration'
| summarize Columns = make_list(ColumnName)
// Make the query
| project strcat('SomeTable | summarize avg(', array_strcat(Columns, '), avg('), ') by Day = startofday(Event_ReceivedTime)')
我的目标是要有一个查询,该查询不需要表中每一列的列表。
答案 0 :(得分:0)
我假设您想一次完成所有操作,而不是生成查询字符串然后执行该查询字符串?如果是这样,请签出evaluate narrow()。如果您的数据集不太大,则可能会完成工作。这是一个例子。
datatable(id:int, timestamp:datetime, x_duration:timespan, y_duration:timespan, z_duration:timespan)
[1, datetime(2019-07-19 17:51), time(01:00:00), time(02:00:00), time(03:00:00),
2, datetime(2019-07-19 17:52), time(01:10:00), time(02:10:00), time(03:10:00),
3, datetime(2019-07-19 17:53), time(01:10:10), time(02:10:10), time(03:10:10)]
| evaluate narrow()
| where Column endswith('_duration')
| extend Value = totimespan(Value)
| summarize avg(Value) by Column
Column avg_Value
x_duration 01:06:43.3333333
y_duration 02:06:43.3333333
z_duration 03:06:43.3333333