

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Operasi massal dengan aset dan model
<a name="bulk-operations-assets-and-models"></a>

Untuk bekerja dengan sejumlah besar aset atau model aset, gunakan operasi massal untuk mengimpor dan mengekspor sumber daya secara massal ke lokasi yang berbeda. Misalnya, Anda dapat membuat file data yang mendefinisikan aset atau model aset di bucket Amazon S3, dan menggunakan impor massal untuk membuat atau memperbaruinya. AWS IoT SiteWise Atau, jika Anda memiliki sejumlah besar aset atau model aset AWS IoT SiteWise, Anda dapat mengekspornya ke Amazon S3. 

**catatan**  
Anda melakukan operasi massal AWS IoT SiteWise dengan memanggil operasi di AWS IoT TwinMaker API. Anda dapat melakukan ini tanpa menyiapkan AWS IoT TwinMaker atau membuat AWS IoT TwinMaker ruang kerja. Yang Anda butuhkan hanyalah ember Amazon S3 tempat Anda dapat menempatkan konten Anda AWS IoT SiteWise .   


**Topics**
+ [Konsep dan terminologi kunci](#bulk-operations-terminology)
+ [Fungsionalitas yang didukung](#bulk-operations-functionality)
+ [Prasyarat operasi massal](bulk-operations-prereqs.md)
+ [Jalankan pekerjaan impor massal](running-bulk-operations-import.md)
+ [Jalankan pekerjaan ekspor massal](running-bulk-operations-export.md)
+ [Pelacakan kemajuan pekerjaan dan penanganan kesalahan](jobs-progress-error-handling.md)
+ [Impor contoh metadata](bulk-operations-import-metadata-example.md)
+ [Contoh metadata ekspor](bulk-operations-export-filter-examples.md)
+ [AWS IoT SiteWise skema pekerjaan transfer metadata](bulk-operations-schema.md)

## Konsep dan terminologi kunci
<a name="bulk-operations-terminology"></a>

AWS IoT SiteWise fitur impor dan ekspor massal bergantung pada konsep dan terminologi berikut:
+ **Impor**: Tindakan memindahkan aset atau model aset dari file di bucket Amazon S3 ke file. AWS IoT SiteWise
+ **Ekspor**: Tindakan memindahkan aset atau model aset dari bucket Amazon S3 AWS IoT SiteWise ke bucket Amazon S3.
+ **Sumber**: Lokasi awal dari mana Anda ingin memindahkan konten.

  Misalnya, bucket Amazon S3 adalah sumber impor, dan AWS IoT SiteWise merupakan sumber ekspor.
+ **Tujuan**: Lokasi yang diinginkan di mana Anda ingin memindahkan konten Anda.

  Misalnya, bucket Amazon S3 adalah tujuan ekspor, dan AWS IoT SiteWise merupakan tujuan impor.
+ **AWS IoT SiteWise Skema**: Skema ini digunakan untuk mengimpor dan mengekspor metadata dari. AWS IoT SiteWise
+ **Sumber daya tingkat atas:** AWS IoT SiteWise Sumber daya yang dapat Anda buat atau perbarui secara individual, seperti model aset atau aset.
+ **Sub-sumber daya: Sumber** AWS IoT SiteWise daya bersarang dalam sumber daya tingkat atas. Contohnya termasuk properti, hierarki, dan model komposit.
+ **Metadata**: Informasi penting yang diperlukan untuk mengimpor atau mengekspor sumber daya dengan sukses. Contoh metadata adalah definisi aset dan model aset.
+ **metadataTransferJob**: Objek yang dibuat saat Anda menjalankan`CreateMetadataTransferJob`.

## Fungsionalitas yang didukung
<a name="bulk-operations-functionality"></a>

Topik ini menjelaskan apa yang dapat Anda lakukan ketika Anda menjalankan operasi massal. Operasi massal mendukung fungsionalitas berikut:
+ **Pembuatan sumber daya tingkat atas:** Saat Anda mengimpor aset atau model aset yang tidak menentukan ID, atau ID yang tidak cocok dengan ID yang sudah ada, maka ID tersebut akan dibuat sebagai sumber daya baru.
+ **Penggantian sumber daya tingkat atas:** Ketika Anda mengimpor aset atau model aset yang ID-nya cocok dengan yang sudah ada, maka itu akan menggantikan sumber daya yang ada.
+ **Pembuatan, penggantian, atau penghapusan subsumber daya:** Ketika impor Anda menggantikan sumber daya tingkat atas seperti aset atau model aset, definisi baru akan menggantikan semua sub-sumber daya, seperti properti, hierarki, atau model komposit. 

  Misalnya, jika Anda memperbarui model aset selama impor massal, dan versi yang diperbarui mendefinisikan properti yang tidak ada pada aslinya, maka properti baru akan dibuat. Jika mendefinisikan properti yang sudah ada, maka properti yang ada akan diperbarui. Jika model aset yang diperbarui menghilangkan properti yang ada pada aslinya, maka properti tersebut akan dihapus.
+ **Tidak ada penghapusan sumber daya tingkat atas:** Operasi massal tidak menghapus aset atau model aset. Operasi massal hanya membuat atau memperbaruinya.

# Prasyarat operasi massal
<a name="bulk-operations-prereqs"></a>

Bagian ini menjelaskan prasyarat operasi massal, termasuk izin AWS Identity and Access Management (IAM) untuk bertukar sumber daya antara layanan dan mesin lokal Anda. AWS Sebelum Anda memulai operasi massal, selesaikan prasyarat berikut:
+ Buat bucket Amazon S3 untuk menyimpan sumber daya. Untuk informasi selengkapnya tentang menggunakan Amazon S3, lihat [Apa itu Amazon S3?](https://docs.aws.amazon.com//AmazonS3/latest/userguide/Welcome.html)

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

Untuk melakukan operasi massal, Anda harus membuat kebijakan AWS Identity and Access Management (IAM) dengan izin yang memungkinkan pertukaran AWS sumber daya antara Amazon S3 AWS IoT SiteWise, dan mesin lokal Anda. Untuk informasi selengkapnya tentang membuat kebijakan IAM, lihat [Membuat kebijakan IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/access_policies_create.html). 

Untuk melakukan operasi massal, Anda memerlukan kebijakan berikut.

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

Kebijakan ini memungkinkan akses ke tindakan AWS IoT SiteWise API yang diperlukan untuk operasi massal:

```
{
    "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 kebijakan
<a name="bulk-operations-TwinMaker-policy"></a>

Kebijakan ini memungkinkan akses ke operasi AWS IoT TwinMaker API yang Anda gunakan untuk bekerja dengan operasi massal:

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

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

Kebijakan ini menyediakan akses ke bucket Amazon S3 untuk mentransfer metadata untuk operasi massal.

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

Jika Anda menggunakan satu bucket tertentu untuk bekerja dengan metadata operasi massal, kebijakan ini menyediakan akses ke bucket tersebut:

```
{
    "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 ]

Jika Anda akan menggunakan banyak bucket berbeda untuk bekerja dengan metadata operasi massal, kebijakan ini menyediakan akses ke bucket apa pun:

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

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

Untuk informasi tentang pemecahan masalah operasi impor dan ekspor, lihat. [Memecahkan masalah impor dan ekspor massal](troubleshooting-bulk.md)

# Jalankan pekerjaan impor massal
<a name="running-bulk-operations-import"></a>

 Impor massal adalah tindakan memindahkan metadata ke ruang kerja. AWS IoT SiteWise Misalnya, impor massal dapat memindahkan metadata dari file lokal, atau file di bucket Amazon S3, ke ruang kerja. AWS IoT SiteWise 

## Langkah 1: Siapkan file untuk diimpor
<a name="preparing-import-file"></a>

Unduh file format AWS IoT SiteWise asli untuk mengimpor aset dan model aset. Lihat [AWS IoT SiteWise skema pekerjaan transfer metadata](bulk-operations-schema.md) untuk detail selengkapnya. 

## Langkah 2: Unggah file yang disiapkan ke Amazon S3
<a name="uploading-import-file"></a>

 Unggah file ke Amazon S3. Lihat [Mengunggah file ke Amazon](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html#uploading-an-object-bucket) S3 di Panduan *Pengguna Layanan Penyimpanan Sederhana Amazon* untuk detailnya. 

## Impor metadata (konsol)
<a name="import-metadata-console"></a>

Anda dapat menggunakan metadata impor massal. Konsol AWS IoT SiteWise Ikuti [Langkah 1: Siapkan file untuk diimpor](#preparing-import-file) dan [Langkah 2: Unggah file yang disiapkan ke Amazon S3](#uploading-import-file) siapkan file yang siap diimpor.

**Impor data dari Amazon S3 ke Konsol AWS IoT SiteWise**

1. Navigasikan ke [konsol AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/) tersebut.

1. Pilih **Operasi massal Baru** dari panel navigasi.

1. Pilih **Impor baru** untuk memulai proses impor.

1. Pada halaman **metadata Impor**:
   + Pilih **Jelajahi Amazon S3** untuk melihat bucket dan file Amazon S3.
   + Arahkan ke bucket Amazon S3 yang berisi file impor yang disiapkan.
   + Pilih file yang akan diimpor.
   + Tinjau file yang dipilih, dan pilih **Impor**.

1. **Operasi massal pada halaman SiteWise metadata** Konsol AWS IoT SiteWise menampilkan pekerjaan impor yang baru dibuat dalam tabel **kemajuan Pekerjaan**.

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

Untuk melakukan tindakan impor, gunakan prosedur berikut:

**Impor data dari Amazon S3 ke AWS CLI**

1. Buat file metadata yang menentukan sumber daya yang ingin Anda impor, mengikuti. [AWS IoT SiteWise skema pekerjaan transfer metadata](bulk-operations-schema.md) Simpan file ini di bucket Amazon S3 Anda.

   Untuk contoh file metadata yang akan diimpor, lihat. [Impor contoh metadata](bulk-operations-import-metadata-example.md) 

1. Sekarang buat file JSON dengan badan permintaan. Badan permintaan menentukan sumber dan tujuan untuk pekerjaan transfer. File ini terpisah dari file dari langkah sebelumnya. Pastikan untuk menentukan bucket Amazon S3 Anda sebagai sumber dan `iotsitewise` sebagai tujuan. 

   Contoh berikut menunjukkan badan permintaan:

   ```
   {
         "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. Memanggil `CreateMetadataTransferJob` dengan menjalankan AWS CLI perintah berikut. Dalam contoh ini, file isi permintaan dari langkah sebelumnya diberi nama`createMetadataTransferJobExport.json`.

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

   Ini akan membuat pekerjaan transfer metadata, dan memulai proses mentransfer sumber daya yang Anda pilih.

# Jalankan pekerjaan ekspor massal
<a name="running-bulk-operations-export"></a>

 Ekspor massal adalah tindakan memindahkan metadata dari AWS IoT SiteWise ruang kerja ke bucket Amazon S3. 

Saat melakukan ekspor massal AWS IoT SiteWise konten ke Amazon S3, Anda dapat menentukan filter untuk membatasi model aset dan aset tertentu yang ingin Anda ekspor.

Filter harus ditentukan di `iotSiteWiseConfiguration` bagian dalam bagian sumber permintaan JSON Anda.

**catatan**  
 Anda dapat menyertakan beberapa filter dalam permintaan Anda. Operasi massal akan mengekspor model aset dan aset yang cocok dengan filter mana pun.   
 Jika Anda tidak memberikan filter apa pun, operasi massal mengekspor semua model aset dan aset Anda. 

**Example minta badan dengan filter**  

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

## Ekspor metadata (konsol)
<a name="export-metadata-console"></a>

Prosedur berikut menjelaskan tindakan ekspor konsol:

**Buat pekerjaan ekspor di Konsol AWS IoT SiteWise**

1.  Navigasikan ke [konsol AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/) tersebut.

1. Pilih **Operasi massal Baru** dari panel navigasi.

1. Pilih **Ekspor baru** untuk memulai proses ekspor.

1. Pada halaman **metadata Ekspor**:
   +  Masukkan nama untuk pekerjaan ekspor. Ini adalah nama yang digunakan untuk file yang diekspor di bucket Amazon S3 Anda. 
   + Pilih sumber daya Anda untuk diekspor, yang menetapkan filter untuk pekerjaan:
     + Ekspor semua aset dan model aset. Gunakan filter pada aset dan model aset.
     + Aset ekspor. Filter aset Anda.
       + Pilih aset yang akan digunakan untuk filter ekspor.
       + (Opsional) Tambahkan keturunan atau model aset terkait.
     + Model aset ekspor. Filter pada model aset Anda.
       + Pilih model aset yang akan digunakan untuk filter ekspor.
       + (Opsional) Tambahkan keturunan, atau aset terkait atau keduanya. 
     + Pilih **Berikutnya**.
   + Arahkan ke bucket Amazon S3:
     + Pilih **Jelajahi Amazon S3** untuk melihat bucket dan file Amazon S3.
     + Arahkan ke bucket Amazon S3 tempat file harus ditempatkan.
     + Pilih **Berikutnya**.
   + Tinjau pekerjaan ekspor dan pilih **Ekspor**.

1. **Operasi massal pada halaman SiteWise metadata** Konsol AWS IoT SiteWise menampilkan pekerjaan impor yang baru dibuat dalam tabel **kemajuan Pekerjaan**.

Untuk berbagai cara menggunakan filter saat mengekspor metadata, lihat. [Contoh metadata ekspor](bulk-operations-export-filter-examples.md) 

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

Prosedur berikut menjelaskan tindakan AWS CLI ekspor:

**Ekspor data dari AWS IoT SiteWise ke Amazon S3**

1. Buat file JSON dengan badan permintaan Anda. Badan permintaan menentukan sumber dan tujuan untuk pekerjaan transfer. Contoh berikut menunjukkan badan permintaan contoh:

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

   Pastikan untuk menentukan bucket Amazon S3 Anda sebagai tujuan pekerjaan transfer metadata.
**catatan**  
Contoh ini akan mengekspor semua model aset dan aset Anda. Untuk membatasi ekspor ke model aset atau aset tertentu, Anda dapat menyertakan filter di badan permintaan Anda. Untuk informasi selengkapnya tentang menerapkan filter ekspor, lihat[Contoh metadata ekspor](bulk-operations-export-filter-examples.md).

1. Simpan file isi permintaan Anda untuk digunakan pada langkah berikutnya. Dalam contoh ini, file dinamai `createMetadataTransferJobExport.json`.

1. Memanggil `CreateMetadataTransferJob` dengan menjalankan AWS CLI perintah berikut:

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

   Ganti file JSON input `createMetadataTransferJobExport.json` dengan nama file transfer Anda sendiri.

# Pelacakan kemajuan pekerjaan dan penanganan kesalahan
<a name="jobs-progress-error-handling"></a>

 Pekerjaan proses massal membutuhkan waktu untuk diproses. Setiap pekerjaan diproses dalam urutan AWS IoT SiteWise menerima permintaan. Ini diproses one-at-a-time untuk setiap akun. Ketika pekerjaan selesai, antrian berikutnya secara otomatis mulai diproses. AWS IoT SiteWise menyelesaikan pekerjaan secara asinkron dan memperbarui status masing-masing saat berlangsung. Setiap pekerjaan memiliki bidang status yang berisi status sumber daya dan pesan kesalahan, jika berlaku.

Negara dapat menjadi salah satu dari nilai berikut:
+ `VALIDATING`— Memvalidasi pekerjaan termasuk format file yang dikirimkan, dan isinya.
+ `PENDING`— Pekerjaan dalam antrian. Anda dapat membatalkan pekerjaan dalam keadaan ini dari AWS IoT SiteWise konsol, tetapi semua negara bagian lain akan berlanjut hingga akhir.
+ `RUNNING`— Memproses pekerjaan. Ini membuat dan memperbarui sumber daya seperti yang didefinisikan oleh file impor, atau mengekspor sumber daya berdasarkan filter pekerjaan ekspor yang dipilih. Jika dibatalkan, sumber daya apa pun yang diimpor oleh pekerjaan ini tidak akan dihapus. Untuk informasi selengkapnya, lihat [Tinjau kemajuan dan detail pekerjaan (konsol)](review-job-progress.md#review-job-progress-console).
+ `CANCELLING`— Pekerjaan secara aktif dibatalkan.
+ `ERROR`Satu atau lebih sumber daya gagal diproses. Periksa laporan pekerjaan terperinci untuk informasi lebih lanjut. Untuk informasi selengkapnya, lihat [Periksa detail kesalahan (konsol)](inspect-errors.md#inspect-errors-console).
+ `COMPLETED`— Job selesai tanpa kesalahan.
+ `CANCELLED`— Pekerjaan dibatalkan dan tidak antri. Jika Anda membatalkan `RUNNING` pekerjaan, sumber daya yang sudah diimpor oleh pekerjaan ini pada saat pembatalan tidak dihapus. AWS IoT SiteWise

**Topics**
+ [Pelacakan kemajuan pekerjaan](review-job-progress.md)
+ [Periksa kesalahan untuk AWS IoT SiteWise](inspect-errors.md)

# Pelacakan kemajuan pekerjaan
<a name="review-job-progress"></a>

## Tinjau kemajuan dan detail pekerjaan (konsol)
<a name="review-job-progress-console"></a>

Lihat [Impor metadata (konsol)](running-bulk-operations-import.md#import-metadata-console) atau [Ekspor metadata (konsol)](running-bulk-operations-export.md#export-metadata-console) untuk memulai pekerjaan massal.

**Ikhtisar kemajuan pekerjaan di AWS IoT SiteWise konsol:**

1. Navigasikan ke [konsol AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/) tersebut.

1. Pilih **Operasi massal Baru** dari panel navigasi.

1. Tabel **kemajuan Jobs** di AWS IoT SiteWise konsol, menampilkan daftar pekerjaan operasi massal.

1. Kolom **tipe Job** menjelaskan apakah itu pekerjaan ekspor atau impor. Kolom **Tanggal yang diimpor** menampilkan tanggal pekerjaan dimulai.

1. Kolom **Status** menampilkan status pekerjaan. Anda dapat memilih pekerjaan untuk melihat detail tentang pekerjaan itu.

1. Pekerjaan yang dipilih menunjukkan **Sukses** setelah berhasil, atau daftar kegagalan jika pekerjaan gagal. Deskripsi kesalahan juga ditampilkan dengan setiap jenis sumber daya.

**Ikhtisar detail pekerjaan di AWS IoT SiteWise konsol:**

Tabel **kemajuan Jobs** di AWS IoT SiteWise konsol, menampilkan daftar pekerjaan operasi massal.

1. Pilih pekerjaan untuk melihat detail lebih lanjut.

1. Untuk pekerjaan **impor**, `Data source ARN` mewakili lokasi Amazon S3 dari file impor.

1. Untuk pekerjaan **ekspor**, `Data destination ARN` mewakili lokasi Amazon S3 file setelah ekspor.

1. `Status`Dan`Status reason`, memberikan rincian tambahan tentang pekerjaan saat ini. Lihat [Pelacakan kemajuan pekerjaan dan penanganan kesalahan](jobs-progress-error-handling.md) untuk detail selengkapnya.

1. `Queued position`Ini mewakili posisi pekerjaan dalam antrian proses. Pekerjaan diproses satu per satu. Posisi antrian 1, menunjukkan bahwa pekerjaan akan diproses selanjutnya.

1.  Halaman detail pekerjaan juga menampilkan jumlah kemajuan pekerjaan.

   1. Jenis jumlah kemajuan pekerjaan adalah:

     1. `Total resources`— Menunjukkan jumlah total aset dalam proses transfer.

     1. `Succeeded`— Menunjukkan jumlah aset yang berhasil ditransfer selama proses.

     1. `Failed`— Menunjukkan jumlah aset yang gagal selama proses.

     1. `Skipped`— Menunjukkan jumlah aset yang dilewati selama proses.

1. Status pekerjaan `PENDING` atau`VALIDATING`, menampilkan semua kemajuan pekerjaan dihitung sebagai`–`. Ini menunjukkan bahwa jumlah kemajuan pekerjaan sedang dievaluasi.

1. Status pekerjaan `RUNNING` menampilkan `Total resources` hitungan, pekerjaan yang diajukan untuk diproses. Hitungan terperinci (`Succeeded`,`Failed`, dan`Skipped`), berlaku untuk sumber daya yang diproses. Jumlah dari hitungan rinci lebih kecil dari `Total resources` hitungan, sampai status pekerjaan adalah `COMPLETED` atau. `ERROR`

1.  Jika status pekerjaan adalah `COMPLETED` atau`ERROR`, `Total resources` hitungannya sama dengan jumlah hitungan rinci (`Succeeded`,`Failed`, dan`Skipped`). 

1.  Jika status pekerjaan adalah`ERROR`, periksa tabel **Kegagalan Job** untuk rincian tentang kesalahan dan kegagalan tertentu. Lihat [Periksa detail kesalahan (konsol)](inspect-errors.md#inspect-errors-console) untuk detail selengkapnya. 

## Tinjau kemajuan dan detail pekerjaan (AWS CLI)
<a name="review-job-progress-cli"></a>

Setelah memulai operasi massal, Anda dapat memeriksa atau memperbarui statusnya menggunakan tindakan API berikut:
+ Untuk mengambil informasi tentang pekerjaan tertentu, gunakan tindakan [ GetMetadataTransferJob](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_GetMetadataTransferJob.html)API.

**Mengambil informasi dengan `GetMetadataTransferJob` API:**

  1. Buat dan jalankan pekerjaan transfer. Panggil `GetMetadataTransferJob` API.  
**Example AWS CLI perintah:**  

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

  1.  `GetMetadataTransferJob`API mengembalikan `MetadataTransferJobProgress` objek dengan parameter berikut: 
     + **SucceededCount** - Menunjukkan jumlah aset yang berhasil ditransfer dalam proses.
     + **FailedCount** - Menunjukkan jumlah aset yang gagal selama proses.
     + **SkippedCount** - Menunjukkan jumlah aset yang dilewati selama proses.
     + **TotalCount** — Menunjukkan jumlah total aset dalam proses transfer.

     Parameter ini menunjukkan status kemajuan pekerjaan. Jika statusnya`RUNNING`, mereka membantu melacak jumlah sumber daya yang masih akan diproses.

     Jika Anda menemukan kesalahan validasi skema, atau jika **failedCount** lebih besar dari atau sama dengan 1, status kemajuan pekerjaan berubah menjadi. `ERROR` Laporan kesalahan lengkap untuk pekerjaan tersebut ditempatkan di bucket Amazon S3 Anda. Lihat [Periksa kesalahan untuk AWS IoT SiteWise](inspect-errors.md) untuk detail selengkapnya.
+ Untuk membuat daftar pekerjaan saat ini, gunakan tindakan [ListMetadataTransferJobs](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_ListMetadataTransferJobs.html)API.

  Gunakan file JSON untuk memfilter pekerjaan yang dikembalikan berdasarkan statusnya saat ini. Lihat prosedur berikut:

  1. Untuk menentukan filter yang ingin Anda gunakan, buat file JSON AWS CLI masukan. ingin menggunakan:

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

     Untuk daftar `state` nilai yang valid, lihat [ListMetadataTransferJobsFilter](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_ListMetadataTransferJobsFilter.html)di *Panduan Referensi AWS IoT TwinMaker API*.

  1.  Gunakan file JSON sebagai argumen dalam AWS CLI contoh perintah berikut:

     ```
     aws iottwinmaker list-metadata-transfer-job --region your_region \
             --cli-input-json file://ListMetadataTransferJobsExample.json
     ```
+ Untuk membatalkan pekerjaan, gunakan tindakan [CancelMetadataTransferJob](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_CancelMetadataTransferJob.html)API. API ini membatalkan tugas transfer metadata tertentu, tanpa memengaruhi sumber daya apa pun yang sudah diekspor atau diimpor:

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

# Periksa kesalahan untuk AWS IoT SiteWise
<a name="inspect-errors"></a>

## Periksa detail kesalahan (konsol)
<a name="inspect-errors-console"></a>

**Detail kesalahan di AWS IoT SiteWise konsol:**

1. Navigasikan ke [konsol AWS IoT SiteWise](https://console.aws.amazon.com/iotsitewise/) tersebut.

1. Lihat tabel **kemajuan Pekerjaan** Konsol AWS IoT SiteWise untuk daftar pekerjaan operasi massal.

1. Pilih pekerjaan untuk melihat detail pekerjaan.

1. Jika status pekerjaan adalah `COMPLETED` atau`ERROR`, `Total resources` hitungannya sama dengan jumlah hitungan rinci (`Succeeded`,`Failed`, dan`Skipped`).

1.  Jika status pekerjaan adalah`ERROR`, periksa tabel **Kegagalan Job** untuk rincian tentang kesalahan dan kegagalan tertentu.

1. Tabel **kegagalan Job** menampilkan konten dari laporan pekerjaan. `Resource type`Bidang menunjukkan lokasi kesalahan atau kegagalan, seperti berikut ini:
   + Misalnya, kesalahan validasi `Bulk operations template` di `Resource type` bidang menunjukkan bahwa templat impor dan format file skema metadata tidak cocok. Untuk informasi selengkapnya, lihat [AWS IoT SiteWise skema pekerjaan transfer metadata](bulk-operations-schema.md). 
   + Gagal `Asset` di `Resource type` lapangan menunjukkan bahwa aset tidak dibuat karena konflik dengan aset lain. Lihat [Kesalahan umum](https://docs.aws.amazon.com/iot-sitewise/latest/APIReference/CommonErrors.html) untuk informasi tentang kesalahan dan konflik AWS IoT SiteWise sumber daya. 

## Periksa detail kesalahan ()AWS CLI
<a name="inspect-errors-cli"></a>

Untuk menangani dan mendiagnosis kesalahan yang dihasilkan selama tugas transfer, lihat prosedur berikut tentang penggunaan tindakan `GetMetadataTransferJob` API:

1. Setelah membuat dan menjalankan pekerjaan transfer, hubungi [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. Setelah Anda melihat status pekerjaan beralih ke`COMPLETED`, Anda dapat mulai memverifikasi hasil pekerjaan.

1. Ketika Anda memanggil`GetMetadataTransferJob`, ia mengembalikan objek yang dipanggil [https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_MetadataTransferJobProgress.html](https://docs.aws.amazon.com//iot-twinmaker/latest/apireference/API_MetadataTransferJobProgress.html).

    MetadataTransferJobProgress Objek berisi parameter berikut:
   + **FailedCount:** Menunjukkan jumlah aset yang gagal selama proses transfer.
   + **SkippedCount:** Menunjukkan jumlah aset yang dilewati selama proses transfer.
   + **SucceededCount:** Menunjukkan jumlah aset yang berhasil selama proses transfer.
   + **TotalCount:** Menunjukkan jumlah total aset yang terlibat dalam proses transfer.

1. Selain itu, panggilan API mengembalikan elemen`reportUrl`, yang berisi URL presigned. Jika pekerjaan transfer Anda memiliki masalah yang perlu Anda selidiki lebih lanjut, kunjungi url ini. 

# Impor contoh metadata
<a name="bulk-operations-import-metadata-example"></a>

Bagian ini menunjukkan cara membuat file metadata untuk mengimpor model aset dan aset dengan operasi impor massal tunggal.

## Contoh impor massal
<a name="example-metadata-file"></a>

Anda dapat mengimpor banyak model aset dan aset dengan satu operasi impor massal. Contoh berikut menunjukkan cara membuat file metadata untuk melakukan hal ini.

 Dalam skenario contoh ini, Anda memiliki berbagai situs kerja yang berisi robot industri dalam sel kerja. 

Contoh mendefinisikan dua model aset:
+ `RobotModel1`: Model aset ini mewakili jenis robot tertentu yang Anda miliki di lokasi kerja Anda. Robot memiliki properti pengukuran,`Temperature`. 
+ `WorkCell`: Model aset ini mewakili kumpulan robot dalam salah satu situs kerja Anda. Model aset mendefinisikan hierarki,`robotHierarchyOEM1`, untuk mewakili hubungan bahwa sel kerja berisi robot. 

Contoh ini juga mendefinisikan beberapa aset:
+ `WorkCell1`: sel kerja dalam situs Boston Anda
+ `RobotArm123456`: robot di dalam sel kerja itu
+ `RobotArm987654`: robot lain di dalam sel kerja itu

File metadata JSON berikut mendefinisikan model dan aset aset ini. Menjalankan impor massal dengan metadata ini menciptakan model aset dan aset di dalamnya AWS IoT SiteWise, termasuk hubungan hierarkisnya.

### File metadata untuk impor
<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"
                }
            ]
        }
    ]
}
```

## Contoh on-boarding awal model dan aset
<a name="example-scenario1"></a>

Dalam skenario contoh ini, Anda memiliki berbagai situs kerja yang berisi robot industri di sebuah perusahaan.

Contoh mendefinisikan beberapa model aset:
+ `Sample_Enterprise`— Model aset ini mewakili perusahaan yang menjadi bagian dari situs tersebut. Model aset mendefinisikan hierarki,`Enterprise to Site`, untuk mewakili hubungan situs dengan perusahaan.
+ `Sample_Site`— Model aset ini mewakili lokasi manufaktur di dalam perusahaan. Model aset mendefinisikan hierarki,`Site to Line`, untuk mewakili hubungan garis ke situs.
+ `Sample_Welding Line`— Model aset ini mewakili jalur perakitan di dalam lokasi kerja. Model aset mendefinisikan hierarki,`Line to Robot`, untuk mewakili hubungan robot dengan garis.
+ `Sample_Welding Robot`— Model aset ini mewakili jenis robot tertentu di lokasi kerja Anda.

Contoh ini juga mendefinisikan aset berdasarkan model aset.
+ `Sample_AnyCompany Motor`Aset ini dibuat dari model `Sample_Enterprise` aset.
+ `Sample_Chicago`Aset ini dibuat dari model `Sample_Site` aset.
+ `Sample_Welding Line 1`Aset ini dibuat dari model `Sample_Welding Line` aset.
+ `Sample_Welding Robot 1`Aset ini dibuat dari model `Sample_Welding Robot` aset.
+ `Sample_Welding Robot 2`Aset ini dibuat dari model `Sample_Welding Robot` aset.

File metadata JSON berikut mendefinisikan model dan aset aset ini. Menjalankan impor massal dengan metadata ini menciptakan model aset dan aset di dalamnya AWS IoT SiteWise, termasuk hubungan hierarkisnya.

### File JSON ke aset dan model onboard untuk impor
<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"
                }
            ]
        }
    ]
}
```

Tangkapan layar berikut adalah model yang ditampilkan Konsol AWS IoT SiteWise setelah Anda menjalankan contoh kode sebelumnya.

![\[AWS IoT SiteWise model dengan model aset dan aset.\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/images/import-example-asset.png)


Screenshot berikut adalah model, aset, dan hierarki yang ditampilkan di Konsol AWS IoT SiteWise setelah Anda menjalankan contoh kode sebelumnya.

![\[AWS IoT SiteWise model dengan aset, model aset, dan hierarki.\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/images/hierarchy-example-import.png)


## Contoh orientasi aset tambahan
<a name="example-scenario2"></a>

Contoh ini mendefinisikan aset tambahan untuk diimpor ke model aset yang ada di akun Anda:
+ `Sample_Welding Line 2`Aset ini dibuat dari model `Sample_Welding Line` aset.
+ `Sample_Welding Robot 3`Aset ini dibuat dari model `Sample_Welding Robot` aset.
+ `Sample_Welding Robot 4`Aset ini dibuat dari model `Sample_Welding Robot` aset.

Untuk membuat aset awal untuk contoh ini, lihat[Contoh on-boarding awal model dan aset](#example-scenario1).

File metadata JSON berikut mendefinisikan model dan aset aset ini. Menjalankan impor massal dengan metadata ini menciptakan model aset dan aset di dalamnya AWS IoT SiteWise, termasuk hubungan hierarkisnya.

### File JSON ke aset tambahan onboard
<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"
                }
            ]
        }
    ]
}
```

Screenshot berikut adalah model, aset, dan hierarki yang ditampilkan di Konsol AWS IoT SiteWise setelah Anda menjalankan contoh kode sebelumnya.

![\[AWS IoT SiteWise model dengan model aset dan aset.\]](http://docs.aws.amazon.com/id_id/iot-sitewise/latest/userguide/images/additional-assets-import.png)


## Contoh orientasi properti baru
<a name="example-scenario3"></a>

Contoh ini mendefinisikan properti baru pada model aset yang ada. Lihat [Contoh orientasi aset tambahan](#example-scenario2) untuk memasukkan aset dan model tambahan.
+ `Joint 1 Temperature`— Properti ini ditambahkan ke model `Sample_Welding Robot` aset. Properti baru ini juga akan menyebar ke setiap aset yang dibuat dari model `Sample_Welding Robot` aset. 

Untuk menambahkan properti baru ke model aset yang ada, lihat contoh file metadata JSON berikut. Seperti yang ditunjukkan dalam JSON, seluruh definisi model `Sample_Welding Robot` aset yang ada harus disediakan bersama dengan properti baru. Jika seluruh daftar properti dari definisi yang ada tidak disediakan, AWS IoT SiteWise menghapus properti yang dihilangkan. 

### File JSON ke properti baru onboard
<a name="bulk-import-JSON-file-new-properties"></a>

Contoh ini menambahkan properti baru `Joint 1 Temperature` ke model aset.

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

## Contoh mengelola aliran data
<a name="example-managing-data-streams"></a>

 Contoh ini menunjukkan dua cara mengelola aliran data yang terkait dengan properti aset. Saat mengganti nama alias properti aset, ada dua opsi untuk data historis yang saat ini disimpan dalam aliran data properti aset.
+  Opsi satu - Simpan aliran data saat ini dan ganti nama alias saja, memungkinkan data historis dapat diakses dengan alias baru. 

   Dalam contoh file metadata JSON, properti aset dengan ID `External_Id_Welding_Robot_Cycle_Count` mengubah aliasnya menjadi. `AnyCompany/Chicago/Welding Line/S3000/Count-Updated` Data historis untuk properti aset ini tetap sama setelah perubahan ini. 
+  Opsi dua — Tetapkan aliran data baru ke properti aset yang dapat diakses dengan alias baru. Aliran data lama bersama dengan data historisnya masih dapat diakses dengan alias lama, tetapi tidak terkait dengan properti aset apa pun. 

   Dalam contoh file metadata JSON, properti aset dengan ID `External_Id_Welding_Robot_Joint_1_Current` mengubah aliasnya menjadi. `AnyCompany/Chicago/Welding Line/S4999/1/Current` Kali ini nilai tambahan `retainDataOnAliasChange` hadir dan diatur ke`False`. Dengan pengaturan ini, aliran data asli dipisahkan dari properti aset, dan aliran data baru dibuat tanpa data historis. 

 Untuk mengakses aliran data lama dengan data historis asli, di AWS Console Home, buka halaman *Data Streams* dan cari alias `AnyCompany/Chicago/Welding Line/S3000/1/Current` lama. 

### File JSON untuk memperbarui alias properti
<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"
        }
    ]
}
```

# Contoh metadata ekspor
<a name="bulk-operations-export-filter-examples"></a>

Saat melakukan ekspor massal AWS IoT SiteWise konten ke Amazon S3, Anda dapat menentukan *filter* untuk membatasi model aset dan aset tertentu yang ingin Anda ekspor. 

Anda menentukan filter di `iotSiteWiseConfiguration` bagian dalam `sources` bagian badan permintaan Anda.

**catatan**  
Anda dapat menyertakan beberapa filter. Operasi massal akan mengekspor model aset atau aset apa pun yang cocok dengan filter mana pun.  
Jika Anda tidak memberikan filter apa pun, maka operasi akan mengekspor semua model aset dan aset Anda.

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



## Filter berdasarkan model aset
<a name="bulk-export-filter-asset-model"></a>

Anda dapat memfilter model aset tertentu. Anda juga dapat menyertakan semua aset menggunakan model tersebut, atau semua model aset dalam hierarki. Anda tidak dapat menyertakan aset dan hierarki.

Untuk informasi selengkapnya tentang hierarki, lihat[Tentukan hierarki model aset](define-asset-hierarchies.md).

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

Filter ini mencakup model aset yang ditentukan:

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

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

Filter ini mencakup model aset yang ditentukan, bersama dengan semua aset yang menggunakan model aset tersebut:

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

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

Filter ini mencakup model aset yang ditentukan, bersama dengan semua model aset terkait dalam hierarki:

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

------

## Filter berdasarkan aset
<a name="bulk-export-filter-asset"></a>

Anda dapat memfilter aset tertentu. Anda juga dapat menyertakan model asetnya, atau semua aset terkait dalam hierarki. Anda tidak dapat menyertakan model aset dan hierarki.

Untuk informasi selengkapnya tentang hierarki, lihat[Tentukan hierarki model aset](define-asset-hierarchies.md).

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

Filter ini mencakup aset yang ditentukan:

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

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

Filter ini mencakup aset yang ditentukan, bersama dengan model aset yang digunakannya:

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

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

Filter ini mencakup aset yang ditentukan, bersama dengan semua aset terkait dalam hierarki:

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

------

# AWS IoT SiteWise skema pekerjaan transfer metadata
<a name="bulk-operations-schema"></a>

Gunakan skema pekerjaan transfer AWS IoT SiteWise metadata untuk referensi saat melakukan operasi impor dan ekspor massal Anda sendiri:

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