KQL для ARG - проверка, удовлетворяет ли какой-либо элемент массива предикату

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

Можно ли фильтровать строки, проверяя, удовлетворяет ли какое-либо из значений массива предикату?

В настоящее время я могу подавать заявки только на первое значение.

      | where parse_ipv4(tostring(addrs[0].ip)) > parse_ipv4("1.1.1.1")

Однако я не смог применить это ко всем значениям массива.

1 ответ

Azure Resource Graph не поддерживает языковые элементы KQL, такие как «let», что затрудняет создание пользовательских данных. Одним из способов решения этой проблемы может быть расширение столбца существующей таблицы.


Если вы хотите сделать точное сравнение, то соединения будет достаточно.

      resources
| take 1
| project  ComparisonIPs = pack_array("1.1.1.1","2.2.2.2","3.3.3.3","4.4.4.4")
| mv-expand ComparisonIPs to typeof(string)
| join kind = innerunique (
    // Your
    resources
    | where type == "microsoft.network/publicipaddresses"
    | project ipAddress = tostring(parse_json(properties).ipAddress), id
) on $left.ComparisonIPs == $right.ipAddress

В качестве альтернативы для сравнения предиката создайте общий столбец для объединения двух наборов данных, выполните внутреннее соединение, а затем выполните сравнение результирующего набора.

      resources
| take 1
| project  ComparisonIPs = pack_array("1.1.1.1","2.2.2.2","3.3.3.3","4.4.4.4")
| mv-expand ComparisonIPs to typeof(string)
| extend Parsed = parse_ipv4(ComparisonIPs)
| extend JoinColumn = "1"
| join kind = inner (
resources
    | where type == "microsoft.network/publicipaddresses"
    | project ipAddress = tostring(parse_json(properties).ipAddress)
    | extend Parsed = parse_ipv4(ipAddress)
    | extend JoinColumn = "1"
) on JoinColumn
| where Parsed > Parsed1

Существуют и другие варианты, в зависимости от того, чего вы пытаетесь достичь, например передача данных в качестве параметров в книгах Azure Monitor и повторное использование результатов ARG в Log Analytics, возможно, со ссылкой на externaldata() или список наблюдения в Azure Sentinel.

Другие вопросы по тегам