Trabajo con grandes conjuntos de datos de recursos de Azure

Azure Resource Graph está diseñado para trabajar con el entorno de Azure y obtener información sobre los recursos que contiene. Resource Graph permite obtener estos datos de manera más rápida, incluso cuando se consultan miles de registros. Resource Graph presenta varias opciones de funcionamiento con estos grandes conjuntos de datos.

Para instrucciones sobre cómo trabajar con consultas con mucha frecuencia, consulte Guía para solicitudes limitadas.

Tamaño de resultados del conjunto de datos

De forma predeterminada, en Resource Graph hay un límite en el número de registros que se pueden devolver en una consulta, y son 1000 registros. Este control protege tanto al usuario como al servicio de consultas no intencionadas que darían lugar a grandes conjuntos de datos. Este caso suele suceder cuando un cliente experimenta con consultas para buscar y filtrar los recursos de la manera en que se adapte a sus necesidades concretas. Este control es diferente que usar los operadores de lenguaje top o limit de Azure Data Explorer para limitar los resultados.

Nota

Al usar la opción First, se recomienda ordenar los resultados con al menos una columna con asc o desc. Si los resultados no están ordenados, los resultados devueltos son aleatorios y no se pueden repetir.

El límite predeterminado se puede invalidar mediante todos los métodos de interacción con Resource Graph. En los ejemplos siguientes se muestra cómo cambiar el límite de tamaño del conjunto de datos a 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

En la API REST, el control es $top y forma parte de QueryRequestOptions.

El control que sea más restrictivo ganará. Por ejemplo, si la consulta usa los operadores top o limit y el resultado va a ser un número de registros superior a First, el número máximo de registros devueltos será igual a First. Igualmente, si top o limit son más pequeños que First, el conjunto de registros devuelto sería el valor más pequeño que configure top o limit.

El parámetro First tiene un valor permitido máximo de 1000.

Limitación del tamaño del resultado de exportación de CSV

Al usar la funcionalidad de exportación de valores separados por comas (CSV) de Azure Resource Graph Explorer, el conjunto de resultados se limita a 55 000 registros. Se trata de un límite de plataforma que no se puede invalidar mediante la presentación de una incidencia de Soporte técnico de Azure.

Para descargar los resultados CSV de Azure Portal, vaya al Explorador de Azure Resource Graph y ejecute una consulta. En la barra de herramientas, haga clic en Descargar como CSV.

Omisión de registros

La siguiente opción para trabajar con grandes conjuntos de datos es el control Skip. Este control permite que la consulta salte u omita el número definido de registros antes de devolver los resultados. Skip es útil con consultas que ordenan los resultados de una manera significativa donde la intención es obtener los recursos que se encuentran hacia la mitad del conjunto de resultados. Si los resultados necesarios están al final del conjunto de datos devuelto, es mejor usar una configuración de ordenación diferente y recuperar los resultados del principio del conjunto de datos.

Nota

Al usar la opción Skip, se recomienda ordenar los resultados con al menos una columna con asc o desc. Si los resultados no están ordenados, los resultados devueltos son aleatorios y no se pueden repetir. Si se usan limit o take en la consulta, se omite Skip.

En los ejemplos siguientes se muestra cómo omitir los primeros 10 registros que devolvería una consulta, en lugar de comenzar el conjunto de resultados devuelto con el registro número 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

En la API REST, el control es $skip y forma parte de QueryRequestOptions.

Paginación de resultados

Cuando sea necesario dividir un conjunto de resultados en conjuntos de registros más pequeños para su procesamiento, o porque un conjunto de resultados superaría el valor máximo permitido de 1000 registros devueltos, use la paginación. La API RESTQueryResponse proporciona valores para indicar que un conjunto de resultados se ha dividido: resultTruncated y $skipToken. resultTruncated es un valor booleano que avisa al consumidor si existen más registros no devueltos en la respuesta. Esta condición también se puede identificar cuando la propiedad count es menor que la propiedad totalRecords. totalRecords define cuántos registros coinciden con la consulta.

resultTruncated es true cuando hay menos recursos disponibles de los que una consulta está solicitando o cuando la paginación está deshabilitada o no es posible debido:

  • La consulta contiene un limit o un operador sample/take.
  • Todas las columnas de salida son del tipo dynamic o null.

Cuando resultTruncated es true, la propiedad $skipToken no se establece.

En los ejemplos siguientes se muestra cómo omitir los primeros 3000 registros y cómo devolver los primeros 1000 registros después de los registros omitidos con la CLI de Azure y 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

Importante

La respuesta no incluirá $skipToken si:

  • La consulta contiene un limit o un operador sample/take.
  • Todas las columnas de salida son del tipo dynamic o null.

Para obtener un ejemplo, consulte Consulta de página siguiente en la documentación de la API REST.

Resultados de formato

Los resultados de una consulta de Resource Graph se proporcionan en dos formatos, Table y ObjectArray. El formato se configura con el parámetro resultFormat como parte de las opciones de solicitud. El formato Table es el valor predeterminado para resultFormat.

De forma predeterminada, los resultados de la CLI de Azure se proporcionan en JSON. Los resultados en Azure PowerShell son un objeto PSResourceGraphResponse, pero se pueden convertir rápidamente a JSON mediante el cmdlet ConvertTo-Json en la propiedad Data. En el caso de otros SDK, los resultados de la consulta pueden configurarse para generar el formato ObjectArray.

Formato: Table

El formato predeterminado, Table, devuelve resultados en un formato JSON diseñado para resaltar el diseño de columna y los valores de fila de las propiedades que devuelve la consulta. Este formato se parece mucho a los datos definidos en una hoja de cálculo o tabla estructurada con las columnas identificadas primero y, después, cada fila que representa datos alineada con esas columnas.

Este es un ejemplo del resultado de una consulta con el formato 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"
}

Formato: ObjectArray

El formato ObjectArray también devuelve resultados en formato JSON, pero este diseño se alinea con la relación de par clave-valor común en JSON, donde los datos de columna y fila se relacionan en grupos de matrices.

Este es un ejemplo del resultado de una consulta con el formato ObjectArray:

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

Pasos siguientes