KQL-запрос Application Insights — нет в подзапросе

Как я могу вернуть результаты запроса, которых нет в результатах другого запроса? Например, я хочу вернуть результаты, полученные из первого запроса и отсутствующие во втором запросе:

Первый запрос:

customEvents
| extend Product = tostring(customDimensions.["Is Successful"])
| extend TransactionNumber = tostring(customDimensions.["Transaction Number"])
| extend StoreCode = tostring(customDimensions.["StoreCode"])
| where name contains 'Transaction Posted' and customDimensions.['Transaction Number'] != ''
| where customDimensions.["Is Successful"] == "False"
| project TransactionNumber

например если вышеописанное вернулось

145
167
100
94
56

Второй запрос:

customEvents
| extend Product = tostring(customDimensions.["Is Successful"])
| extend TransactionNumber = tostring(customDimensions.["Transaction Number"])
| extend StoreCode = tostring(customDimensions.["StoreCode"])
| where name contains 'Transaction Posted' and customDimensions.['Transaction Number'] != ''
| where customDimensions.["Is Successful"] == "True"
| project TransactionNumber

например если вышеописанное вернулось

94
95
96
97
167
100

Я хочу, чтобы набор результатов был:

145
56

Я пробовал следующее, но, похоже, это не возвращает результаты запроса об ошибках, которых нет в результатах запроса об успехах:

let failures = (customEvents
    | extend Product = tostring(customDimensions.["Is Successful"])
    | extend TransactionNumber = tostring(customDimensions.["Transaction Number"])
    | extend StoreCode = tostring(customDimensions.["StoreCode"])
    | where name contains 'Transaction Posted' and customDimensions.['Transaction Number'] != ''
    | where customDimensions.["Is Successful"] == "False"
    | project TransactionNumber);
let successes = (customEvents
    | extend Product = tostring(customDimensions.["Is Successful"])
    | extend TransactionNumber = tostring(customDimensions.["Transaction Number"])
    | extend StoreCode = tostring(customDimensions.["StoreCode"])
    | where name contains 'Transaction Posted' and customDimensions.['Transaction Number'] != ''
    | where customDimensions.["Is Successful"] == "True"
    | project TransactionNumber);
failures
| join kind=fullouter (successes) on TransactionNumber
| where isnull(TransactionNumber)
| project TransactionNumber

Ошибка устранилась? Или вы все еще ищете ответ?

RithwikBojja 20.06.2024 10:58

Все еще ищу ответ

Bhav 20.06.2024 11:24

Написал ответ @Bhav ..

RithwikBojja 20.06.2024 11:37
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
3
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Попробуйте сделать anti-join:

let failures = (customEvents
    | extend Product = tostring(customDimensions.["Is Successful"])
    | extend TransactionNumber = tostring(customDimensions.["Transaction Number"])
    | extend StoreCode = tostring(customDimensions.["StoreCode"])
    | where name contains 'Transaction Posted' and customDimensions.['Transaction Number'] != ''
    | where customDimensions.["Is Successful"] == "False"
    | project TransactionNumber);
let successes = (customEvents
    | extend Product = tostring(customDimensions.["Is Successful"])
    | extend TransactionNumber = tostring(customDimensions.["Transaction Number"])
    | extend StoreCode = tostring(customDimensions.["StoreCode"])
    | where name contains 'Transaction Posted' and customDimensions.['Transaction Number'] != ''
    | where customDimensions.["Is Successful"] == "True"
    | project TransactionNumber);
failures
| join kind=anti(successes) on TransactionNumber
| project TransactionNumber

Отметьте весь код и выполните его.

Это не возвращает результаты, которые находятся в первом наборе результатов, а не во втором. Например, 0286200624913433 — это номер неудачной транзакции, который возвращается как часть набора результатов сбоев и не входит в набор результатов успешных операций. Полный запрос не возвращает никаких результатов, но я ожидаю 0286200624913433.

Bhav 20.06.2024 11:26

Хорошо, мы можем это исправить. Я просто хотел исправить сообщение об ошибке из вашего первоначального вопроса.

decius 20.06.2024 11:28

Я исправил свой вопрос в своем ответе. А как насчет анти-соединения. Это то решение, которое вы ожидаете?

decius 20.06.2024 11:34

Вы можете интегрировать свой запрос, как показано ниже. Запрос KQL:

let failures = datatable(TransactionNumber: int)
[
 145,167,100,94,56
];
let successes = datatable(TransactionNumber: int)
[
94,95,96,97,167,100
];
failures
| join kind=leftanti (successes) on TransactionNumber

Выход:

Скрипка.

Я не знал, что существует площадка для запросов KQL. Прохладный. хорошо знать.

decius 21.06.2024 08:18

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