Получение определенного значения в результате в log analytics KQL

#azure-pipelines #azure-log-analytics #kql

Вопрос:

Я хочу получить отдельные столбцы для определенных строк из своего запроса, но также хочу возвращать другие столбцы, поэтому я хочу объединить distinct и project, но использовать distinct только для столбцов, для которых мне нужны уникальные значения. Или, лучше сказать, я хочу, чтобы запрос выбирал только одну копию запуска конвейера, даже если он выполнялся несколько раз.

 ADFActivityRun
| where ActivityType == "Copy" or ActivityType == "ExecuteDataFlow"
| where Status == "Succeeded" or Status == "Failed"
| project TimeGenerated, DataFactory=substring(tostring(split(ResourceId, "/", 8)), 2, strlen(tostring(split(ResourceId, "/", 8)))-4), PipelineRunId, PipelineName, ActivityName, Status, ActivityType, Start, End, ErrorMessage, FailureType, RowsRead  = parse_json(Output).rowsRead, RowsCopied = parse_json(Output).rowsCopied, rowsWritten = parse_json(Output).runStatus.metrics.sink1.rowsWritten |order by TimeGenerated desc 
| distinct PipelineName, PipelineRunId, ActivityName, Status, ActivityType, DataFactory
 

Ответ №1:

вы можете использовать take_any() для любых или arg_max() для последних:

например:

 ADFActivityRun
| where ActivityType in ("Copy", "ExecuteDataFlow")
| where Status in ("Succeeded", "Failed")
| extend Output = parse_json(Output)
| project TimeGenerated, 
          DataFactory = substring(tostring(split(ResourceId, "/", 8)), 2, strlen(tostring(split(ResourceId, "/", 8)))-4),
          PipelineRunId,
          PipelineName,
          ActivityName,
          Status,
          ActivityType,
          Start,
          End,
          ErrorMessage,
          FailureType,
          RowsRead = Output.rowsRead,
          RowsCopied = Output.rowsCopied,
          rowsWritten = Output.runStatus.metrics.sink1.rowsWritten
| summarize arg_max(TimeGenerated, *) by PipelineRunId
 

Комментарии:

1. Спасибо, добрый сэр, это сработало для меня, а также спасибо вам за помощь в рефакторинге моего кода.