Arbeiten mit großen Datasets von Azure-Ressourcen

Azure Resource Graph ist für das Arbeiten mit Informationen zu Ressourcen in Ihrer Azure-Umgebung und das Abrufen von diesen konzipiert. Mit Resource Graph erhalten Sie diese Daten schnell, selbst beim Abfragen von Tausenden von Datensätzen. Resource Graph umfasst mehrere Optionen für das Arbeiten mit diesen großen Datasets.

Anleitungen zum Arbeiten mit sehr häufigen Abfragen finden Sie im Leitfaden für gedrosselte Anforderungen.

Ergebnisgröße von Datasets

Standardmäßig sind in Resource Graph alle Abfragen so beschränkt, dass nur 1000 Datensätze zurückgegeben werden. Durch diese Steuerung werden sowohl Benutzer als auch der Dienst vor unbeabsichtigten Abfragen geschützt, die zu großen Datasets führen. Dieser Fall tritt meistens auf, wenn ein Kunde Abfragen testet, um Ressourcen seinen speziellen Anforderungen entsprechend zu suchen und zu filtern. Dieses Steuerelement unterscheidet sich von der Verwendung der Azure Data Explorer-Sprachoperatoren top und limit zum Einschränken der Ergebnisse.

Hinweis

Bei Verwendung von First sollten die Ergebnisse nach mindestens einer Spalte mit asc oder desc sortiert werden. Ohne Sortierung sind die zurückgegebenen Ergebnisse zufällig und nicht wiederholbar.

Das Standardlimit kann über alle Methoden für die Interaktion mit Resource Graph überschrieben werden. Die folgenden Beispiele zeigen, wie die Größenbeschränkung von Datasets in 200 geändert wird:

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

In der REST-API wird das Steuerelement $top verwendet, das Teil von QueryRequestOptions ist.

Das jeweils restriktivste Steuerelement hat Vorrang. Wenn in einer Abfrage beispielsweise die Operatoren top oder limit verwendet werden und sich dabei mehr Datensätze als bei First ergeben, entspricht die maximale Anzahl der zurückgegebenen Datensätze der durch First vorgegebenen Anzahl. Wenn top oder limit kleiner ist als First, wird als Datensatzgruppe jeweils der kleinere Wert der durch top oder limit konfigurierten Werte zurückgegeben.

Für den Parameter First ist 1000 als maximal zulässiger Wert festgelegt.

Größenbeschränkung für CSV-Exportergebnisse

Wenn Sie die Funktion für CSV-Exporte des Azure Resource Graph-Explorers nutzen, ist das Resultset auf 55.000 Datensätze beschränkt. Dies ist ein Plattformgrenzwert, der nicht durch Einsenden eines Azure-Supporttickets außer Kraft gesetzt werden kann.

Um CSV-Ergebnisse aus dem Azure-Portal herunterzuladen, navigieren Sie zum Azure Resource Graph-Explorer, und führen Sie eine Abfrage aus. Klicken Sie auf der Symbolleiste auf Als CSV herunterladen.

Überspringen von Datensätzen

Als weitere Option für das Arbeiten mit großen Datasets kann das Steuerelement Skip verwendet werden. Über dieses Steuerelement kann bei der Abfrage die definierte Anzahl von Datensätzen vor dem Zurückgeben der Ergebnisse übersprungen werden. Skip eignet sich für Abfragen, die Ergebnisse auf sinnvolle Weise sortieren, um so Datensätze abzurufen, die sich in der Mitte des Resultsets befinden. Wenn sich die erforderlichen Ergebnisse am Ende des zurückgegebenen Datasets befinden, ist es effizienter, eine andere Sortierungskonfiguration zu verwenden und stattdessen die Ergebnisse vom Anfang des Datasets abzurufen.

Hinweis

Bei Verwendung von Skip sollten die Ergebnisse nach mindestens einer Spalte mit asc oder desc sortiert werden. Ohne Sortierung sind die zurückgegebenen Ergebnisse zufällig und nicht wiederholbar. Wenn limit oder take in der Abfrage verwendet wird, wird Skip ignoriert.

Die folgenden Beispiele zeigen, wie die ersten 10 Datensätze übersprungen werden, die sich bei einer Abfrage ergeben, anstatt das zurückgegebene Resultset mit dem 11. Datensatz zu beginnen:

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

In der REST-API wird das Steuerelement $skip verwendet, das Teil von QueryRequestOptions ist.

Auslagerungsergebnisse

Wenn es erforderlich ist, ein Resultset in kleinere Datensatzgruppen zu unterteilen, um sie zu verarbeiten oder weil das Resultset den maximal zulässigen Wert von 1000 zurückgegebenen Datensätzen überschreitet, verwenden Sie die Paginierung. Die QueryResponse-REST-APIenthält folgende Werte, um anzugeben, dass ein Resultset aufgeteilt wurde: resultTruncated und $skipToken. resultTruncated ist ein boolescher Wert, über den der Consumer informiert wird, wenn weitere Datensätze vorhanden sind, die in der Antwort nicht zurückgegeben werden. Diese Bedingung kann auch erkannt werden, wenn der Wert der Eigenschaft count kleiner ist als der Wert der Eigenschaft totalRecords. totalRecords definiert die Anzahl der Datensätze, die mit der Abfrage übereinstimmen.

resultTruncated ist true, wenn weniger Ressourcen verfügbar sind, als von einer Abfrage angefordert werden, oder wenn Paging deaktiviert oder aus folgenden Gründen nicht möglich ist:

  • Die Abfrage enthält einen limit- oder sample/take-Operator.
  • Alle Ausgabespalten sind entweder vom Typ dynamic oder null.

Wenn resultTruncated auf true festgelegt ist, wird die Eigenschaft $skipToken nicht festgelegt.

Die folgenden Beispiele zeigen, wie Sie mit Azure CLI und Azure PowerShell die ersten 3.000 Datensätze überspringen und die ersten 1.000 Datensätze nach den übersprungenen Datensätzen zurückgeben:

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

Wichtig

Die Antwort enthält in folgenden Fällen kein $skipToken:

  • Die Abfrage enthält einen limit- oder sample/take-Operator.
  • Alle Ausgabespalten sind entweder vom Typ dynamic oder null.

Ein Beispiel finden Sie unter Next page query (Abfrage der nächsten Seite) in der REST-API-Dokumentation.

Formatieren von Ergebnissen

Die Ergebnisse einer Resource Graph-Abfrage werden in zwei Formaten bereitgestellt: Table und ObjectArray. Das Format wird als Teil der Anforderungsoptionen mit dem Parameter resultFormat konfiguriert. Das Table-Format ist der Standardwert für resultFormat.

Ergebnisse von Azure CLI werden standardmäßig im JSON-Format bereitgestellt. In Azure PowerShell resultiert ein PSResourceGraphResponse-Objekt, das jedoch schnell in JSON konvertiert werden kann, indem Sie das Cmdlet ConvertTo-Json auf die Eigenschaft Data anwenden. Bei anderen SDKs können die Abfrageergebnisse für die Ausgabe im ObjectArray-Format konfiguriert werden.

Format „Table“

Das Standardformat Table gibt Ergebnisse in einem JSON-Format zurück, das den Spaltenentwurf und die Zeilenwerte der von der Abfrage zurückgegebenen Eigenschaften hervorhebt. Dieses Format ähnelt Daten, die in einer strukturierten Tabelle oder Kalkulationstabelle definiert sind, wobei die Spalten zuerst angegeben sind, gefolgt von den einzelnen Zeilen zur Darstellung der Daten, die diesen Spalten zugeordnet sind.

Es folgt ein Beispiel für ein Abfrageergebnis mit Table-Formatierung:

{
    "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"
}

Format „ObjectArray“

Das ObjectArray-Format gibt ebenfalls Ergebnisse in einem JSON-Format zurück. Dieser Entwurf richtet sich jedoch nach der in JSON üblichen Schlüssel-Wert-Paarbeziehung, wobei die Spalten und die Zeilendaten in Arraygruppen abgeglichen werden.

Es folgt ein Beispiel für ein Abfrageergebnis mit ObjectArray-Formatierung:

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

Nächste Schritte