Запрос на языке Azure Kusto по всем таблицам

Я пытаюсь создать запрос KUSTO, чтобы проверить, поступают ли журналы в аналитические таблицы журналов Azure или нет. Это мой код. Эта команда работает отлично и дает количество полученных записей. Но проблема в том, что он не учитывает в выводе запроса имена таблиц, которые получили нулевые (а не любые) журналы.

union withsource=sourceTable kind=outer Table1, Table2, Table3
| summarize AggregatedValue=count() by bin(TimeGenerated, 5m), sourceTable

Ожидаемый результат:

| Table Name | Count |
----------------------
| Table1     | 5     |
| Table2     | 3     |
| Table3     | 0     | //If the count is zero, query output does not show the table name
----------------------

person UtpMahesh    schedule 10.10.2020    source источник


Ответы (2)


Вы не указали значения в столбце для bin(TimeGenerated, 5m) в ожидаемых результатах. Я предполагаю, что вам действительно не нужен этот столбец (в противном случае я не уверен, что именно вы хотите увидеть в ожидаемых результатах для Table3, в котором есть 0 записей).

Чтобы получить желаемый результат, используйте следующий трюк:

let DefaultResult = datatable(['Table Name']: string, Count: long) [
    "Table1", 0,
    "Table2", 0,
    "Table3", 0
];
union withsource=sourceTable kind=outer Table1, Table2, Table3
| summarize AggregatedValue=count() by bin(TimeGenerated, 5m), sourceTable
| union DefaultResult
| summarize Count = sum(Count) by ['Table Name']
| order by ['Table Name'] asc
person Slavik N    schedule 10.10.2020
comment
Привет, @Slavik N, Спасибо за вашу поддержку, да, я хочу видеть в выводе все таблицы и полученное количество журналов, хотя эта конкретная таблица не получает никаких журналов, она должна отображаться как 0. Далее, в документе Microsoft , Я обнаружил, что мы можем отображать значения с помощью Group Expression, но все равно не повезло docs.microsoft.com/en-us/azure/data-explorer/kusto/query/ - person UtpMahesh; 10.10.2020
comment
Привет @UtpMahesh. Если вход в summarize не имеет определенного ключа группировки, то summarize не будет выводить его (и я не вижу, где в документе написано). Вот почему я сделал union с DefaultResult, где я поместил все имена таблиц с Count = 0. Вы пробовали это? Выводит ли он ожидаемый результат? - person Slavik N; 11.10.2020

Это может помочь:

let reCount = union withsource=sourceTable kind=outer  AppServiceFileAuditLogs,AzureDiagnostics, BaiClusterEvent
| summarize AggregatedValue=count() by sourceTable;
let tableList = datatable (name:string)
[
    'AppServiceFileAuditLogs',
    'AzureDiagnostics',
    'BaiClusterEvent'
];
tableList
| join kind=leftouter reCount on $left.name == $right.sourceTable
|project name,count = iff(isnull(AggregatedValue)==true,0,AggregatedValue )

Идея здесь состоит в том, чтобы выполнить левое соединение с табличным выражением, имеющим имена таблиц (tableList), а затем поместить 0, где AggregatedValue равно NULL.

person PankajSanwal    schedule 26.05.2021