Условный результат - Azure Обозреватель данных / Log Analytics / KQL - PullRequest
1 голос
/ 21 апреля 2020

В настоящее время у меня есть запрос, который возвращает Union из 3 таблиц (всего 13 строк). Все 3 таблицы имеют одинаковый набор столбцов.

Текущий запрос

let bytes_to_gb =
    (1024 * 1024 * 1024)
    ;
let tab_cpu =
    performanceCounters
    | where category == "Processor" and counter == "% Processor Time" and instance == "_Total"
    | where ...
    | summarize timestamp = max(timestamp), value = avg(value) by host_name = cloud_RoleInstance, host_type = "WXYZ", counter_name = "%CPU", threshold = 90
    ;
let tab_memory =
    performanceCounters
    | where category == "Memory" and counter == "Available Bytes"
    | where ...
    | summarize timestamp = max(timestamp), value = avg(value / bytes_to_gb) by host_name = cloud_RoleInstance, host_type = "ZYXW", counter_name = "Available Memory (GB)", threshold = 10
    ;
let tab_exceptions =
    exceptions
    | where ...
    | summarize timestamp = max(timestamp), value = (count(itemCount) * 1.0) by host_name = "Exceptions", host_type = "Web", counter_name = "Exception", threshold = 10
    | where value >= 10
union
    tab_cpu,        // 6 rows
    tab_memory,     // 6 rows
    tab_exceptions  // 1 row

То, что я ищу, - это включение результатов tab_cpu и tab_memory ONLY если в tab_exceptions есть строки.

Так я бы поступил в SQL Запросе, но не получил правильного решения для KQL.

IF EXISTS (SELECT * FROM tab_exceptions WHERE ...)
    SELECT * FROM tab_cpu WHERE ...;
    UNION
    SELECT * FROM tab_memory WHERE ...
    UNION
    SELECT * FROM tab_exceptions WHERE ...
ELSE
    ...

1 Ответ

5 голосов
/ 21 апреля 2020

вы можете использовать оператор union способом, аналогичным приведенному ниже:

let T1 = range x from 1 to 3 step 1; // for the other case, replace with: let T1 = datatable(x:long)[];
let T2 = range x from 4 to 6 step 1;
let T3 = range x from 7 to 9 step 1;
let T1_has_rows = toscalar(T1 | summarize count() > 0);
union
(T1 | where T1_has_rows == false),
(union T1, T2, T3 | where T1_has_rows == true)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...