Результаты поиска в Log Analytics в ADF - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь манипулировать результатами запроса Log Analytics и сталкиваюсь с блокпостом ... не совсем уверен, где спросить, поэтому, пожалуйста, укажите мне правильное направление, если это не так. Я целую неделю стучал головой об стену. Я выяснил, как это сделать с помощью серии веб-операций и 3-х вложенных конвейеров, но веб-операции не поддерживают том данных, который выполняет операция копирования.

Выход REST API для Log Analytics имеет вид:

{
"tables": [
    { 
         "name": "PrimaryResult",
         "columns": [
                         { "name": "Category", "type": "string" }, 
                         { "name": "count_", "type": "long" }
                    ],
          "rows": [
                     [ "Administrative", 20839 ],
                     [ "ServiceHealth", 11 ]
           ]
      }
   ]
}

Я хочу создать JSON объект вида

[{"Category":"Administrative", "count_": 20839},{"Category":"ServiceHealth", "count_": 11}]

Есть идеи? Опять же, если это неправильный форум, пожалуйста, дайте мне знать, и я отрегулирую соответственно.

1 Ответ

0 голосов
/ 18 марта 2020

Насколько мне известно, в ADF нет встроенной функции, которая могла бы обработать результат для вас.

[{"Category":"Administrative", "count_": 20839},{"Category":"ServiceHealth", "count_": 11}]

Вы должны самостоятельно управлять результатом. Я предлагаю вам создать HTTP Триггер Azure Функция для реализации этого поддерживается ADF Azure Функция Activity. Просто установите его после веб-активности, упомянутой в вашем вопросе.

Я написал тестовый образец для вас в Python коде. Конечно, вы можете использовать любой язык, который вы знаете.

import logging

import azure.functions as func

import json

def main(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')

    req_body = req.get_json()

    tables = req_body["tables"]
    returnArray = []
    for table in tables: 
        for row in table["rows"]:
            info ={}
            for inx,value in enumerate(row):
                info[table["columns"][inx]["name"]] = value
            returnArray.append(info)   

    if req_body:
        return func.HttpResponse(json.dumps(returnArray ))
    else:
        return func.HttpResponse(
             "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response.",
             status_code=200
        )

Результаты теста:

enter image description here

...