Работа с большими наборами данных ресурса Azure

Azure Resource Graph предназначен для работы и получения сведений о ресурсах в вашей среде Azure. Resource Graph дает возможность получать эти данные быстро, даже при запросе тысяч записей. Resource Graph имеет несколько параметров для работы с этими большими наборами данных.

Рекомендации по работе с запросами с высокой частотой см. в статье Руководство по регулируемым запросам.

Размер результата набора данных

По умолчанию Resource Graph ограничивает любой запрос на возврат только 1000 записей. Этот элемент управления защищает как пользователя, так и службу от непреднамеренных запросов, которые могут привести к большим наборам данных. Это событие чаще всего происходит, когда клиент экспериментирует с запросами, чтобы найти и отфильтровать ресурсы в соответствии с их конкретными потребностями. Этот элемент управления отличается от использования операторов языка Azure Data Explorer top или limit для ограничения результатов.

Примечание.

При использовании First рекомендуется упорядочивать результаты как asc или desc по крайней мере по одному столбцу. Без сортировки возвращаемые результаты будут случайными и не повторяемыми.

Ограничение по умолчанию может быть отменено всеми методами взаимодействия с Resource Graph. Следующие примеры демонстрируют изменение ограничения размера набора данных на 200.

az graph query -q "Resources | project name | order by name asc" --first 200 --output table
Search-AzGraph -Query "Resources | project name | order by name asc" -First 200

В REST API элемент управления является $top и частью QueryRequestOptions.

Элемент управления, который является наиболее строгим, победит. Например, если ваш запрос использует операторы top или limit и приводит к большему количеству записей, чем First, максимальное количество возвращаемых записей будет равно First. Аналогичным образом, если top или limit меньше, чем First, возвращенный набор записей будет меньшим значением, настроенным с помощью top или limit.

Первый параметр имеет максимально допустимое значение 1000.

Ограничение размера результата экспорта CSV

При использовании функции экспорта с разделением запятыми (CSV) Обозреватель Azure Resource Graph результирующий набор ограничен 55 000 записями. Это ограничение платформы, которое невозможно переопределить путем подачи поддержка Azure билета.

Чтобы скачать результаты CSV из портал Azure, перейдите к Обозреватель Azure Resource Graph и запустите запрос. На панели инструментов нажмите кнопку "Скачать как CSV".

Пропуск записей

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

Примечание.

При использовании Skip рекомендуется упорядочивать результаты как asc или desc по крайней мере по одному столбцу. Без сортировки возвращаемые результаты будут случайными и не повторяемыми. Если в запросе используется limit или take, Skip игнорируется.

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

az graph query -q "Resources | project name | order by name asc" --skip 10 --output table
Search-AzGraph -Query "Resources | project name | order by name asc" -Skip 10

В REST API элемент управления является $skip и частью QueryRequestOptions.

Разбиение результатов по страницам

Если необходимо разбить результирующий набор на меньшие наборы записей для обработки или если он превышает максимально допустимое значение возвращаемых записей (1000), используйте разбиение на страницы. REST APIQueryResponse предоставляет значения, указывающие, что набор результатов разбит на resultTruncated и $skipToken. resultTruncated — логическое значение, которое оповещает потребителя о наличии других записей, которые не были возвращены в ответе. Это условие также можно определить, когда свойство count меньше, чем свойство totalRecords. totalRecords определяет, сколько записей соответствует запросу.

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

  • Запрос содержит limit или оператор sample/take.
  • Все выходные столбцы имеют тип dynamic или null.

Когда свойство resultTruncated равно true, свойство $skipToken не задается.

В следующих примерах показано, как пропустить первые 3000 записей и возвратить первые 1000 записей после тех, которые были пропущены с помощью Azure CLI и Azure PowerShell:

az graph query -q "Resources | project id, name | order by id asc" --first 1000 --skip 3000
Search-AzGraph -Query "Resources | project id, name | order by id asc" -First 1000 -Skip 3000

Важно!

Ответ не будет содержать $skipToken, если:

  • Запрос содержит limit или оператор sample/take.
  • Все выходные столбцы имеют тип dynamic или null.

Пример см. в разделе Запрос следующей страницы в документации REST API.

Результаты форматирования

Результаты запроса к Resource Graph предоставляются в двух форматах: Table и ObjectArray. Этот формат настраивается с помощью параметра resultFormat запроса. Формат Table является значением по умолчанию для resultFormat.

Результаты из Azure CLI предоставляются по умолчанию в формате JSON. Результаты в Azure PowerShell по умолчанию представляют собой объект PSResourceGraphResponse, но их можно быстро преобразовать в формат JSON с помощью командлета ConvertTo-Json, применив его к свойству Data. Для других пакетов SDK можно настроить вывод результатов запроса в формате ObjectArray.

Формат Table

Формат по умолчанию Table возвращает результаты в формате JSON, предназначенном для выделения структуры столбцов и значений строк свойств, возвращаемых запросом. Этот формат очень похож на то, как данные определяются в структурированной или электронной таблице: сначала определяются столбцы, а затем каждая строка с данными для этих столбцов.

Вот пример результата запроса в формате Table:

{
    "totalRecords": 47,
    "count": 1,
    "data": {
        "columns": [{
                "name": "name",
                "type": "string"
            },
            {
                "name": "type",
                "type": "string"
            },
            {
                "name": "location",
                "type": "string"
            },
            {
                "name": "subscriptionId",
                "type": "string"
            }
        ],
        "rows": [
            [
                "veryscaryvm2-nsg",
                "microsoft.network/networksecuritygroups",
                "eastus",
                "11111111-1111-1111-1111-111111111111"
            ]
        ]
    },
    "facets": [],
    "resultTruncated": "true"
}

Формат ObjectArray

Формат ObjectArray также возвращает результаты в формате JSON. Однако он соответствует отношению "ключ-значение", часто используемому в JSON и предполагающему сопоставление данных столбцов и строк в группах массива.

Вот пример результата запроса в формате ObjectArray:

{
    "totalRecords": 47,
    "count": 1,
    "data": [{
        "name": "veryscaryvm2-nsg",
        "type": "microsoft.network/networksecuritygroups",
        "location": "eastus",
        "subscriptionId": "11111111-1111-1111-1111-111111111111"
    }],
    "facets": [],
    "resultTruncated": "true"
}

Следующие шаги