

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

# Ekstrak dan kueri atribut AWS IoT SiteWise metadata di danau data
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake"></a>

*Ambarish Dongaonkar, Amazon Web Services*

## Ringkasan
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-summary"></a>

AWS IoT SiteWise menggunakan model aset dan hierarki untuk mewakili peralatan, proses, dan fasilitas industri Anda. Setiap model atau aset dapat memiliki beberapa atribut yang spesifik untuk lingkungan Anda. Contoh atribut metadata mencakup lokasi atau lokasi fisik aset, detail pabrik, dan pengidentifikasi peralatan. Nilai atribut ini melengkapi data pengukuran aset untuk memaksimalkan nilai bisnis. Pembelajaran mesin (ML) dapat memberikan wawasan tambahan tentang metadata ini dan merampingkan tugas-tugas rekayasa.

Namun, atribut metadata tidak dapat ditanyakan langsung dari layanan. AWS IoT SiteWise Untuk membuat atribut dapat dikueri, Anda harus mengekstrak dan menelannya ke dalam danau data. Pola ini menggunakan skrip Python untuk mengekstrak atribut untuk semua AWS IoT SiteWise aset dan memasukkannya ke dalam data lake di bucket Amazon Simple Storage Service (Amazon S3). Setelah menyelesaikan proses ini, Anda dapat menggunakan kueri SQL di Amazon Athena untuk mengakses AWS IoT SiteWise atribut metadata dan kumpulan data lainnya, seperti kumpulan data pengukuran. Informasi atribut metadata juga berguna saat bekerja dengan AWS IoT SiteWise monitor atau dasbor. Anda juga dapat membuat [dasbor Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html) dengan menggunakan atribut yang diekstrak di bucket Amazon S3.

Pola memiliki kode referensi, dan Anda dapat menerapkan kode dengan menggunakan layanan komputasi terbaik untuk kasus penggunaan Anda, seperti AWS Lambda atau AWS Glue.

## Prasyarat dan batasan
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-prereqs"></a>

**Prasyarat**
+ Aktif Akun AWS.
+ Izin untuk mengatur AWS Lambda fungsi atau AWS Glue pekerjaan.
+ Bucket Amazon S3.
+ Model aset dan hierarki diatur dalam AWS IoT SiteWise. Untuk informasi selengkapnya, lihat [Membuat model aset](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-asset-models.html) dalam AWS IoT SiteWise dokumentasi.

## Arsitektur
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-architecture"></a>

Anda dapat menggunakan fungsi Lambda atau AWS Glue pekerjaan untuk menyelesaikan proses ini. Kami merekomendasikan menggunakan Lambda jika Anda memiliki kurang dari 100 model dan setiap model memiliki rata-rata 15 atau lebih sedikit atribut. Untuk semua kasus penggunaan lainnya, kami sarankan untuk menggunakan AWS Glue.

Arsitektur solusi dan alur kerja ditunjukkan pada diagram berikut.

![\[Diagram arsitektur yang menunjukkan proses ekstraksi dan kueri yang dijelaskan.\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/images/pattern-img/22b59ff7-3df3-4a5b-9973-d43967bd58fd/images/fa3d80bf-df9a-49fe-971c-a055339b2cd2.png)


1.  AWS Glue Pekerjaan terjadwal atau fungsi Lambda berjalan. Ini mengekstrak atribut metadata aset dari AWS IoT SiteWise dan mencernanya ke dalam bucket Amazon S3.

1.  AWS Glue Crawler merayapi data yang diekstraksi di bucket Amazon S3 dan membuat tabel dalam file. AWS Glue Data Catalog

1. Menggunakan SQL standar, Amazon Athena menanyakan tabel di file. AWS Glue Data Catalog

**Otomatisasi dan skala**

Anda dapat menjadwalkan fungsi atau AWS Glue pekerjaan Lambda untuk dijalankan setiap hari atau mingguan, sesuai dengan frekuensi pembaruan konfigurasi AWS IoT SiteWise aset Anda.

Tidak ada batasan jumlah AWS IoT SiteWise aset yang dapat diproses oleh kode sampel, tetapi sejumlah besar aset dapat meningkatkan jumlah waktu yang dibutuhkan untuk menyelesaikan proses.

## Alat
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) adalah layanan kueri interaktif yang membantu Anda menganalisis data secara langsung di Amazon S3 dengan menggunakan SQL standar.
+ [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)adalah layanan ekstrak, transformasi, dan beban (ETL) yang dikelola sepenuhnya. Ini membantu Anda mengkategorikan, membersihkan, memperkaya, dan memindahkan data dengan andal antara penyimpanan data dan aliran data.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) membantu Anda mengelola akses ke AWS sumber daya dengan aman dengan mengontrol siapa yang diautentikasi dan diberi wewenang untuk menggunakannya.
+ [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)membantu Anda mengumpulkan, memodelkan, menganalisis, dan memvisualisasikan data dari peralatan industri dalam skala besar.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)adalah layanan komputasi yang membantu Anda menjalankan kode tanpa perlu menyediakan atau mengelola server. Ini menjalankan kode Anda hanya bila diperlukan dan skala secara otomatis, jadi Anda hanya membayar untuk waktu komputasi yang Anda gunakan.
+ [Amazon Simple Storage Service (Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html)) adalah layanan penyimpanan objek berbasis cloud yang membantu Anda menyimpan, melindungi, dan mengambil sejumlah data.
+ [AWS SDK untuk Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)adalah kit pengembangan perangkat lunak yang membantu Anda mengintegrasikan aplikasi, perpustakaan, atau skrip Python Anda. Layanan AWS

## Epik
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-epics"></a>

### Mengatur pekerjaan atau fungsi
<a name="set-up-the-job-or-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Konfigurasikan izin di IAM. | Di konsol IAM, berikan izin ke peran IAM yang diasumsikan oleh fungsi atau AWS Glue tugas Lambda untuk melakukan hal berikut:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/id_id/prescriptive-guidance/latest/patterns/extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.html)Untuk informasi selengkapnya, lihat [Membuat peran Layanan AWS untuk](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) dokumentasi IAM. | AWS Umum | 
| Buat fungsi atau AWS Glue pekerjaan Lambda. | Jika Anda menggunakan Lambda, buat fungsi Lambda baru. Untuk **Runtime**, pilih **Python**. Untuk informasi selengkapnya, lihat [Membangun fungsi Lambda dengan Python di](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) dokumentasi Lambda.Jika Anda menggunakan AWS Glue, buat pekerjaan shell Python baru di konsol. AWS Glue Untuk informasi selengkapnya, lihat [Menambahkan pekerjaan shell Python](https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-job-python-properties) di dokumentasi. AWS Glue   | AWS Umum | 
| Perbarui fungsi atau AWS Glue pekerjaan Lambda. | Ubah fungsi atau AWS Glue pekerjaan Lambda baru, dan masukkan contoh kode di bagian [Informasi tambahan](#extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional). Ubah kode sesuai kebutuhan untuk kasus penggunaan Anda. Untuk informasi selengkapnya, lihat [Mengedit kode menggunakan editor konsol](https://docs.aws.amazon.com/lambda/latest/dg/foundation-console.html#code-editor) di dokumentasi Lambda dan lihat [Bekerja dengan skrip](https://docs.aws.amazon.com/glue/latest/dg/console-edit-script.html) dalam dokumentasi.AWS Glue  | AWS Umum | 

### Jalankan pekerjaan atau fungsi
<a name="run-the-job-or-function"></a>


| Tugas | Deskripsi | Keterampilan yang dibutuhkan | 
| --- | --- | --- | 
| Jalankan fungsi atau AWS Glue pekerjaan Lambda. | Jalankan fungsi atau AWS Glue pekerjaan Lambda. Untuk informasi selengkapnya, lihat [Memanggil fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually) di dokumentasi Lambda atau [lihat Memulai pekerjaan menggunakan](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) pemicu dalam dokumentasi. AWS Glue Ini mengekstrak atribut metadata untuk aset dan model dalam AWS IoT SiteWise hierarki dan menyimpannya di bucket Amazon S3 yang ditentukan. | AWS Umum | 
| Siapkan AWS Glue crawler. | Siapkan AWS Glue crawler dengan pengklasifikasi format yang diperlukan untuk file berformat CSV. Gunakan bucket Amazon S3 dan detail awalan yang digunakan dalam fungsi atau pekerjaan Lambda. AWS Glue Untuk informasi selengkapnya, lihat [Mendefinisikan crawler](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) dalam dokumentasi. AWS Glue  | AWS Umum | 
| Jalankan AWS Glue crawler. | Jalankan crawler untuk memproses file data yang dibuat oleh fungsi AWS Glue atau pekerjaan Lambda. Crawler membuat tabel dalam yang ditentukan AWS Glue Data Catalog. Untuk informasi selengkapnya, lihat atau [Memulai crawler menggunakan pemicu](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) dalam dokumentasi. AWS Glue  | AWS Umum | 
| Kueri atribut metadata. | Menggunakan Amazon Athena, gunakan SQL standar untuk menanyakan sesuai AWS Glue Data Catalog kebutuhan untuk kasus penggunaan Anda. Anda dapat bergabung dengan tabel atribut metadata dengan database dan tabel lainnya. Untuk informasi selengkapnya, lihat [Memulai](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html) di dokumentasi Amazon Athena. | AWS Umum | 

## Sumber daya terkait
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-resources"></a>
+ [Dokumentasi Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ [AWS Glue dokumentasi](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [AWS IoT SiteWise Referensi API](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/index.html)
+ [AWS IoT SiteWise panduan pengguna](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)
  + [Mulai menggunakan](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started.html)
  + [Pemodelan aset industri](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-asset-models.html)
  + [Mendefinisikan hubungan antara model aset (hierarki)](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html)
  + [Mengasosiasikan dan memisahkan aset](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/add-associated-assets.html)
  + [Membuat AWS IoT SiteWise demo](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started-demo.html#create-getting-started-demo)
+ [IOTSiteWise](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iotsitewise.html) (SDK untuk dokumentasi Python)
+ [Dokumentasi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)

## Informasi tambahan
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional"></a>

**Kode**

Kode sampel yang disediakan adalah untuk referensi, dan Anda dapat menyesuaikan kode ini sesuai kebutuhan untuk kasus penggunaan Anda.

```
# Following code can be used in an AWS Lambda function or in an AWS Glue Python shell job. 
# IAM roles used for this job need read access to the AWS IoT SiteWise service and write access to the S3 bucket.
sw_client = boto3.client('iotsitewise')
s3_client = boto3.client('s3')
output = io.StringIO()
 
attribute_list=[]
bucket = '{3_bucket name}'
prefix = '{s3_bucket prefix}'
output.write("model_id,model_name,asset_id,asset_name,attribuet_id,attribute_name,attribute_value\n")
     
m_resp = sw_client.list_asset_models()
for m_rec in m_resp['assetModelSummaries']:
     model_id = m_rec['id']
     model_name = m_rec['name']
 
     attribute_list.clear()
     dam_response = sw_client.describe_asset_model(assetModelId=model_id)
     for rec in dam_response['assetModelProperties']:
         if 'attribute' in rec['type']:
            attribute_list.append(rec['name'])
     
     response = sw_client.list_assets(assetModelId=model_id, filter='ALL')
     for asset in response['assetSummaries']:
         asset_id = asset['id']
         asset_name = asset['name']
         resp = sw_client.describe_asset(assetId=asset_id)
         for rec in resp['assetProperties']:
            if rec['name'] in attribute_list:
                p_resp = sw_client.get_asset_property_value(assetId=asset_id, propertyId=rec['id'])
                if 'propertyValue' in p_resp:
                    if p_resp['propertyValue']['value']:
                        if 'stringValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['stringValue']) + "\n")                             
                        if 'doubleValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['doubleValue']) + "\n")
                        if 'integerValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['integerValue']) + "\n")
                         if 'booleanValue' in p_resp['propertyValue']['value']:
                             output.write(model_id + "," + model_name + "," + asset_id + "," + asset_name + "," + rec['id'] + "," + rec['name'] + "," + str(p_resp['propertyValue']['value']['booleanValue']) + "\n")
 
output.seek(0)
s3_client.put_object(Bucket=bucket, Key= prefix + '/data.csv', Body=output.getvalue())
output.close()
```