

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Massenoperationen mit Anlagen und Modellen
<a name="bulk-operations-assets-and-models"></a>

Wenn Sie mit einer großen Anzahl von Objekten oder Anlagenmodellen arbeiten möchten, verwenden Sie Massenoperationen, um Ressourcen massenweise zu importieren und an einen anderen Speicherort zu exportieren. Sie können beispielsweise eine Datendatei erstellen, die Assets oder Asset-Modelle in einem Amazon S3 S3-Bucket definiert, und diese mithilfe des Massenimports erstellen oder aktualisieren AWS IoT SiteWise. Wenn Sie über eine große Anzahl von Assets oder Asset-Modellen verfügen AWS IoT SiteWise, können Sie diese alternativ nach Amazon S3 exportieren. 

**Anmerkung**  
Sie führen Massenoperationen durch, AWS IoT SiteWise indem Sie Operationen in der AWS IoT TwinMaker API aufrufen. Sie können dies tun, ohne einen AWS IoT TwinMaker Workspace einzurichten AWS IoT TwinMaker oder zu erstellen. Sie benötigen lediglich einen Amazon S3 S3-Bucket, in dem Sie Ihre AWS IoT SiteWise Inhalte platzieren können.   


**Topics**
+ [Wichtige Konzepte und Terminologie](#bulk-operations-terminology)
+ [Unterstützte Funktionen](#bulk-operations-functionality)
+ [Voraussetzungen für Massenoperationen](bulk-operations-prereqs.md)
+ [Führen Sie einen Massenimportauftrag aus](running-bulk-operations-import.md)
+ [Führen Sie einen Massenexportauftrag aus](running-bulk-operations-export.md)
+ [Verfolgung des Auftragsfortschritts und Fehlerbehandlung](jobs-progress-error-handling.md)
+ [Beispiele für den Import von Metadaten](bulk-operations-import-metadata-example.md)
+ [Beispiele für den Export von Metadaten](bulk-operations-export-filter-examples.md)
+ [AWS IoT SiteWise Auftragsschema für die Übertragung von Metadaten](bulk-operations-schema.md)

## Wichtige Konzepte und Terminologie
<a name="bulk-operations-terminology"></a>

AWS IoT SiteWise Die Funktionen für Massenimport und -export basieren auf den folgenden Konzepten und Begriffen:
+ **Import**: Die Aktion, bei der Assets oder Asset-Modelle aus einer Datei in einem Amazon S3 S3-Bucket in verschoben AWS IoT SiteWise werden.
+ **Export**: Die Aktion, bei der Assets oder Asset-Modelle aus AWS IoT SiteWise einem Amazon S3 S3-Bucket verschoben werden.
+ **Quelle**: Der Startort, von dem Sie Inhalte verschieben möchten.

  Ein Amazon S3 S3-Bucket ist beispielsweise eine Importquelle und AWS IoT SiteWise eine Exportquelle.
+ **Ziel**: Der gewünschte Ort, an den Sie Ihre Inhalte verschieben möchten.

  Ein Amazon S3 S3-Bucket ist beispielsweise ein Exportziel und AWS IoT SiteWise ein Importziel.
+ **AWS IoT SiteWise Schema**: Dieses Schema wird verwendet, um Metadaten von zu importieren und zu exportieren AWS IoT SiteWise.
+ **Ressource der obersten Ebene:** Eine AWS IoT SiteWise Ressource, die Sie individuell erstellen oder aktualisieren können, z. B. ein Asset oder ein Asset-Modell.
+ **Unterressource:** Eine verschachtelte AWS IoT SiteWise Ressource innerhalb einer Ressource der obersten Ebene. Beispiele hierfür sind Eigenschaften, Hierarchien und zusammengesetzte Modelle.
+ **Metadaten**: Wichtige Informationen, die für den erfolgreichen Import oder Export von Ressourcen erforderlich sind. Beispiele für Metadaten sind Definitionen von Vermögenswerten und Asset-Modellen.
+ **metadataTransferJob**: Das Objekt, das beim Ausführen erstellt wurde`CreateMetadataTransferJob`.

## Unterstützte Funktionen
<a name="bulk-operations-functionality"></a>

In diesem Thema wird erklärt, was Sie tun können, wenn Sie einen Massenvorgang ausführen. Massenvorgänge unterstützen die folgenden Funktionen:
+ **Erstellung von Ressourcen auf oberster Ebene:** Wenn Sie ein Asset oder ein Asset-Modell importieren, das keine ID definiert oder dessen ID nicht mit der einer vorhandenen ID übereinstimmt, wird es als neue Ressource erstellt.
+ **Ersetzung von Ressourcen auf oberster Ebene:** Wenn Sie ein Asset oder ein Asset-Modell importieren, dessen ID mit einer bereits vorhandenen übereinstimmt, ersetzt es die vorhandene Ressource.
+ **Erstellen, Ersetzen oder Löschen von Unterressourcen:** Wenn Ihr Import eine Ressource der obersten Ebene ersetzt, z. B. eine Anlage oder ein Anlagenmodell, ersetzt die neue Definition alle Unterressourcen wie Eigenschaften, Hierarchien oder zusammengesetzte Modelle. 

  Wenn Sie beispielsweise ein Asset-Modell während eines Massenimports aktualisieren und die aktualisierte Version eine Eigenschaft definiert, die im Original nicht vorhanden war, wird eine neue Eigenschaft erstellt. Wenn sie eine Eigenschaft definiert, die bereits vorhanden ist, wird die vorhandene Eigenschaft aktualisiert. Wenn das aktualisierte Objektmodell eine Eigenschaft auslässt, die im Original vorhanden war, wird die Eigenschaft gelöscht.
+ **Kein Löschen von Ressourcen auf oberster Ebene:** Bei Massenvorgängen wird kein Asset oder Asset-Modell gelöscht. Bei Massenvorgängen werden sie nur erstellt oder aktualisiert.

# Voraussetzungen für Massenoperationen
<a name="bulk-operations-prereqs"></a>

In diesem Abschnitt werden die Voraussetzungen für Massenoperationen erläutert, einschließlich AWS Identity and Access Management (IAM-) Berechtigungen für den Austausch von Ressourcen zwischen AWS Diensten und Ihrem lokalen Computer. Bevor Sie einen Massenvorgang starten, müssen Sie die folgenden Voraussetzungen erfüllen:
+ Erstellen Sie einen Amazon S3 S3-Bucket zum Speichern von Ressourcen. Weitere Informationen zur Verwendung von Amazon S3 finden Sie unter [Was ist Amazon S3?](https://docs.aws.amazon.com//AmazonS3/latest/userguide/Welcome.html)

## IAM-Berechtigungen
<a name="bulk-operations-prereqs-permissions"></a>

Um Massenoperationen durchzuführen, müssen Sie eine AWS Identity and Access Management (IAM-) Richtlinie mit Berechtigungen erstellen, die den Austausch von AWS Ressourcen zwischen Amazon S3 und Ihrem lokalen Computer ermöglichen. AWS IoT SiteWise Weitere Informationen zum Erstellen von benutzerdefinierten Richtlinien finden Sie unter [IAM-Richtlinien erstellen](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html). 

Um Massenoperationen durchzuführen, benötigen Sie die folgenden Richtlinien.

### AWS IoT SiteWise Richtlinie
<a name="bluk-operations-prereqs-policy"></a>

Diese Richtlinie ermöglicht den Zugriff auf die erforderlichen AWS IoT SiteWise API-Aktionen für Massenoperationen:

```
{
    "Sid": "SiteWiseApiAccess",
    "Effect": "Allow",
    "Action": [
        "iotsitewise:CreateAsset",
        "iotsitewise:CreateAssetModel",
        "iotsitewise:UpdateAsset",
        "iotsitewise:UpdateAssetModel",
        "iotsitewise:UpdateAssetProperty",
        "iotsitewise:ListAssets",
        "iotsitewise:ListAssetModels",
        "iotsitewise:ListAssetProperties",
        "iotsitewise:ListAssetModelProperties",
        "iotsitewise:ListAssociatedAssets",
        "iotsitewise:DescribeAsset",
        "iotsitewise:DescribeAssetModel",
        "iotsitewise:DescribeAssetProperty",
        "iotsitewise:AssociateAssets",
        "iotsitewise:DisassociateAssets",
        "iotsitewise:AssociateTimeSeriesToAssetProperty",
        "iotsitewise:DisassociateTimeSeriesFromAssetProperty",
        "iotsitewise:BatchPutAssetPropertyValue",
        "iotsitewise:BatchGetAssetPropertyValue",
        "iotsitewise:TagResource",
        "iotsitewise:UntagResource",
        "iotsitewise:ListTagsForResource",
        "iotsitewise:CreateAssetModelCompositeModel",
        "iotsitewise:UpdateAssetModelCompositeModel",
        "iotsitewise:DescribeAssetModelCompositeModel",
        "iotsitewise:DeleteAssetModelCompositeModel",
        "iotsitewise:ListAssetModelCompositeModels",
        "iotsitewise:ListCompositionRelationships",
        "iotsitewise:DescribeAssetCompositeModel"
    ],
    "Resource": "*"
}
```

### AWS IoT TwinMaker Richtlinie
<a name="bulk-operations-TwinMaker-policy"></a>

Diese Richtlinie ermöglicht den Zugriff auf die AWS IoT TwinMaker API-Operationen, die Sie für die Arbeit mit Massenoperationen verwenden:

```
{
    "Sid": "MetadataTransferJobApiAccess",
    "Effect": "Allow",
    "Action": [
        "iottwinmaker:CreateMetadataTransferJob",
        "iottwinmaker:CancelMetadataTransferJob",
        "iottwinmaker:GetMetadataTransferJob",
        "iottwinmaker:ListMetadataTransferJobs"
    ],
    "Resource": "*"
}
```

### Amazon S3 S3-Richtlinie
<a name="bulk-operations-S3-policy"></a>

Diese Richtlinie bietet Zugriff auf Amazon S3 S3-Buckets für die Übertragung von Metadaten für Massenoperationen.

------
#### [ For a specific Amazon S3 bucket ]

Wenn Sie einen bestimmten Bucket für die Arbeit mit Ihren Metadaten für Massenoperationen verwenden, bietet diese Richtlinie Zugriff auf diesen Bucket:

```
{
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:AbortMultipartUpload",
        "s3:ListBucketMultipartUploads",
        "s3:ListMultipartUploadParts"
    ],
    "Resource": [
        "arn:aws:s3:::bucket name",
        "arn:aws:s3:::bucket name/*"
    ]
}
```

------
#### [ To allow any Amazon S3 bucket ]

Wenn Sie viele verschiedene Buckets verwenden, um mit Ihren Metadaten für Massenoperationen zu arbeiten, bietet diese Richtlinie Zugriff auf jeden beliebigen Bucket:

```
{
    "Effect": "Allow",
    "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:GetBucketLocation",
        "s3:ListBucket",
        "s3:AbortMultipartUpload",
        "s3:ListBucketMultipartUploads",
        "s3:ListMultipartUploadParts"
    ],
    "Resource": "*"
}
```

------<a name="bulk-operations-troubleshooting"></a>

Informationen zur Fehlerbehebung bei Import- und Exportvorgängen finden Sie unter[Problembehandlung beim Massenimport und -export](troubleshooting-bulk.md).

# Führen Sie einen Massenimportauftrag aus
<a name="running-bulk-operations-import"></a>

 Beim Massenimport werden Metadaten in einen AWS IoT SiteWise Workspace verschoben. Durch den Massenimport können beispielsweise Metadaten aus einer lokalen Datei oder einer Datei in einem Amazon S3 S3-Bucket in einen AWS IoT SiteWise Workspace verschoben werden. 

## Schritt 1: Bereiten Sie die Datei für den Import vor
<a name="preparing-import-file"></a>

Laden Sie die Datei im AWS IoT SiteWise nativen Format herunter, um Assets und Asset-Modelle zu importieren. Weitere Details finden Sie unter [AWS IoT SiteWise Auftragsschema für die Übertragung von Metadaten](bulk-operations-schema.md). 

## Schritt 2: Laden Sie die vorbereitete Datei auf Amazon S3 hoch
<a name="uploading-import-file"></a>

 Laden Sie die Datei auf Amazon S3 hoch. Weitere Informationen finden Sie unter [Hochladen einer Datei auf Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket) im *Amazon Simple Storage Service-Benutzerhandbuch*. 

## Metadaten importieren (Konsole)
<a name="import-metadata-console"></a>

Sie können den verwenden AWS-IoT-SiteWise-Konsole , um Metadaten massenweise zu importieren. Folgen Sie [Schritt 1: Bereiten Sie die Datei für den Import vor](#preparing-import-file) und bereiten [Schritt 2: Laden Sie die vorbereitete Datei auf Amazon S3 hoch](#uploading-import-file) Sie eine Datei vor, die für den Import bereit ist.

**Daten von Amazon S3 importieren nach AWS-IoT-SiteWise-Konsole**

1. Navigieren Sie zur [AWS IoT SiteWise -Konsole](https://console.aws.amazon.com/iotsitewise/).

1. Wählen Sie im Navigationsbereich die Option **Massenoperationen Neu** aus.

1. Wählen Sie **Neuer Import**, um den Importvorgang zu starten.

1. Gehen Sie auf der Seite **Metadaten importieren** wie folgt vor:
   + Wählen Sie **Amazon S3 durchsuchen**, um den Amazon S3 S3-Bucket und die Dateien anzuzeigen.
   + Navigieren Sie zu dem Amazon S3 S3-Bucket, der die vorbereitete Importdatei enthält.
   + Wählen Sie die zu importierende Datei aus.
   + Überprüfen Sie die ausgewählte Datei und wählen Sie „**Importieren“**.

1. **Auf der Seite „Massenvorgänge für SiteWise Metadaten**“ von AWS-IoT-SiteWise-Konsole wird der neu erstellte Importauftrag in der **Fortschrittstabelle der Jobs** angezeigt.

## Metadaten importieren (AWS CLI)
<a name="import-metadata-cli"></a>

Gehen Sie wie folgt vor, um eine Importaktion durchzuführen:

**Daten von Amazon S3 importieren nach AWS CLI**

1. Erstellen Sie eine Metadatendatei, die die Ressourcen angibt, die Sie importieren möchten, und folgen Sie dabei dem[AWS IoT SiteWise Auftragsschema für die Übertragung von Metadaten](bulk-operations-schema.md). Speichern Sie diese Datei in Ihrem Amazon S3 S3-Bucket.

   Beispiele für zu importierende Metadatendateien finden Sie unter[Beispiele für den Import von Metadaten](bulk-operations-import-metadata-example.md). 

1. Erstellen Sie nun eine JSON-Datei mit dem Hauptteil der Anfrage. Der Anforderungstext gibt die Quelle und das Ziel für den Übertragungsjob an. Diese Datei ist von der Datei aus dem vorherigen Schritt getrennt. Stellen Sie sicher, dass Sie Ihren Amazon S3 S3-Bucket als Quelle und `iotsitewise` als Ziel angeben. 

   Das folgende Beispiel zeigt den Hauptteil der Anfrage:

   ```
   {
         "metadataTransferJobId": "your-transfer-job-Id",
         "sources": [{
             "type": "s3",
             "s3Configuration": {
                 "location": "arn:aws:s3:::amzn-s3-demo-bucket/your_import_metadata.json"
             }
         }],
         "destination": {
             "type": "iotsitewise"
         }
     }
   ```

1. Rufen Sie den auf, `CreateMetadataTransferJob` indem Sie den folgenden AWS CLI Befehl ausführen. In diesem Beispiel wird die Anforderungstextdatei aus dem vorherigen Schritt benannt`createMetadataTransferJobExport.json`.

   ```
   aws iottwinmaker create-metadata-transfer-job --region us-east-1 \
     --cli-input-json file://createMetadataTransferJobImport.json
   ```

   Dadurch wird ein Auftrag zur Übertragung von Metadaten erstellt und der Prozess der Übertragung der ausgewählten Ressourcen gestartet.

# Führen Sie einen Massenexportauftrag aus
<a name="running-bulk-operations-export"></a>

 Beim Massenexport werden Metadaten von einem AWS IoT SiteWise Workspace in einen Amazon S3 S3-Bucket verschoben. 

Wenn Sie einen Massenexport Ihrer AWS IoT SiteWise Inhalte nach Amazon S3 durchführen, können Sie Filter angeben, um einzuschränken, welche spezifischen Asset-Modelle und Assets Sie exportieren möchten.

Die Filter müssen in einem `iotSiteWiseConfiguration` Abschnitt im Quellenbereich Ihrer JSON-Anfrage angegeben werden.

**Anmerkung**  
 Sie können mehrere Filter in Ihre Anfrage aufnehmen. Bei der Massenoperation werden Asset-Modelle und Assets exportiert, die einem der Filter entsprechen.   
 Wenn Sie keine Filter angeben, exportiert der Massenvorgang alle Ihre Asset-Modelle und Assets. 

**Example Hauptteil mit Filtern anfordern**  

```
{
      "metadataTransferJobId": "your-transfer-job-id",
      "sources": [
       {
        "type": "iotsitewise",
        "iotSiteWiseConfiguration": {
          "filters": [
           {
              "filterByAssetModel": {
                  "assetModelId": "asset model ID"
              }
            },
            {
              "filterByAssetModel": {
                  "assetModelId": "asset model ID",
                  "includeAssets": true
              }
            },
            {
              "filterByAssetModel": {
                  "assetModelId": "asset model ID",
                  "includeOffspring": true
               }
             }
           ]
          }
        }
       ],
       "destination": {
          "type": "s3",
          "s3Configuration": {
            "location": "arn:aws:s3:::amzn-s3-demo-bucket"
          }
      }
}
```

## Metadaten exportieren (Konsole)
<a name="export-metadata-console"></a>

Das folgende Verfahren erklärt die Exportaktion der Konsole:

**Erstellen Sie einen Exportauftrag im AWS-IoT-SiteWise-Konsole**

1.  Navigieren Sie zur [AWS IoT SiteWise -Konsole](https://console.aws.amazon.com/iotsitewise/).

1. Wählen Sie im Navigationsbereich die Option **Massenoperationen Neu** aus.

1. Wählen Sie **Neuer Export**, um den Exportvorgang zu starten.

1. Gehen Sie auf der Seite **Metadaten exportieren** wie folgt vor:
   +  Geben Sie einen Namen für den Exportjob ein. Dies ist der Name, der für die exportierte Datei in Ihrem Amazon S3 S3-Bucket verwendet wird. 
   + Wählen Sie Ihre zu exportierenden Ressourcen aus, wodurch die Filter für den Job festgelegt werden:
     + Exportieren Sie alle Assets und Asset-Modelle. Verwenden Sie Filter für Assets und Asset-Modelle.
     + Exportieren Sie Vermögenswerte. Filtern Sie nach Ihren Vermögenswerten.
       + Wählen Sie das Asset aus, das für den Exportfilter verwendet werden soll.
       + (Optional) Fügen Sie den Nachwuchs oder das zugehörige Asset-Modell hinzu.
     + Exportieren Sie Asset-Modelle. Filtern Sie nach Ihren Asset-Modellen.
       + Wählen Sie das Asset-Modell aus, das für den Exportfilter verwendet werden soll.
       + (Optional) Fügen Sie den Nachwuchs oder das zugehörige Asset oder beides hinzu. 
     + Wählen Sie **Weiter** aus.
   + Navigieren Sie zum Amazon S3 S3-Bucket:
     + Wählen Sie **Amazon S3 durchsuchen**, um den Amazon S3 S3-Bucket und die Dateien anzuzeigen.
     + Navigieren Sie zu dem Amazon S3 S3-Bucket, in dem die Datei platziert werden muss.
     + Wählen Sie **Weiter** aus.
   + Überprüfen Sie den Exportauftrag und wählen Sie **Exportieren**.

1. **Auf der Seite „Massenoperationen für SiteWise Metadaten**“ von AWS-IoT-SiteWise-Konsole wird der neu erstellte Importauftrag in der **Fortschrittstabelle der Jobs** angezeigt.

Informationen zu den verschiedenen Möglichkeiten, Filter beim Exportieren von Metadaten zu verwenden, finden Sie unter[Beispiele für den Export von Metadaten](bulk-operations-export-filter-examples.md). 

## Metadaten exportieren (AWS CLI)
<a name="export-metadata-cli"></a>

Das folgende Verfahren erklärt die AWS CLI Exportaktion:

**Daten von AWS IoT SiteWise zu Amazon S3 exportieren**

1. Erstellen Sie eine JSON-Datei mit Ihrem Anfragetext. Der Anforderungstext gibt die Quelle und das Ziel für den Übertragungsjob an. Das folgende Beispiel zeigt ein Beispiel für einen Anforderungstext:

   ```
   {
       "metadataTransferJobId": "your-transfer-job-Id",
       "sources": [{
           "type": "iotsitewise"
       }],
       "destination": {
           "type": "s3",
           "s3Configuration": {
               "location": "arn:aws:s3:::amzn-s3-demo-bucket"
           }
       }
   }
   ```

   Stellen Sie sicher, dass Sie Ihren Amazon S3 S3-Bucket als Ziel des Metadatentransferjobs angeben.
**Anmerkung**  
In diesem Beispiel werden alle Ihre Asset-Modelle und Assets exportiert. Um den Export auf bestimmte Asset-Modelle oder Assets zu beschränken, können Sie Filter in Ihren Anfragetext aufnehmen. Weitere Informationen zum Anwenden von Exportfiltern finden Sie unter[Beispiele für den Export von Metadaten](bulk-operations-export-filter-examples.md).

1. Speichern Sie die Textdatei Ihrer Anfrage, um sie im nächsten Schritt zu verwenden. In diesem Beispiel heißt die Datei `createMetadataTransferJobExport.json`.

1. Rufen Sie die auf, `CreateMetadataTransferJob` indem Sie den folgenden AWS CLI Befehl ausführen:

   ```
   aws iottwinmaker create-metadata-transfer-job --region us-east-1 \ 
            --cli-input-json file://createMetadataTransferJobExport.json
   ```

   Ersetzen Sie die JSON-Eingabedatei `createMetadataTransferJobExport.json` durch Ihren eigenen Namen der Übertragungsdatei.

# Verfolgung des Auftragsfortschritts und Fehlerbehandlung
<a name="jobs-progress-error-handling"></a>

 Die Verarbeitung eines Massenverarbeitungsauftrags nimmt Zeit in Anspruch. Jeder Auftrag wird in der Reihenfolge des AWS IoT SiteWise Eingangs der Anfrage verarbeitet. Es wird one-at-a-time für jedes Konto bearbeitet. Wenn ein Job abgeschlossen ist, beginnt der nächste in der Warteschlange automatisch mit der Verarbeitung. AWS IoT SiteWise löst die Jobs asynchron auf und aktualisiert den Status der einzelnen Jobs im Laufe der Bearbeitung. Jeder Auftrag hat ein Statusfeld, das den Status der Ressource und gegebenenfalls eine Fehlermeldung enthält.

Der Status kann einer der folgenden Werte sein:
+ `VALIDATING`— Validierung des Jobs, einschließlich des übermittelten Dateiformats und seines Inhalts.
+ `PENDING`— Der Job befindet sich in einer Warteschlange. Sie können Jobs in diesem Status von der AWS IoT SiteWise Konsole aus stornieren, aber alle anderen Status bleiben bis zum Ende bestehen.
+ `RUNNING`— Der Job wird bearbeitet. Es erstellt und aktualisiert Ressourcen, wie in der Importdatei definiert, oder exportiert Ressourcen auf der Grundlage der ausgewählten Exportjobfilter. Wenn der Vorgang abgebrochen wird, werden alle durch diesen Job importierten Ressourcen nicht gelöscht. Weitere Informationen finden Sie unter [Überprüfen Sie den Auftragsfortschritt und die Details (Konsole)](review-job-progress.md#review-job-progress-console).
+ `CANCELLING`— Der Job wird aktiv storniert.
+ `ERROR`— Eine oder mehrere Ressourcen konnten nicht verarbeitet werden. Weitere Informationen finden Sie im ausführlichen Auftragsbericht. Weitere Informationen finden Sie unter [Überprüfen Sie die Fehlerdetails (Konsole)](inspect-errors.md#inspect-errors-console).
+ `COMPLETED`— Der Job wurde ohne Fehler abgeschlossen.
+ `CANCELLED`— Der Job wurde abgebrochen und befindet sich nicht in der Warteschlange. Wenn Sie einen `RUNNING` Job storniert haben, werden Ressourcen, die zum Zeitpunkt des Abbruchs bereits von diesem Job importiert wurden, nicht gelöscht. AWS IoT SiteWise

**Topics**
+ [Verfolgung des Fortschritts von Aufträgen](review-job-progress.md)
+ [Untersuchen Sie die Fehler auf AWS IoT SiteWise](inspect-errors.md)

# Verfolgung des Fortschritts von Aufträgen
<a name="review-job-progress"></a>

## Überprüfen Sie den Auftragsfortschritt und die Details (Konsole)
<a name="review-job-progress-console"></a>

Sehen Sie [Metadaten exportieren (Konsole)](running-bulk-operations-export.md#export-metadata-console) sich [Metadaten importieren (Konsole)](running-bulk-operations-import.md#import-metadata-console) oder an, um einen Sammelauftrag zu starten.

**Übersicht über den Auftragsfortschritt in der AWS IoT SiteWise Konsole:**

1. Navigieren Sie zur [AWS IoT SiteWise -Konsole](https://console.aws.amazon.com/iotsitewise/).

1. Wählen Sie im Navigationsbereich die Option **Massenoperationen Neu** aus.

1. In der **Fortschrittstabelle „Aufträge**“ in der AWS IoT SiteWise Konsole wird die Liste der Aufträge für Massenvorgänge angezeigt.

1. In der Spalte **Jobtyp** wird beschrieben, ob es sich um einen Export- oder Importjob handelt. In den Spalten **Importdatum** wird das Datum angezeigt, an dem der Job gestartet wurde.

1. In der Spalte **Status** wird der Status des Jobs angezeigt. Sie können einen Job auswählen, um Details zu dem Job zu sehen.

1. Für den ausgewählten Job wird **Erfolg** angezeigt, wenn er erfolgreich war, oder eine Liste mit Fehlern, wenn der Job fehlgeschlagen ist. Außerdem wird für jeden Ressourcentyp eine Fehlerbeschreibung angezeigt.

**Übersicht der Jobdetails in der AWS IoT SiteWise Konsole:**

In der Tabelle mit dem **Auftragsfortschritt** in der AWS IoT SiteWise Konsole wird die Liste der Jobs für Massenvorgänge angezeigt.

1. Wählen Sie einen Job aus, um weitere Details zu sehen.

1. Bei einem **Importjob** `Data source ARN` steht der für den Amazon S3 S3-Speicherort der Importdatei.

1. Bei einem **Exportauftrag** `Data destination ARN` steht der für den Amazon S3 S3-Speicherort der Datei nach dem Export.

1. Das `Status` und`Status reason`, geben zusätzliche Details zum aktuellen Job an. Weitere Details finden Sie unter [Verfolgung des Auftragsfortschritts und Fehlerbehandlung](jobs-progress-error-handling.md).

1. Das `Queued position` steht für die Position des Auftrags in der Prozesswarteschlange. Die Jobs werden nacheinander verarbeitet. Eine Position von 1 in der Warteschlange gibt an, dass der Job als Nächstes verarbeitet wird.

1.  Auf der Seite mit den Auftragsdetails werden auch die Anzahl der Auftragsfortschritte angezeigt.

   1. Es gibt folgende Typen für die Zählung des Auftragsfortschritts:

     1. `Total resources`— Gibt die Gesamtzahl der Anlagen an, die sich im Übertragungsprozess befinden.

     1. `Succeeded`— Gibt die Anzahl der Vermögenswerte an, die während des Prozesses erfolgreich übertragen wurden.

     1. `Failed`— Gibt die Anzahl der Anlagen an, die während des Vorgangs ausgefallen sind.

     1. `Skipped`— Gibt die Anzahl der Assets an, die während des Vorgangs übersprungen wurden.

1. Ein Auftragsstatus von `PENDING` oder zeigt an`VALIDATING`, dass der gesamte Auftragsfortschritt als `–` gezählt wird. Dies weist darauf hin, dass die Fortschrittszahlen der Jobs ausgewertet werden.

1. Ein Auftragsstatus von `RUNNING` zeigt die `Total resources` Anzahl an, d. h. den Job, der zur Verarbeitung weitergeleitet wurde. Die detaillierten Zählungen (`Succeeded``Failed`, und`Skipped`) beziehen sich auf die verarbeiteten Ressourcen. Die Summe der detaillierten Zählungen ist kleiner als die `Total resources` Anzahl, bis der Status des Jobs `COMPLETED` oder lautet`ERROR`.

1.  Wenn der Status eines Jobs `COMPLETED` oder lautet`ERROR`, entspricht die `Total resources` Anzahl der Summe der detaillierten Anzahlen (`Succeeded``Failed`, und`Skipped`). 

1.  Wenn der Status eines Job lautet`ERROR`, finden Sie in der Tabelle **Auftragsfehler** Einzelheiten zu den spezifischen Fehlern und Ausfällen. Weitere Details finden Sie unter [Überprüfen Sie die Fehlerdetails (Konsole)](inspect-errors.md#inspect-errors-console). 

## Überprüfen Sie den Auftragsfortschritt und die Einzelheiten (AWS CLI)
<a name="review-job-progress-cli"></a>

Nachdem Sie einen Massenvorgang gestartet haben, können Sie seinen Status mithilfe der folgenden API-Aktionen überprüfen oder aktualisieren:
+ Verwenden Sie die [ GetMetadataTransferJob](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_GetMetadataTransferJob.html)API-Aktion, um Informationen zu einem bestimmten Job abzurufen.

**Rufen Sie Informationen mit der `GetMetadataTransferJob` API ab:**

  1. Erstellen Sie einen Übertragungsauftrag und führen Sie ihn aus. Rufen Sie die `GetMetadataTransferJob`-API auf.  
**Example AWS CLI Befehl:**  

     ```
     aws iottwinmaker get-metadata-transfer-job \ 
             --metadata-transfer-job-id your_metadata_transfer_job_id \
             --region your_region
     ```

  1.  Die `GetMetadataTransferJob` API gibt ein `MetadataTransferJobProgress` Objekt mit den folgenden Parametern zurück: 
     + **succeededCount** — Gibt die Anzahl der Assets an, die im Prozess erfolgreich übertragen wurden.
     + **FailedCount** — Gibt die Anzahl der Assets an, die während des Vorgangs ausgefallen sind.
     + **skippedCount** — Gibt die Anzahl der Assets an, die während des Vorgangs übersprungen wurden.
     + **TotalCount** — Gibt die Gesamtzahl der Vermögenswerte an, die sich im Übertragungsprozess befinden.

     Diese Parameter geben den Status des Auftragsfortschritts an. Wenn der Status lautet`RUNNING`, helfen sie dabei, die Anzahl der Ressourcen nachzuverfolgen, die noch verarbeitet werden müssen.

     Wenn bei der Schemavalidierung Fehler auftreten oder wenn **FailedCount** größer oder gleich 1 ist, wechselt der Status des Jobs zu. `ERROR` Ein vollständiger Fehlerbericht für den Job wird in Ihrem Amazon S3 S3-Bucket abgelegt. Weitere Details finden Sie unter [Untersuchen Sie die Fehler auf AWS IoT SiteWise](inspect-errors.md).
+ Verwenden Sie die [ListMetadataTransferJobs](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_ListMetadataTransferJobs.html)API-Aktion, um aktuelle Jobs aufzulisten.

  Verwenden Sie eine JSON-Datei, um die zurückgegebenen Jobs nach ihrem aktuellen Status zu filtern. Sehen Sie sich das folgende Verfahren an:

  1. Um die Filter anzugeben, die Sie verwenden möchten, erstellen Sie eine AWS CLI JSON-Eingabedatei. Sie möchten Folgendes verwenden:

     ```
     {
         "sourceType": "s3",
         "destinationType": "iottwinmaker",
         "filters": [{
             "state": "COMPLETED"
         }]
     }
     ```

     Eine Liste der gültigen `state` Werte finden Sie [ListMetadataTransferJobsFilter](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_ListMetadataTransferJobsFilter.html)im *AWS IoT TwinMaker API-Referenzhandbuch.*

  1.  Verwenden Sie die JSON-Datei als Argument im folgenden AWS CLI Beispielbefehl:

     ```
     aws iottwinmaker list-metadata-transfer-job --region your_region \
             --cli-input-json file://ListMetadataTransferJobsExample.json
     ```
+ Verwenden Sie die [CancelMetadataTransferJob](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_CancelMetadataTransferJob.html)API-Aktion, um einen Job abzubrechen. Diese API storniert den spezifischen Metadatentransferauftrag, ohne dass sich dies auf bereits exportierte oder importierte Ressourcen auswirkt:

  ```
  aws iottwinmaker cancel-metadata-transfer-job \ 
          --region your_region \ 
          --metadata-transfer-job-id job-to-cancel-id
  ```

# Untersuchen Sie die Fehler auf AWS IoT SiteWise
<a name="inspect-errors"></a>

## Überprüfen Sie die Fehlerdetails (Konsole)
<a name="inspect-errors-console"></a>

**Fehlerdetails in der AWS IoT SiteWise Konsole:**

1. Navigieren Sie zur [AWS IoT SiteWise -Konsole](https://console.aws.amazon.com/iotsitewise/).

1. Eine Liste der **Aufträge AWS-IoT-SiteWise-Konsole für Massenvorgänge finden Sie in der Tabelle mit dem Auftragsfortschritt** unter.

1. Wählen Sie einen Auftrag aus, um die Auftragsdetails anzuzeigen.

1. Wenn der Status eines Jobs `COMPLETED` oder lautet`ERROR`, entspricht die `Total resources` Anzahl der Summe der detaillierten Anzahlen (`Succeeded``Failed`, und`Skipped`).

1.  Wenn der Status eines Job lautet`ERROR`, finden Sie in der Tabelle **Auftragsfehler** Einzelheiten zu den spezifischen Fehlern und Ausfällen.

1. In der Tabelle **Auftragsfehler** wird der Inhalt des Jobberichts angezeigt. Das `Resource type` Feld gibt den Ort des Fehlers oder der Ausfälle an, z. B. im Folgenden:
   + Ein Validierungsfehler im `Resource type` Feld weist beispielsweise darauf hin, dass die Importvorlage und das Metadaten-Schemadateiformat nicht übereinstimmen. `Bulk operations template` Weitere Informationen finden Sie unter [AWS IoT SiteWise Auftragsschema für die Übertragung von Metadaten](bulk-operations-schema.md). 
   + Ein Fehler `Asset` im `Resource type` Feld bedeutet, dass das Asset aufgrund eines Konflikts mit einem anderen Asset nicht erstellt wurde. Informationen zu [AWS IoT SiteWise Ressourcenfehlern und Konflikten finden Sie unter Häufige](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/CommonErrors.html) Fehler. 

## Überprüfen Sie die Fehlerdetails (AWS CLI)
<a name="inspect-errors-cli"></a>

Informationen zur Behandlung und Diagnose von Fehlern, die während eines Übertragungsauftrags auftreten, finden Sie im folgenden Verfahren zur Verwendung der `GetMetadataTransferJob` API-Aktion:

1. Rufen Sie nach dem Erstellen und Ausführen eines Übertragungsauftrags folgenden Befehl auf [GetMetadataTransferJob](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_GetMetadataTransferJob.html):

   ```
   aws iottwinmaker get-metadata-transfer-job \
           --metadata-transfer-job-id your_metadata_transfer_job_id \
           --region us-east-1
   ```

1. Sobald der Status des Auftrags angezeigt wird`COMPLETED`, können Sie mit der Überprüfung der Ergebnisse des Auftrags beginnen.

1. Wenn Sie aufrufen`GetMetadataTransferJob`, wird ein Objekt zurückgegeben, das aufgerufen wurde [https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_MetadataTransferJobProgress.html](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_MetadataTransferJobProgress.html).

   Das MetadataTransferJobProgress Objekt enthält die folgenden Parameter:
   + **FailedCount:** Gibt die Anzahl der Assets an, die während des Übertragungsvorgangs ausgefallen sind.
   + **skippedCount:** Gibt die Anzahl der Assets an, die während des Übertragungsvorgangs übersprungen wurden.
   + **succeededCount:** Gibt die Anzahl der Assets an, die während des Übertragungsvorgangs erfolgreich waren.
   + **TotalCount:** Gibt die Gesamtzahl der am Übertragungsprozess beteiligten Vermögenswerte an.

1. Darüber hinaus gibt der API-Aufruf ein Element zurück`reportUrl`, das eine vorsignierte URL enthält. Wenn bei Ihrem Übertragungsauftrag Probleme auftreten, die Sie weiter untersuchen müssen, besuchen Sie diese URL. 

# Beispiele für den Import von Metadaten
<a name="bulk-operations-import-metadata-example"></a>

In diesem Abschnitt wird gezeigt, wie Sie Metadatendateien erstellen, um Asset-Modelle und Assets mit einem einzigen Massenimportvorgang zu importieren.

## Beispiel für einen Massenimport
<a name="example-metadata-file"></a>

Sie können viele Asset-Modelle und Assets mit einem einzigen Massenimportvorgang importieren. Das folgende Beispiel zeigt, wie Sie zu diesem Zweck eine Metadatendatei erstellen.

 In diesem Beispielszenario haben Sie verschiedene Baustellen, auf denen Industrieroboter in Arbeitszellen installiert sind. 

Das Beispiel definiert zwei Anlagenmodelle:
+ `RobotModel1`: Dieses Anlagenmodell stellt einen bestimmten Robotertyp dar, den Sie auf Ihren Baustellen einsetzen. Der Roboter hat eine Messeigenschaft,`Temperature`. 
+ `WorkCell`: Dieses Anlagenmodell stellt eine Sammlung von Robotern auf einer Ihrer Baustellen dar. Das Anlagenmodell definiert eine Hierarchie`robotHierarchyOEM1`, um die Beziehung zwischen Robotern in einer Arbeitszelle darzustellen. 

Das Beispiel definiert auch einige Vermögenswerte:
+ `WorkCell1`: eine Arbeitszelle an Ihrem Standort in Boston
+ `RobotArm123456`: ein Roboter in dieser Arbeitszelle
+ `RobotArm987654`: ein weiterer Roboter in dieser Arbeitszelle

Die folgende JSON-Metadatendatei definiert diese Asset-Modelle und Assets. Wenn Sie einen Massenimport mit diesen Metadaten ausführen, werden die darin enthaltenen Asset-Modelle und Assets AWS IoT SiteWise einschließlich ihrer hierarchischen Beziehungen erstellt.

### Metadatendatei für den Import
<a name="bulk-import-metadata-file"></a>

```
{
    "assetModels": [
        {
            "assetModelExternalId": "Robot.OEM1.3536",
            "assetModelName": "RobotModel1",
            "assetModelProperties": [
                {
                    "dataType": "DOUBLE",
                    "externalId": "Temperature",
                    "name": "Temperature",
                    "type": {
                        "measurement": {
                            "processingConfig": {
                                "forwardingConfig": {
                                    "state": "ENABLED"
                                }
                            }
                        }
                    },
                    "unit": "fahrenheit"
                }
            ]
        },
        {
            "assetModelExternalId": "ISA95.WorkCell",
            "assetModelName": "WorkCell",
            "assetModelProperties": [],
            "assetModelHierarchies": [
                {
                    "externalId": "workCellHierarchyWithOEM1Robot",
                    "name": "robotHierarchyOEM1",
                    "childAssetModelExternalId": "Robot.OEM1.3536"
                }
            ]
        }
    ],
    "assets": [
        {
            "assetExternalId": "Robot.OEM1.3536.123456",
            "assetName": "RobotArm123456",
            "assetModelExternalId": "Robot.OEM1.3536"
        },
        {
            "assetExternalId": "Robot.OEM1.3536.987654",
            "assetName": "RobotArm987654",
            "assetModelExternalId": "Robot.OEM1.3536"
        },
        {
            "assetExternalId": "BostonSite.Area1.Line1.WorkCell1",
            "assetName": "WorkCell1",
            "assetModelExternalId": "ISA95.WorkCell",
            "assetHierarchies": [
                {
                    "externalId": "workCellHierarchyWithOEM1Robot",
                    "childAssetExternalId": "Robot.OEM1.3536.123456"
                },
                {
                    "externalId": "workCellHierarchyWithOEM1Robot",
                    "childAssetExternalId": "Robot.OEM1.3536.987654"
                }
            ]
        }
    ]
}
```

## Beispiel für das erste Onboarding von Modellen und Ressourcen
<a name="example-scenario1"></a>

In diesem Beispielszenario gibt es in einem Unternehmen verschiedene Baustellen mit Industrierobotern.

Das Beispiel definiert mehrere Anlagenmodelle:
+ `Sample_Enterprise`— Dieses Vermögensmodell steht für das Unternehmen, zu dem die Standorte gehören. Das Anlagenmodell definiert eine Hierarchie`Enterprise to Site`, um die Beziehung der Standorte zum Unternehmen darzustellen.
+ `Sample_Site`— Dieses Anlagenmodell repräsentiert die Produktionsstätten innerhalb des Unternehmens. Das Anlagenmodell definiert eine Hierarchie`Site to Line`, um die Beziehung der Linien zum Standort darzustellen.
+ `Sample_Welding Line`— Dieses Anlagenmodell stellt eine Montagelinie innerhalb von Baustellen dar. Das Anlagenmodell definiert eine Hierarchie`Line to Robot`, um die Beziehung der Roboter zur Linie darzustellen.
+ `Sample_Welding Robot`— Dieses Anlagenmodell steht für einen bestimmten Robotertyp auf Ihren Baustellen.

Das Beispiel definiert auch Vermögenswerte auf der Grundlage der Anlagenmodelle.
+ `Sample_AnyCompany Motor`— Dieses Asset wird anhand des `Sample_Enterprise` Asset-Modells erstellt.
+ `Sample_Chicago`— Dieses Asset wurde anhand des `Sample_Site` Asset-Modells erstellt.
+ `Sample_Welding Line 1`— Dieses Asset wurde anhand des `Sample_Welding Line` Asset-Modells erstellt.
+ `Sample_Welding Robot 1`— Dieses Asset wurde anhand des `Sample_Welding Robot` Asset-Modells erstellt.
+ `Sample_Welding Robot 2`— Dieses Asset wurde anhand des `Sample_Welding Robot` Asset-Modells erstellt.

Die folgende JSON-Metadatendatei definiert diese Asset-Modelle und Assets. Wenn Sie einen Massenimport mit diesen Metadaten ausführen, werden die darin enthaltenen Asset-Modelle und Assets AWS IoT SiteWise einschließlich ihrer hierarchischen Beziehungen erstellt.

### JSON-Datei zur Einbindung von Assets und Modellen für den Import
<a name="bulk-import-JSON-file"></a>

```
{
    "assetModels": [
        {
            "assetModelExternalId": "External_Id_Welding_Robot",
            "assetModelName": "Sample_Welding Robot",
            "assetModelProperties": [
                {
                    "dataType": "STRING",
                    "externalId": "External_Id_Welding_Robot_Serial_Number",
                    "name": "Serial Number",
                    "type": {
                        "attribute": {
                            "defaultValue": "-"
                        }
                    },
                    "unit": "-"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Cycle_Count",
                    "name": "CycleCount",
                    "type": {
                        "measurement": {}
                    },
                    "unit": "EA"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Joint_1_Current",
                    "name": "Joint 1 Current",
                    "type": {
                        "measurement": {}
                    },
                    "unit": "Amps"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Joint_1_Max_Current",
                    "name": "Max Joint 1 Current",
                    "type": {
                        "metric": {
                            "expression": "max(joint1current)",
                            "variables": [
                                {
                                    "name": "joint1current",
                                    "value": {
                                        "propertyExternalId": "External_Id_Welding_Robot_Joint_1_Current"
                                    }
                                }
                            ],
                            "window": {
                                "tumbling": {
                                    "interval": "5m"
                                }
                            }
                        }
                    },
                    "unit": "Amps"
                }
            ]
        },
        {
            "assetModelExternalId": "External_Id_Welding_Line",
            "assetModelName": "Sample_Welding Line",
            "assetModelProperties": [
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Line_Availability",
                    "name": "Availability",
                    "type": {
                        "measurement": {}
                    },
                    "unit": "%"
                }
            ],
            "assetModelHierarchies": [
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "name": "Line to Robot",
                    "childAssetModelExternalId": "External_Id_Welding_Robot"
                }
            ]
        },
        {
            "assetModelExternalId": "External_Id_Site",
            "assetModelName": "Sample_Site",
            "assetModelProperties": [
                {
                    "dataType": "STRING",
                    "externalId": "External_Id_Site_Street_Address",
                    "name": "Street Address",
                    "type": {
                        "attribute": {
                            "defaultValue": "-"
                        }
                    },
                    "unit": "-"
                }
            ],
            "assetModelHierarchies": [
                {
                    "externalId": "External_Id_Site_TO_Line",
                    "name": "Site to Line",
                    "childAssetModelExternalId": "External_Id_Welding_Line"
                }
            ]
        },
        {
            "assetModelExternalId": "External_Id_Enterprise",
            "assetModelName": "Sample_Enterprise",
            "assetModelProperties": [
                {
                    "dataType": "STRING",
                    "name": "Company Name",
                    "externalId": "External_Id_Enterprise_Company_Name",
                    "type": {
                        "attribute": {
                            "defaultValue": "-"
                        }
                    },
                    "unit": "-"
                }
            ],
            "assetModelHierarchies": [
                {
                    "externalId": "External_Id_Enterprise_TO_Site",
                    "name": "Enterprise to Site",
                    "childAssetModelExternalId": "External_Id_Site"
                }
            ]
        }
    ],
    "assets": [
        {
            "assetExternalId": "External_Id_Welding_Robot_1",
            "assetName": "Sample_Welding Robot 1",
            "assetModelExternalId": "External_Id_Welding_Robot",
            "assetProperties": [
                {
                    "externalId": "External_Id_Welding_Robot_Serial_Number",
                    "attributeValue": "S1000"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Cycle_Count",
                    "alias": "AnyCompany/Chicago/Welding Line/S1000/Count"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Joint_1_Current",
                    "alias": "AnyCompany/Chicago/Welding Line/S1000/1/Current"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Welding_Robot_2",
            "assetName": "Sample_Welding Robot 2",
            "assetModelExternalId": "External_Id_Welding_Robot",
            "assetProperties": [
                {
                    "externalId": "External_Id_Welding_Robot_Serial_Number",
                    "attributeValue": "S2000"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Cycle_Count",
                    "alias": "AnyCompany/Chicago/Welding Line/S2000/Count"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Joint_1_Current",
                    "alias": "AnyCompany/Chicago/Welding Line/S2000/1/Current"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Welding_Line_1",
            "assetName": "Sample_Welding Line 1",
            "assetModelExternalId": "External_Id_Welding_Line",
            "assetProperties": [
                {
                    "externalId": "External_Id_Welding_Line_Availability",
                    "alias": "AnyCompany/Chicago/Welding Line/Availability"
                }
            ],
            "assetHierarchies": [
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "childAssetExternalId": "External_Id_Welding_Robot_1"
                },
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "childAssetExternalId": "External_Id_Welding_Robot_2"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Site_Chicago",
            "assetName": "Sample_Chicago",
            "assetModelExternalId": "External_Id_Site",
            "assetHierarchies": [
                {
                    "externalId": "External_Id_Site_TO_Line",
                    "childAssetExternalId": "External_Id_Welding_Line_1"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Enterprise_AnyCompany",
            "assetName": "Sample_AnyEnterprise Motor",
            "assetModelExternalId": "External_Id_Enterprise",
            "assetHierarchies": [
                {
                    "externalId": "External_Id_Enterprise_TO_Site",
                    "childAssetExternalId": "External_Id_Site_Chicago"
                }
            ]
        }
    ]
}
```

Der folgende Screenshot zeigt Modelle, die AWS-IoT-SiteWise-Konsole nach der Ausführung des vorherigen Codebeispiels angezeigt werden.

![\[AWS IoT SiteWise Modelle mit Asset- und Asset-Modellen.\]](http://docs.aws.amazon.com/de_de/iot-sitewise/latest/userguide/images/import-example-asset.png)


Der folgende Screenshot zeigt Modelle, Anlagen und Hierarchien, die AWS-IoT-SiteWise-Konsole nach der Ausführung des vorherigen Codebeispiels angezeigt werden.

![\[AWS IoT SiteWise Modelle mit Assets, Asset-Modellen und Hierarchien.\]](http://docs.aws.amazon.com/de_de/iot-sitewise/latest/userguide/images/hierarchy-example-import.png)


## Beispiel für das Onboarding zusätzlicher Ressourcen
<a name="example-scenario2"></a>

In diesem Beispiel werden zusätzliche Vermögenswerte definiert, die in ein vorhandenes Vermögensmodell in Ihrem Konto importiert werden sollen:
+ `Sample_Welding Line 2`— Dieses Asset wird anhand des `Sample_Welding Line` Asset-Modells erstellt.
+ `Sample_Welding Robot 3`— Dieses Asset wurde anhand des `Sample_Welding Robot` Asset-Modells erstellt.
+ `Sample_Welding Robot 4`— Dieses Asset wurde anhand des `Sample_Welding Robot` Asset-Modells erstellt.

Informationen zum Erstellen der ersten Anlagen für dieses Beispiel finden Sie unter[Beispiel für das erste Onboarding von Modellen und Ressourcen](#example-scenario1).

Die folgende JSON-Metadatendatei definiert diese Asset-Modelle und Assets. Wenn Sie einen Massenimport mit diesen Metadaten ausführen, werden die darin enthaltenen Asset-Modelle und Assets AWS IoT SiteWise einschließlich ihrer hierarchischen Beziehungen erstellt.

### JSON-Datei zum Onboarding zusätzlicher Assets
<a name="bulk-import-JSON-file-additional-assets"></a>

```
{
    "assets": [
        {
            "assetExternalId": "External_Id_Welding_Robot_3",
            "assetName": "Sample_Welding Robot 3",
            "assetModelExternalId": "External_Id_Welding_Robot",
            "assetProperties": [
                {
                    "externalId": "External_Id_Welding_Robot_Serial_Number",
                    "attributeValue": "S3000"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Cycle_Count",
                    "alias": "AnyCompany/Chicago/Welding Line/S3000/Count"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Joint_1_Current",
                    "alias": "AnyCompany/Chicago/Welding Line/S3000/1/Current"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Welding_Robot_4",
            "assetName": "Sample_Welding Robot 4",
            "assetModelExternalId": "External_Id_Welding_Robot",
            "assetProperties": [
                {
                    "externalId": "External_Id_Welding_Robot_Serial_Number",
                    "attributeValue": "S4000"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Cycle_Count",
                    "alias": "AnyCompany/Chicago/Welding Line/S4000/Count"
                },
                {
                    "externalId": "External_Id_Welding_Robot_Joint_1_Current",
                    "alias": "AnyCompany/Chicago/Welding Line/S4000/1/Current"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Welding_Line_1",
            "assetName": "Sample_Welding Line 1",
            "assetModelExternalId": "External_Id_Welding_Line",
            "assetHierarchies": [
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "childAssetExternalId": "External_Id_Welding_Robot_1"
                },
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "childAssetExternalId": "External_Id_Welding_Robot_2"
                },
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "childAssetExternalId": "External_Id_Welding_Robot_3"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Welding_Line_2",
            "assetName": "Sample_Welding Line 2",
            "assetModelExternalId": "External_Id_Welding_Line",
            "assetHierarchies": [
                {
                    "externalId": "External_Id_Welding_Line_TO_Robot",
                    "childAssetExternalId": "External_Id_Welding_Robot_4"
                }
            ]
        },
        {
            "assetExternalId": "External_Id_Site_Chicago",
            "assetName": "Sample_Chicago",
            "assetModelExternalId": "External_Id_Site",
            "assetHierarchies": [
                {
                    "externalId": "External_Id_Site_TO_Line",
                    "childAssetExternalId": "External_Id_Welding_Line_1"
                },
                {
                    "externalId": "External_Id_Site_TO_Line",
                    "childAssetExternalId": "External_Id_Welding_Line_2"
                }
            ]
        }
    ]
}
```

Der folgende Screenshot zeigt Modelle, Assets und Hierarchien, die AWS-IoT-SiteWise-Konsole nach der Ausführung des vorherigen Codebeispiels angezeigt werden.

![\[AWS IoT SiteWise Modelle mit Anlagen- und Anlagenmodellen.\]](http://docs.aws.amazon.com/de_de/iot-sitewise/latest/userguide/images/additional-assets-import.png)


## Beispiel für das Onboarding neuer Immobilien
<a name="example-scenario3"></a>

In diesem Beispiel werden neue Immobilien in bestehenden Anlagemodellen definiert. Erfahren Sie[Beispiel für das Onboarding zusätzlicher Ressourcen](#example-scenario2), wie Sie zusätzliche Anlagen und Modelle integrieren können.
+ `Joint 1 Temperature`— Diese Eigenschaft wird dem `Sample_Welding Robot` Asset-Modell hinzugefügt. Diese neue Eigenschaft wird auch auf jedes Asset übertragen, das mit dem `Sample_Welding Robot` Asset-Modell erstellt wurde. 

Informationen zum Hinzufügen einer neuen Eigenschaft zu einem vorhandenen Asset-Modell finden Sie im folgenden Beispiel für eine JSON-Metadatendatei. Wie in der JSON-Datei gezeigt, muss die gesamte bestehende `Sample_Welding Robot` Asset-Modelldefinition zusammen mit der neuen Eigenschaft bereitgestellt werden. Wenn die gesamte Eigenschaftsliste aus der vorhandenen Definition nicht bereitgestellt wird, werden die ausgelassenen Eigenschaften AWS IoT SiteWise gelöscht. 

### JSON-Datei zum Integrieren neuer Eigenschaften
<a name="bulk-import-JSON-file-new-properties"></a>

In diesem Beispiel wird dem Asset-Modell eine neue Eigenschaft `Joint 1 Temperature` hinzugefügt.

```
{
    "assetModels": [
        {
            "assetModelExternalId": "External_Id_Welding_Robot",
            "assetModelName": "Sample_Welding Robot",
            "assetModelProperties": [
                {
                    "dataType": "STRING",
                    "externalId": "External_Id_Welding_Robot_Serial_Number",
                    "name": "Serial Number",
                    "type": {
                        "attribute": {
                            "defaultValue": "-"
                        }
                    },
                    "unit": "-"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Cycle_Count",
                    "name": "CycleCount",
                    "type": {
                        "measurement": {}
                    },
                    "unit": "EA"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Joint_1_Current",
                    "name": "Joint 1 Current",
                    "type": {
                        "measurement": {}
                    },
                    "unit": "Amps"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Joint_1_Max_Current",
                    "name": "Max Joint 1 Current",
                    "type": {
                        "metric": {
                            "expression": "max(joint1current)",
                            "variables": [
                                {
                                    "name": "joint1current",
                                    "value": {
                                        "propertyExternalId": "External_Id_Welding_Robot_Joint_1_Current"
                                    }
                                }
                            ],
                            "window": {
                                "tumbling": {
                                    "interval": "5m"
                                }
                            }
                        }
                    },
                    "unit": "Amps"
                },
                {
                    "dataType": "DOUBLE",
                    "externalId": "External_Id_Welding_Robot_Joint_1_Temperature",
                    "name": "Joint 1 Temperature",
                    "type": {
                        "measurement": {}
                    },
                    "unit": "degC"
                }
            ]
        }
    ]
}
```

## Beispiel für die Verwaltung von Datenströmen
<a name="example-managing-data-streams"></a>

 Dieses Beispiel zeigt zwei Möglichkeiten zur Verwaltung von Datenströmen, die mit einer Anlageneigenschaft verknüpft sind. Beim Umbenennen eines Alias für eine Anlageneigenschaft gibt es zwei Optionen für die historischen Daten, die derzeit im Datenstrom der Anlageneigenschaft gespeichert sind.
+  Option eins — Behalten Sie den aktuellen Datenstrom bei und benennen Sie nur den Alias um, sodass auf die historischen Daten mit dem neuen Alias zugegriffen werden kann. 

   Im Beispiel für die JSON-Metadatendatei `External_Id_Welding_Robot_Cycle_Count` ändert die Asset-Eigenschaft mit der ID ihren Alias in`AnyCompany/Chicago/Welding Line/S3000/Count-Updated`. Die historischen Daten für diese Asset-Eigenschaft bleiben nach dieser Änderung unverändert. 
+  Option zwei — Weisen Sie der Asset-Eigenschaft, auf die mit dem neuen Alias zugegriffen werden kann, einen neuen Datenstrom zu. Der alte Datenstrom ist zusammen mit seinen historischen Daten weiterhin mit dem alten Alias zugänglich, aber keiner Anlageneigenschaft zugeordnet. 

   Im Beispiel für die JSON-Metadatendatei `External_Id_Welding_Robot_Joint_1_Current` ändert die Asset-Eigenschaft mit der ID ihren Alias in`AnyCompany/Chicago/Welding Line/S4999/1/Current`. Diesmal `retainDataOnAliasChange` ist der zusätzliche Wert vorhanden und auf gesetzt`False`. Mit dieser Einstellung wird der ursprüngliche Datenstrom von der Objekteigenschaft getrennt, und es wird ein neuer Datenstrom erstellt, der keine historischen Daten enthält. 

 Um auf den alten Datenstream mit den ursprünglichen historischen Daten zuzugreifen, rufen Sie die AWS Console Home Seite *Datenströme* auf und suchen Sie nach dem alten Alias`AnyCompany/Chicago/Welding Line/S3000/1/Current`. 

### JSON-Datei zur Aktualisierung von Eigenschafts-Aliasnamen
<a name="bulk-import-JSON-file-update-aliases"></a>

```
{
    "assetExternalId": "External_Id_Welding_Robot_3",
    "assetName": "Sample_Welding Robot 3",
    "assetModelExternalId": "External_Id_Welding_Robot",
    "assetProperties": [
        {
            "externalId": "External_Id_Welding_Robot_Serial_Number",
            "attributeValue": "S3000"
        },
        {
            "externalId": "External_Id_Welding_Robot_Cycle_Count",
            "alias": "AnyCompany/Chicago/Welding Line/S3000/Count-Updated"
        },
        {
            "externalId": "External_Id_Welding_Robot_Joint_1_Current",
            "alias": "AnyCompany/Chicago/Welding Line/S4999/1/Current",
            "retainDataOnAliasChange": "FALSE"
        }
    ]
}
```

# Beispiele für den Export von Metadaten
<a name="bulk-operations-export-filter-examples"></a>

Wenn Sie einen Massenexport Ihrer AWS IoT SiteWise Inhalte nach Amazon S3 durchführen, können Sie *Filter* angeben, um einzuschränken, welche spezifischen Asset-Modelle und Assets Sie exportieren möchten. 

Sie geben die Filter in einem `iotSiteWiseConfiguration` Abschnitt innerhalb des `sources` Abschnitts Ihres Anfragetextes an.

**Anmerkung**  
Sie können mehrere Filter einbeziehen. Bei der Massenoperation werden alle Asset-Modelle oder Assets exportiert, die einem der Filter entsprechen.  
Wenn Sie keine Filter angeben, exportiert der Vorgang alle Ihre Asset-Modelle und Assets.

```
{
    "metadataTransferJobId": "your-transfer-job-id",
    "sources": [{
        "type": "iotsitewise",
        "iotSiteWiseConfiguration": {
            "filters": [{
                list of filters
            }]
        }
    }],
    "destination": {
        "type": "s3",
        "s3Configuration": {
            "location": "arn:aws:s3:::amzn-s3-demo-bucket"
        }
    }
}
```



## Nach Asset-Modell filtern
<a name="bulk-export-filter-asset-model"></a>

Sie können ein bestimmtes Asset-Modell filtern. Sie können auch alle Anlagen, die dieses Modell verwenden, oder alle Anlagenmodelle innerhalb seiner Hierarchie einbeziehen. Sie können nicht sowohl Vermögenswerte als auch Hierarchien einbeziehen.

Weitere Informationen zu Hierarchien finden Sie unter [Definieren Sie die Hierarchien der Anlagenmodelle](define-asset-hierarchies.md).

------
#### [ Asset model ]

Dieser Filter umfasst das angegebene Asset-Modell:

```
"filterByAssetModel": {
    "assetModelId": "asset model ID"
}
```

------
#### [ Asset model and its assets ]

Dieser Filter umfasst das angegebene Asset-Modell sowie alle Assets, die dieses Asset-Modell verwenden:

```
"filterByAssetModel": {
    "assetModelId": "asset model ID",
    "includeAssets": true
}
```

------
#### [ Asset model and its hierarchy ]

Dieser Filter umfasst das angegebene Asset-Modell zusammen mit allen zugehörigen Asset-Modellen in seiner Hierarchie:

```
"filterByAssetModel": {
    "assetModelId": "asset model ID",
    "includeOffspring": true
}
```

------

## Nach Vermögenswert filtern
<a name="bulk-export-filter-asset"></a>

Sie können ein bestimmtes Asset filtern. Sie können auch das zugehörige Asset-Modell oder alle zugehörigen Assets in die Hierarchie einbeziehen. Sie können nicht sowohl das Asset-Modell als auch die Hierarchie einbeziehen.

Weitere Informationen zu Hierarchien finden Sie unter [Definieren Sie die Hierarchien der Anlagenmodelle](define-asset-hierarchies.md).

------
#### [ Asset ]

Dieser Filter umfasst das angegebene Asset:

```
"filterByAsset": {
    "assetId": "asset ID"
}
```

------
#### [ Asset and its asset model ]

Dieser Filter umfasst das angegebene Asset zusammen mit dem verwendeten Asset-Modell:

```
"filterByAsset": {
    "assetId": "asset ID",
    "includeAssetModel": true
}
```

------
#### [ Asset and its hierarchy ]

Dieser Filter umfasst das angegebene Asset zusammen mit allen zugehörigen Assets in seiner Hierarchie:

```
"filterByAsset": {
    "assetId": "asset ID",
    "includeOffspring": true
}
```

------

# AWS IoT SiteWise Auftragsschema für die Übertragung von Metadaten
<a name="bulk-operations-schema"></a>

Verwenden Sie das Auftragsschema für die Übertragung von AWS IoT SiteWise Metadaten als Referenz, wenn Sie Ihre eigenen Massenimport- und Exportvorgänge durchführen:

```
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "IoTSiteWise",
  "description": "Metadata transfer job resource schema for IoTSiteWise",
  "definitions": {
    "Name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "pattern": "[^\\u0000-\\u001F\\u007F]+"
    },
    "Description": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "pattern": "[^\\u0000-\\u001F\\u007F]+"
    },
    "ID": {
      "type": "string",
      "minLength": 36,
      "maxLength": 36,
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
    },
    "ExternalId": {
      "type": "string",
      "minLength": 2,
      "maxLength": 128,
      "pattern": "[a-zA-Z0-9_][a-zA-Z_\\-0-9.:]*[a-zA-Z0-9_]+"
    },
    "AttributeValue": {
      "description": "The value of the property attribute.",
      "type": "string",
      "pattern": "[^\\u0000-\\u001F\\u007F]+"
    },
    "PropertyUnit": {
      "description": "The unit of measure (such as Newtons or RPM) of the asset property.",
      "type": "string",
      "minLength": 1,
      "maxLength": 256,
      "pattern": "[^\\u0000-\\u001F\\u007F]+"
    },
    "PropertyAlias": {
      "description": "The property alias that identifies the property.",
      "type": "string",
      "minLength": 1,
      "maxLength": 1000,
      "pattern": "[^\\u0000-\\u001F\\u007F]+"
    },
    "AssetProperty": {
      "description": "The asset property's definition, alias, unit, and notification state.",
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "id"
          ]
        },
        {
          "required": [
            "externalId"
          ]
        }
      ],
      "properties": {
        "id": {
          "description": "The ID of the asset property.",
          "$ref": "#/definitions/ID"
        },
        "externalId": {
          "description": "The ExternalID of the asset property.",
          "$ref": "#/definitions/ExternalId"
        },
        "alias": {
          "$ref": "#/definitions/PropertyAlias"
        },
        "unit": {
          "$ref": "#/definitions/PropertyUnit"
        },
        "attributeValue": {
          "$ref": "#/definitions/AttributeValue"
        },
        "retainDataOnAliasChange": {
          "type": "string",
          "default": "TRUE",
          "enum": [
            "TRUE",
            "FALSE"
          ]
        },
        "propertyNotificationState": {
          "description": "The MQTT notification state (ENABLED or DISABLED) for this asset property.",
          "type": "string",
          "enum": [
            "ENABLED",
            "DISABLED"
          ]
        }
      }
    },
    "AssetHierarchy": {
      "description": "A hierarchy specifies allowed parent/child asset relationships.",
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "id",
            "childAssetId"
          ]
        },
        {
          "required": [
            "externalId",
            "childAssetId"
          ]
        },
        {
          "required": [
            "id",
            "childAssetExternalId"
          ]
        },
        {
          "required": [
            "externalId",
            "childAssetExternalId"
          ]
        }
      ],
      "properties": {
        "id": {
          "description": "The ID of a hierarchy in the parent asset's model.",
          "$ref": "#/definitions/ID"
        },
        "externalId": {
          "description": "The ExternalID of a hierarchy in the parent asset's model.",
          "$ref": "#/definitions/ExternalId"
        },
        "childAssetId": {
          "description": "The ID of the child asset to be associated.",
          "$ref": "#/definitions/ID"
        },
        "childAssetExternalId": {
          "description": "The ExternalID of the child asset to be associated.",
          "$ref": "#/definitions/ExternalId"
        }
      }
    },
    "Tag": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "key",
        "value"
      ],
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "AssetModelType": {
      "type": "string",
      "default": null,
      "enum": [
        "ASSET_MODEL",
        "COMPONENT_MODEL"
      ]
    },
    "AssetModelCompositeModel": {
      "description": "Contains a composite model definition in an asset model. This composite model definition is applied to all assets created from the asset model.",
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "id"
          ]
        },
        {
          "required": [
            "externalId"
          ]
        }
      ],
      "required": [
        "name",
        "type"
      ],
      "properties": {
        "id": {
          "description": "The ID of the asset model composite model.",
          "$ref": "#/definitions/ID"
        },
        "externalId": {
          "description": "The ExternalID of the asset model composite model.",
          "$ref": "#/definitions/ExternalId"
        },
        "parentId": {
          "description": "The ID of the parent asset model composite model.",
          "$ref": "#/definitions/ID"
        },
        "parentExternalId": {
          "description": "The ExternalID of the parent asset model composite model.",
          "$ref": "#/definitions/ExternalId"
        },
        "composedAssetModelId": {
          "description": "The ID of the composed asset model.",
          "$ref": "#/definitions/ID"
        },
        "composedAssetModelExternalId": {
          "description": "The ExternalID of the composed asset model.",
          "$ref": "#/definitions/ExternalId"
        },
        "description": {
          "description": "A description for the asset composite model.",
          "$ref": "#/definitions/Description"
        },
        "name": {
          "description": "A unique, friendly name for the asset composite model.",
          "$ref": "#/definitions/Name"
        },
        "type": {
          "description": "The type of the composite model. For alarm composite models, this type is AWS/ALARM.",
          "$ref": "#/definitions/Name"
        },
        "properties": {
          "description": "The property definitions of the asset model.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssetModelProperty"
          }
        }
      }
    },
    "AssetModelProperty": {
      "description": "Contains information about an asset model property.",
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "id"
          ]
        },
        {
          "required": [
            "externalId"
          ]
        }
      ],
      "required": [
        "name",
        "dataType",
        "type"
      ],
      "properties": {
        "id": {
          "description": "The ID of the asset model property.",
          "$ref": "#/definitions/ID"
        },
        "externalId": {
          "description": "The ExternalID of the asset model property.",
          "$ref": "#/definitions/ExternalId"
        },
        "name": {
          "description": "The name of the asset model property.",
          "$ref": "#/definitions/Name"
        },
        "dataType": {
          "description": "The data type of the asset model property.",
          "$ref": "#/definitions/DataType"
        },
        "dataTypeSpec": {
          "description": "The data type of the structure for this property.",
          "$ref": "#/definitions/Name"
        },
        "unit": {
          "description": "The unit of the asset model property, such as Newtons or RPM.",
          "type": "string",
          "minLength": 1,
          "maxLength": 256,
          "pattern": "[^\\u0000-\\u001F\\u007F]+"
        },
        "type": {
          "description": "The property type",
          "$ref": "#/definitions/PropertyType"
        }
      }
    },
    "DataType": {
      "type": "string",
      "enum": [
        "STRING",
        "INTEGER",
        "DOUBLE",
        "BOOLEAN",
        "STRUCT"
      ]
    },
    "PropertyType": {
      "description": "Contains a property type, which can be one of attribute, measurement, metric, or transform.",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "attribute": {
          "$ref": "#/definitions/Attribute"
        },
        "transform": {
          "$ref": "#/definitions/Transform"
        },
        "metric": {
          "$ref": "#/definitions/Metric"
        },
        "measurement": {
          "$ref": "#/definitions/Measurement"
        }
      }
    },
    "Attribute": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "defaultValue": {
          "type": "string",
          "pattern": "[^\\u0000-\\u001F\\u007F]+"
        }
      }
    },
    "Transform": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "expression",
        "variables"
      ],
      "properties": {
        "expression": {
          "description": "The mathematical expression that defines the transformation function.",
          "type": "string",
          "minLength": 1,
          "maxLength": 1024
        },
        "variables": {
          "description": "The list of variables used in the expression.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ExpressionVariable"
          }
        },
        "processingConfig": {
          "$ref": "#/definitions/TransformProcessingConfig"
        }
      }
    },
    "TransformProcessingConfig": {
      "description": "The processing configuration for the given transform property.",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "computeLocation"
      ],
      "properties": {
        "computeLocation": {
          "description": "The compute location for the given transform property.",
          "$ref": "#/definitions/ComputeLocation"
        },
        "forwardingConfig": {
          "description": "The forwarding configuration for a given property.",
          "$ref": "#/definitions/ForwardingConfig"
        }
      }
    },
    "Metric": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "expression",
        "variables",
        "window"
      ],
      "properties": {
        "expression": {
          "description": "The mathematical expression that defines the metric aggregation function.",
          "type": "string",
          "minLength": 1,
          "maxLength": 1024
        },
        "variables": {
          "description": "The list of variables used in the expression.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/ExpressionVariable"
          }
        },
        "window": {
          "description": "The window (time interval) over which AWS IoT SiteWise computes the metric's aggregation expression",
          "$ref": "#/definitions/MetricWindow"
        },
        "processingConfig": {
          "$ref": "#/definitions/MetricProcessingConfig"
        }
      }
    },
    "MetricProcessingConfig": {
      "description": "The processing configuration for the metric.",
      "type": "object",
      "additionalProperties": false,
      "required": [
        "computeLocation"
      ],
      "properties": {
        "computeLocation": {
          "description": "The compute location for the given metric property.",
          "$ref": "#/definitions/ComputeLocation"
        }
      }
    },
    "ComputeLocation": {
      "type": "string",
      "enum": [
        "EDGE",
        "CLOUD"
      ]
    },
    "ForwardingConfig": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "state"
      ],
      "properties": {
        "state": {
          "type": "string",
          "enum": [
            "ENABLED",
            "DISABLED"
          ]
        }
      }
    },
    "MetricWindow": {
      "description": "Contains a time interval window used for data aggregate computations (for example, average, sum, count, and so on).",
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "tumbling": {
          "description": "The tumbling time interval window.",
          "type": "object",
          "additionalProperties": false,
          "required": [
            "interval"
          ],
          "properties": {
            "interval": {
              "description": "The time interval for the tumbling window.",
              "type": "string",
              "minLength": 2,
              "maxLength": 23
            },
            "offset": {
              "description": "The offset for the tumbling window.",
              "type": "string",
              "minLength": 2,
              "maxLength": 25
            }
          }
        }
      }
    },
    "ExpressionVariable": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "name",
        "value"
      ],
      "properties": {
        "name": {
          "description": "The friendly name of the variable to be used in the expression.",
          "type": "string",
          "minLength": 1,
          "maxLength": 64,
          "pattern": "^[a-z][a-z0-9_]*$"
        },
        "value": {
          "description": "The variable that identifies an asset property from which to use values.",
          "$ref": "#/definitions/VariableValue"
        }
      }
    },
    "VariableValue": {
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "propertyId"
          ]
        },
        {
          "required": [
            "propertyExternalId"
          ]
        }
      ],
      "properties": {
        "propertyId": {
          "$ref": "#/definitions/ID"
        },
        "propertyExternalId": {
          "$ref": "#/definitions/ExternalId"
        },
        "hierarchyId": {
          "$ref": "#/definitions/ID"
        },
        "hierarchyExternalId": {
          "$ref": "#/definitions/ExternalId"
        }
      }
    },
    "Measurement": {
      "type": "object",
      "additionalProperties": false,
      "properties": {
        "processingConfig": {
          "$ref": "#/definitions/MeasurementProcessingConfig"
        }
      }
    },
    "MeasurementProcessingConfig": {
      "type": "object",
      "additionalProperties": false,
      "required": [
        "forwardingConfig"
      ],
      "properties": {
        "forwardingConfig": {
          "description": "The forwarding configuration for the given measurement property.",
          "$ref": "#/definitions/ForwardingConfig"
        }
      }
    },
    "AssetModelHierarchy": {
      "description": "Contains information about an asset model hierarchy.",
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "id",
            "childAssetModelId"
          ]
        },
        {
          "required": [
            "id",
            "childAssetModelExternalId"
          ]
        },
        {
          "required": [
            "externalId",
            "childAssetModelId"
          ]
        },
        {
          "required": [
            "externalId",
            "childAssetModelExternalId"
          ]
        }
      ],
      "required": [
        "name"
      ],
      "properties": {
        "id": {
          "description": "The ID of the asset model hierarchy.",
          "$ref": "#/definitions/ID"
        },
        "externalId": {
          "description": "The ExternalID of the asset model hierarchy.",
          "$ref": "#/definitions/ExternalId"
        },
        "name": {
          "description": "The name of the asset model hierarchy.",
          "$ref": "#/definitions/Name"
        },
        "childAssetModelId": {
          "description": "The ID of the asset model. All assets in this hierarchy must be instances of the child AssetModelId asset model.",
          "$ref": "#/definitions/ID"
        },
        "childAssetModelExternalId": {
          "description": "The ExternalID of the asset model. All assets in this hierarchy must be instances of the child AssetModelId asset model.",
          "$ref": "#/definitions/ExternalId"
        }
      }
    },
    "AssetModel": {
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "assetModelId"
          ]
        },
        {
          "required": [
            "assetModelExternalId"
          ]
        }
      ],
      "required": [
        "assetModelName"
      ],
      "properties": {
        "assetModelId": {
          "description": "The ID of the asset model.",
          "$ref": "#/definitions/ID"
        },
        "assetModelExternalId": {
          "description": "The ID of the asset model.",
          "$ref": "#/definitions/ExternalId"
        },
        "assetModelName": {
          "description": "A unique, friendly name for the asset model.",
          "$ref": "#/definitions/Name"
        },
        "assetModelDescription": {
          "description": "A description for the asset model.",
          "$ref": "#/definitions/Description"
        },
        "assetModelType": {
          "description": "The type of the asset model.",
          "$ref": "#/definitions/AssetModelType"
        },
        "assetModelProperties": {
          "description": "The property definitions of the asset model.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssetModelProperty"
          }
        },
        "assetModelCompositeModels": {
          "description": "The composite asset models that are part of this asset model. Composite asset models are asset models that contain specific properties.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssetModelCompositeModel"
          }
        },
        "assetModelHierarchies": {
          "description": "The hierarchy definitions of the asset model. Each hierarchy specifies an asset model whose assets can be children of any other assets created from this asset model.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssetModelHierarchy"
          }
        },
        "tags": {
          "description": "A list of key-value pairs that contain metadata for the asset model.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tag"
          }
        }
      }
    },
    "Asset": {
      "type": "object",
      "additionalProperties": false,
      "anyOf": [
        {
          "required": [
            "assetId",
            "assetModelId"
          ]
        },
        {
          "required": [
            "assetExternalId",
            "assetModelId"
          ]
        },
        {
          "required": [
            "assetId",
            "assetModelExternalId"
          ]
        },
        {
          "required": [
            "assetExternalId",
            "assetModelExternalId"
          ]
        }
      ],
      "required": [
        "assetName"
      ],
      "properties": {
        "assetId": {
          "description": "The ID of the asset",
          "$ref": "#/definitions/ID"
        },
        "assetExternalId": {
          "description": "The external ID of the asset",
          "$ref": "#/definitions/ExternalId"
        },
        "assetModelId": {
          "description": "The ID of the asset model from which to create the asset.",
          "$ref": "#/definitions/ID"
        },
        "assetModelExternalId": {
          "description": "The ExternalID of the asset model from which to create the asset.",
          "$ref": "#/definitions/ExternalId"
        },
        "assetName": {
          "description": "A unique, friendly name for the asset.",
          "$ref": "#/definitions/Name"
        },
        "assetDescription": {
          "description": "A description for the asset",
          "$ref": "#/definitions/Description"
        },
        "assetProperties": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssetProperty"
          }
        },
        "assetHierarchies": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AssetHierarchy"
          }
        },
        "tags": {
          "description": "A list of key-value pairs that contain metadata for the asset.",
          "type": "array",
          "uniqueItems": false,
          "items": {
            "$ref": "#/definitions/Tag"
          }
        }
      }
    }
  },
  "additionalProperties": false,
  "properties": {
    "assetModels": {
      "type": "array",
      "uniqueItems": false,
      "items": {
        "$ref": "#/definitions/AssetModel"
      }
    },
    "assets": {
      "type": "array",
      "uniqueItems": false,
      "items": {
        "$ref": "#/definitions/Asset"
      }
    }
  }
}
```