Extrahieren und Abfragen von AWS SiteWise IoT-Metadatenattributen in einem Data Lake - AWS Prescriptive Guidance

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

Extrahieren und Abfragen von AWS SiteWise IoT-Metadatenattributen in einem Data Lake

Erstellt von Ambarish Dongaonkar () AWS

Umwelt: Produktion

Technologien: IoT; Analytik; Große Datenmengen

AWSDienstleistungen: AWS IoT SiteWise; AWS Lambda; Glue AWS

Übersicht

AWSIoT SiteWise verwendet Asset-Modelle und Hierarchien, um Ihre Industrieanlagen, Prozesse und Anlagen darzustellen. Jedes Modell oder Asset kann mehrere Attribute haben, die für Ihre Umgebung spezifisch sind. Zu den Metadatenattributen gehören beispielsweise der Standort oder der physische Standort der Anlage, Anlagendetails und Gerätekennungen. Diese Attributwerte ergänzen die Messdaten der Anlagen, um den Geschäftswert zu maximieren. Maschinelles Lernen (ML) kann zusätzliche Einblicke in diese Metadaten liefern und technische Aufgaben rationalisieren.

Metadatenattribute können jedoch nicht direkt vom AWS SiteWise IoT-Dienst abgefragt werden. Um die Attribute abfragbar zu machen, müssen Sie sie extrahieren und in einen Data Lake aufnehmen. Dieses Muster verwendet ein Python-Skript, um die Attribute für alle AWS SiteWise IoT-Assets zu extrahieren und sie in einen Data Lake in einem Amazon Simple Storage Service (Amazon S3) -Bucket aufzunehmen. Wenn Sie diesen Vorgang abgeschlossen haben, können Sie SQL Abfragen in Amazon Athena verwenden, um auf die AWS SiteWise IoT-Metadatenattribute und andere Datensätze, z. B. Messdatensätze, zuzugreifen. Die Informationen zu den Metadatenattributen sind auch nützlich, wenn Sie mit AWS SiteWise IoT-Monitoren oder -Dashboards arbeiten. Sie können auch ein AWS QuickSight Dashboard erstellen, indem Sie die extrahierten Attribute im S3-Bucket verwenden.

Das Muster hat Referenzcode, und Sie können den Code implementieren, indem Sie die für Ihren Anwendungsfall am besten geeigneten Rechendienste wie AWS Lambda oder AWS Glue verwenden.

Voraussetzungen und Einschränkungen

Voraussetzungen

  • Ein aktives AWS-Konto.

  • Berechtigungen zum Einrichten von AWS Lambda-Funktionen oder AWS Glue-Jobs.

  • Ein Amazon-S3-Bucket

  • Die Asset-Modelle und Hierarchien werden im AWS IoT SiteWise eingerichtet. Weitere Informationen finden Sie unter Asset-Modelle erstellen (AWS SiteWise IoT-Dokumentation).

Architektur

Sie können eine Lambda-Funktion oder einen AWS Glue-Job verwenden, um diesen Vorgang abzuschließen. Wir empfehlen die Verwendung von Lambda, wenn Sie weniger als 100 Modelle haben und jedes Modell durchschnittlich 15 oder weniger Attribute hat. Für alle anderen Anwendungsfälle empfehlen wir die Verwendung von AWS Glue.

Die Lösungsarchitektur und der Arbeitsablauf sind in der folgenden Abbildung dargestellt.

Architekturdiagramm, das den beschriebenen Extraktions- und Abfrageprozess zeigt.
  1. Der geplante AWS Glue-Job oder die Lambda-Funktion wird ausgeführt. Es extrahiert die Attribute der Asset-Metadaten aus dem AWS IoT SiteWise und nimmt sie in einen S3-Bucket auf.

  2. Ein AWS Glue-Crawler durchsucht die extrahierten Daten im S3-Bucket und erstellt Tabellen in einem AWS Glue-Datenkatalog.

  3. Standardmäßig SQL fragt Amazon Athena die Tabellen im AWS Glue-Datenkatalog ab.

Automatisierung und Skalierung

Sie können die Lambda-Funktion oder den AWS Glue-Job so planen, dass sie täglich oder wöchentlich ausgeführt werden, je nach Aktualisierungshäufigkeit Ihrer AWS SiteWise IoT-Asset-Konfigurationen.

Die Anzahl der AWS SiteWise IoT-Assets, die der Beispielcode verarbeiten kann, ist unbegrenzt, aber eine große Anzahl von Assets kann den Zeitaufwand für den Abschluss des Prozesses erhöhen.

Tools

  • Amazon Athena ist ein interaktiver Abfrageservice, mit dem Sie Daten mithilfe von Standards SQL direkt in Amazon Simple Storage Service (Amazon S3) analysieren können.

  • AWSGlue ist ein vollständig verwalteter Dienst zum Extrahieren, Transformieren und Laden (ETL). Er hilft Ihnen dabei, Daten zuverlässig zu kategorisieren, zu bereinigen, anzureichern und zwischen Datenspeichern und Datenströmen zu verschieben.

  • AWSMit Identity and Access Management (IAM) können Sie den Zugriff auf Ihre AWS Ressourcen sicher verwalten, indem Sie kontrollieren, wer authentifiziert und autorisiert ist, diese zu verwenden.

  • AWSIoT SiteWise hilft Ihnen dabei, Daten von Industrieanlagen in großem Maßstab zu sammeln, zu modellieren, zu analysieren und zu visualisieren.

  • AWSLambda ist ein Rechendienst, mit dem Sie Code ausführen können, ohne Server bereitstellen oder verwalten zu müssen. Er führt Ihren Code nur bei Bedarf aus und skaliert automatisch, sodass Sie nur für die tatsächlich genutzte Rechenzeit zahlen.

  • Amazon Simple Storage Service (Amazon S3) ist ein cloudbasierter Objektspeicherservice, der Sie beim Speichern, Schützen und Abrufen beliebiger Datenmengen unterstützt.

  • AWSSDKfor Python (Boto3) ist ein Softwareentwicklungskit, mit AWS dem Sie Ihre Python-Anwendung, -Bibliothek oder Ihr Skript in Dienste integrieren können.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Konfigurieren Sie Berechtigungen inIAM.

Erteilen Sie in der IAM Konsole der IAM Rolle, die von der Lambda-Funktion oder dem AWS Glue-Job übernommen wurde, die folgenden Berechtigungen:

  • Lesen Sie aus dem AWS SiteWise IoT-Service

  • Schreiben Sie in den S3-Bucket

Weitere Informationen finden Sie unter Eine Rolle für einen AWS Dienst erstellen (IAMDokumentation).

Allgemein AWS

Erstellen Sie die Lambda-Funktion oder den AWS Glue-Job.

Wenn Sie Lambda verwenden, erstellen Sie eine neue Lambda-Funktion. Wählen Sie für Runtime Python. Weitere Informationen finden Sie unter Erstellen von Lambda-Funktionen mit Python (Lambda-Dokumentation).

Wenn Sie AWS Glue verwenden, erstellen Sie einen neuen Python-Shell-Job in der AWS Glue-Konsole. Weitere Informationen finden Sie unter Python-Shell-Jobs hinzufügen (AWSGlue-Dokumentation). 

Allgemein AWS

Aktualisieren Sie die Lambda-Funktion oder den AWS Glue-Job.

Ändern Sie die neue Lambda-Funktion oder den neuen AWS Glue-Job und geben Sie das Codebeispiel in den Abschnitt Zusätzliche Informationen ein. Ändern Sie den Code nach Bedarf für Ihren Anwendungsfall. Weitere Informationen finden Sie unter Code mit dem Konsolen-Editor bearbeiten (Lambda-Dokumentation) und Mit Skripten arbeiten (AWSGlue-Dokumentation).

Allgemein AWS
AufgabeBeschreibungErforderliche Fähigkeiten

Führen Sie die Lambda-Funktion oder den AWS Glue-Job aus.

Führen Sie die Lambda-Funktion oder den AWS Glue-Job aus. Weitere Informationen finden Sie unter Aufrufen der Lambda-Funktion (Lambda-Dokumentation) oder Jobs mithilfe von Triggern starten (AWSGlue-Dokumentation). Dadurch werden die Metadatenattribute für die Assets und Modelle in der AWS SiteWise IoT-Hierarchie extrahiert und im angegebenen S3-Bucket gespeichert.

Allgemein AWS

Richten Sie einen AWS Glue Crawler ein.

Richten Sie einen AWS Glue-Crawler mit dem erforderlichen Formatklassifikator für eine CSV -formatierte Datei ein. Verwenden Sie den S3-Bucket und die Präfixdetails, die in der Lambda-Funktion oder im AWS Glue-Job verwendet werden. Weitere Informationen finden Sie unter Crawler definieren (AWSGlue-Dokumentation).

Allgemein AWS

Starte den AWS Glue Crawler.

Führen Sie den Crawler aus, um die mit der Lambda-Funktion oder dem AWS Glue-Job erstellte Datendatei zu verarbeiten. Der Crawler erstellt eine Tabelle im angegebenen AWS Glue-Datenkatalog. Weitere Informationen finden Sie unter oder Crawler mithilfe von Triggern starten (AWSGlue-Dokumentation).

Allgemein AWS

Fragen Sie die Metadatenattribute ab.

Verwenden Sie Amazon Athena und verwenden Sie Standard, SQL um den AWS Glue-Datenkatalog nach Bedarf für Ihren Anwendungsfall abzufragen. Sie können die Metadaten-Attributtabelle mit anderen Datenbanken und Tabellen verknüpfen. Weitere Informationen finden Sie unter Erste Schritte (Amazon Athena Athena-Dokumentation).

Allgemein AWS

Zugehörige Ressourcen

Zusätzliche Informationen

Code

Der bereitgestellte Beispielcode dient als Referenz, und Sie können diesen Code nach Bedarf für Ihren Anwendungsfall anpassen.

# 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()