

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Extraia e consulte atributos de AWS IoT SiteWise metadados em um data lake
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake"></a>

*Ambarish Dongaonkar, Amazon Web Services*

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

AWS IoT SiteWise usa modelos e hierarquias de ativos para representar seus equipamentos, processos e instalações industriais. Cada modelo ou ativo pode ter vários atributos específicos do seu ambiente. Exemplos de atributos de metadados incluem o local ou a localização física do ativo, detalhes da planta e identificadores do equipamento. Esses valores de atributos complementam os dados de medição de ativos para maximizar o valor comercial. O machine learning (ML) pode fornecer informações adicionais sobre esses metadados e simplificar as tarefas de engenharia.

No entanto, os atributos de metadados não podem ser consultados diretamente do AWS IoT SiteWise serviço. Para tornar os atributos consultáveis, você deve extraí-los e ingeri-los em um data lake. Esse padrão usa um script Python para extrair os atributos de todos os AWS IoT SiteWise ativos e ingeri-los em um data lake em um bucket do Amazon Simple Storage Service (Amazon S3). Ao concluir esse processo, você pode usar consultas SQL no Amazon Athena para acessar AWS IoT SiteWise os atributos de metadados e outros conjuntos de dados, como conjuntos de dados de medição. As informações do atributo de metadados também são úteis ao trabalhar com AWS IoT SiteWise monitores ou painéis. Você também pode criar um [painel do Amazon Quick Sight](https://docs.aws.amazon.com/quicksuite/latest/userguide/quick-bi.html) usando os atributos extraídos no bucket do Amazon S3.

O padrão tem código de referência, e você pode implementar o código usando os melhores serviços de computação para seu caso de uso, como AWS Lambda ou AWS Glue.

## Pré-requisitos e limitações
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-prereqs"></a>

**Pré-requisitos **
+ Um ativo Conta da AWS.
+ Permissões para configurar AWS Lambda funções ou AWS Glue trabalhos.
+ Um bucket do Amazon S3.
+ Os modelos e hierarquias de ativos são configurados em. AWS IoT SiteWise Para obter mais informações, consulte [Criação de modelos de ativos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/create-asset-models.html) na AWS IoT SiteWise documentação.

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

Você pode usar uma função Lambda ou um AWS Glue trabalho para concluir esse processo. Recomendamos usar o Lambda se você tiver menos de 100 modelos e cada modelo tiver uma média de 15 ou menos atributos. Para todos os outros casos de uso, recomendamos usar AWS Glue.

A arquitetura da solução e o fluxo de trabalho são mostrados no diagrama a seguir.

![Diagrama de arquitetura mostrando o processo de extração e consulta descrito.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/22b59ff7-3df3-4a5b-9973-d43967bd58fd/images/fa3d80bf-df9a-49fe-971c-a055339b2cd2.png)


1. O AWS Glue trabalho agendado ou a função Lambda é executada. Ele extrai os atributos de metadados do ativo AWS IoT SiteWise e os ingere em um bucket do Amazon S3.

1. Um AWS Glue rastreador rastreia os dados extraídos no bucket do Amazon S3 e cria tabelas em um. AWS Glue Data Catalog

1. Com o SQL padrão, o Amazon Athena realiza consultas nas tabelas do AWS Glue Data Catalog.

**Automação e escala**

Você pode programar a função ou o AWS Glue trabalho do Lambda para execução diária ou semanal, de acordo com a frequência de atualização das configurações de seus AWS IoT SiteWise ativos.

Não há limite para o número de AWS IoT SiteWise ativos que o código de amostra pode processar, mas um grande número de ativos pode aumentar o tempo necessário para concluir o processo.

## Ferramentas
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-tools"></a>
+ O [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) é um serviço de consultas interativas que facilita a análise de dados diretamente no Amazon S3 usando SQL padrão.
+ O [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html) é um serviço totalmente gerenciado de extração, transformação e carregamento (ETL). Ele ajuda você a categorizar de forma confiável, limpar, enriquecer e mover dados de forma confiável entre armazenamento de dados e fluxos de dados.
+ [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) ajuda você a gerenciar com segurança o acesso aos seus AWS recursos controlando quem está autenticado e autorizado a usá-los.
+ O [AWS IoT SiteWise](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html) auxilia na coleta, na modelagem, na análise e na visualização de dados de equipamentos industriais em grande escala.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda a executar código sem exigir provisionamento ou gerenciamento de servidores. Ele executa o código somente quando necessário e dimensiona automaticamente, assim, você paga apenas pelo tempo de computação usado.
+ O [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) é um serviço de armazenamento de objetos baseado na nuvem que ajuda você a armazenar, proteger e recuperar qualquer quantidade de dados.
+ [AWS SDK para Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html)é um kit de desenvolvimento de software que ajuda você a integrar seu aplicativo, biblioteca ou script Python com o. Serviços da AWS

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

### Configurar o trabalho ou a função
<a name="set-up-the-job-or-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configurar permissões do IAM. | No console do IAM, conceda permissões à função do IAM assumida pela função ou AWS Glue trabalho do Lambda para fazer o seguinte:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake.html)<br />Para obter mais informações, consulte [Criar um perfil para um AWS service (Serviço da AWS)](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html#roles-creatingrole-service-console) na documentação do IAM. | AWS geral | 
| Crie a função ou AWS Glue o trabalho do Lambda. | Se você estiver usando o Lambda, crie uma nova função do Lambda. Em **Runtime**, selecione **Python**. Para obter mais informações, consulte [Criar funções do Lambda com Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) na documentação do Lambda.<br />Se você estiver usando AWS Glue, crie um novo trabalho de shell do Python no AWS Glue console. Para obter mais informações, consulte [Adicionar trabalhos de shell do Python](https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-job-python-properties) na AWS Glue documentação.  | AWS geral | 
| Atualize a função ou AWS Glue o trabalho do Lambda. | Modifique a nova função ou AWS Glue tarefa do Lambda e insira o exemplo de código na seção [Informações adicionais](#extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional). Modifique o código conforme necessário para seu caso de uso. Para obter mais informações, consulte [Editar código usando o editor do console](https://docs.aws.amazon.com/lambda/latest/dg/foundation-console.html#code-editor) na documentação do Lambda e consulte [Trabalho com scripts](https://docs.aws.amazon.com/glue/latest/dg/console-edit-script.html) na AWS Glue documentação. | AWS geral | 

### Executar o trabalho ou função
<a name="run-the-job-or-function"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Execute a função ou AWS Glue o trabalho do Lambda. | Execute a função ou AWS Glue o trabalho do Lambda. Para obter mais informações, consulte [Invocar a função Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html#get-started-invoke-manually) na documentação do Lambda ou [consulte Iniciar trabalhos usando](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) acionadores na documentação. AWS Glue Isso extrai os atributos de metadados dos ativos e modelos na AWS IoT SiteWise hierarquia e os armazena no bucket do Amazon S3 especificado. | AWS geral | 
| Configure um AWS Glue rastreador. | Configure um AWS Glue rastreador com o classificador de formato necessário para um arquivo no formato CSV. Use os detalhes do bucket e do prefixo do Amazon S3 usados na função ou no trabalho do Lambda. AWS Glue Para obter mais informações, consulte [Definição de rastreadores](https://docs.aws.amazon.com/glue/latest/dg/add-crawler.html) na AWS Glue documentação. | AWS geral | 
| Execute o AWS Glue rastreador. | Execute o rastreador para processar o arquivo de dados criado pela função ou trabalho do Lambda. AWS Glue O rastreador cria uma tabela no especificado. AWS Glue Data Catalog Para obter mais informações, consulte [Iniciando rastreadores usando gatilhos](https://docs.aws.amazon.com/glue/latest/dg/trigger-job.html) na documentação. AWS Glue  | AWS geral | 
| Consulte os atributos dos metadados. | Usando o Amazon Athena, use o SQL padrão para consultá-los AWS Glue Data Catalog conforme necessário para seu caso de uso. Você pode unir a tabela de atributos de metadados com outros bancos de dados e tabelas. Para obter mais informações, consulte [Conceitos básicos](https://docs.aws.amazon.com/athena/latest/ug/getting-started.html) na documentação do Amazon Athena. | AWS geral | 

## Recursos relacionados
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-resources"></a>
+ [Documentação do Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)
+ [AWS Glue documentação](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html)
+ [AWS IoT SiteWise Referência de API](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/iotsitewise/index.html)
+ [AWS IoT SiteWise guia do usuário](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/what-is-sitewise.html)
  + [Conceitos básicos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/getting-started.html)
  + [Modelagem de ativos industriais](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/industrial-asset-models.html)
  + [Como definir relacionamentos entre modelos de ativos (hierarquias)](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/asset-hierarchies.html)
  + [Associar e desassociar ativos](https://docs.aws.amazon.com/iot-sitewise/latest/userguide/add-associated-assets.html)
  + [Criando a AWS IoT SiteWise demonstração](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) (documentação do SDK para Python)
+ [Documentação do Lambda](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html)

## Mais informações
<a name="extract-and-query-aws-iot-sitewise-metadata-attributes-in-a-data-lake-additional"></a>

**Código **

O código de amostra fornecido é para referência, e você pode personalizar esse código conforme necessário para seu caso de uso.

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