Teilen über


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 1.000 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 empfiehlt es sich, die Ergebnisse mit asc oder desc nach mindestens einer Spalte zu sortieren. 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 Ihrer Abfrage beispielsweise der Operator top oder limit verwendet wird und mehr Datensätze gefunden werden als gemäß first zulässig sind, entspricht die maximale Anzahl zurückgegebener Datensätze der durch first vorgegebenen Anzahl. Umgekehrt gilt, dass wenn top oder limit kleiner als first ist, die Größe der Datensatzgruppe jeweils dem niedrigsten der über top und limit konfigurierten Werte entspricht.

Für den Parameter first ist als maximal zulässiger Wert 1.000 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. Diese Einschränkung 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. Wählen Sie auf der Symbolleiste Als CSV herunterladen aus.

Überspringen von Datensätzen

Eine weitere Option für das Arbeiten mit großen Datasets ist das Steuerelement skip. Ü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, bei denen die Ergebnisse auf sinnvolle Weise sortiert werden, um so Datensätze abzurufen, die sich irgendwo 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 empfiehlt es sich, die Ergebnisse mit asc oder desc nach mindestens einer Spalte zu sortieren. Ohne Sortierung sind die zurückgegebenen Ergebnisse zufällig und nicht wiederholbar. Wenn in der Abfrage limit oder take 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 REST-API QueryResponse stellt Werte bereit, die angeben, 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 Paginierung deaktiviert oder aus folgenden Gründen nicht möglich ist:

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

Wenn resultTruncated den Wert true aufweist, wird die Eigenschaft $skipToken nicht festgelegt.

Die folgenden Beispiele zeigen, wie Sie mit der Azure CLI und Azure PowerShell die ersten 3.000 Datensätze überspringen und die ersten (first) 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 $skipToken nicht:

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

Ein Beispiel finden Sie in der REST-API-Dokumentation unter Abfrage der nächsten Seite.

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 Format Table ist der Standardwert für resultFormat.

Ergebnisse von Azure CLI werden standardmäßig im JSON-Format bereitgestellt. In Azure PowerShell handelt es sich bei den Ergebnissen um ein PSResourceGraphResponse-Objekt, das jedoch schnell in JSON konvertiert werden kann, indem das Cmdlet ConvertTo-Json für die Eigenschaft data verwendet wird. Bei anderen SDKs kann konfiguriert werden, dass die Abfrageergebnisse im ObjectArray-Format ausgegeben werden.

Format „Table“

Beim Standardformat Table werden die Ergebnisse in einem JSON-Format zurückgegeben, das so konzipiert ist, dass die Spaltenstruktur und die Zeilenwerte der Eigenschaften hervorgehoben werden, die für die Abfrage zurückgegeben werden. 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.

Hier sehen Sie ein Beispiel für ein Abfrageergebnis mit der 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“

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

Hier sehen Sie ein Beispiel für ein Abfrageergebnis mit der 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"
}

Abfragetimeout

Azure Resource Graph erzwingt ein an Azure Resource Manager angepasstes Abfragetimeout nach 30 Sekunden.

Lösungsvorschläge:

  • Wiederholen Sie die Abfrage mit einem kleineren Bereich. Fragen Sie beispielsweise weniger Abonnements ab.
  • Bei Abfragen, in denen join verwendet wird, sollten auf der linken Seite von join kleinere Resultsets stehen.

Nächste Schritte