У меня есть таблица Kusto с сотнями столбцов «длительность». Я хочу рассчитать среднюю продолжительность для каждого из этих столбцов. Поскольку количество столбцов настолько велико и постоянно меняется, я хотел бы создать запрос без жесткого кодирования имен столбцов.
Создал запрос, который выводит строку, представляющую жестко закодированную версию моего запроса.
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)')
Моя цель - получить запрос, который не требует списка всех столбцов в таблице.
Я предполагаю, что вы хотите сделать все это сразу, а не генерировать строку запроса, а затем выполнять эту строку запроса? Если это так, проверьте оценить узкий (). Если ваш набор данных не слишком велик, это может помочь. Вот пример.
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
Это сделало трюк! В моей таблице будут десятки тысяч записей, но, надеюсь, производительность не будет слишком плохой.