

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á.

# Acesse, consulte e una tabelas do Amazon DynamoDB usando o Athena
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun, Amazon Web Services*

## Resumo
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-summary"></a>

Este padrão mostra como configurar uma conexão entre o Amazon Athena e o Amazon DynamoDB usando o conector Amazon Athena DynamoDB. O conector usa uma função do AWS Lambda para consultar os dados no DynamoDB. Não é necessário escrever nenhum código para configurar a conexão. Depois que a conexão for estabelecida, você poderá acessar e analisar rapidamente as tabelas do DynamoDB usando o [Athena Federated Query](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html) para executar comandos SQL do Athena. Você também pode unir uma ou mais tabelas do DynamoDB entre si ou com outras fontes de dados, como Amazon Redshift ou Amazon Aurora.

## Pré-requisitos e limitações
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**Pré-requisitos **
+ Uma conta ativa AWS com permissões para gerenciar tabelas do DynamoDB, fontes de dados do Athena, Lambda e perfis do AWS Identity and Access Management (IAM)
+ Um bucket do Amazon Simple Storage Service (Amazon S3) no qual o Athena poderá armazenar resultados de consultas
+ Um bucket do S3 em que o Athena DynamoDB Connector pode salvar os dados no curto prazo
+ Uma região da AWS que fornece suporte à [versão 2 do mecanismo Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html)
+ Permissões do IAM para acessar o Athena e os buckets do S3 necessários
+ [Conector do DynamoDB no Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb), instalado

**Limitações**

Há um custo para consultar tabelas do DynamoDB. Tamanhos de tabela superiores a alguns gigabytes (GBs) podem gerar um alto custo. Recomendamos que você considere o custo antes de realizar qualquer operação de VERIFICAÇÃO de tabela completa. Para obter mais informações, consulte a [Definição de preço do Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/). Para reduzir custos e alcançar alto desempenho, recomendamos que você sempre use LIMIT em sua consulta (por exemplo, `SELECT * FROM table1 LIMIT 10`). Além disso, antes de realizar uma consulta JOIN ou GROUP BY em um ambiente de produção, considere o tamanho de suas tabelas. Se suas tabelas forem muito grandes, considere opções alternativas, como [migrar a tabela para o Amazon S3](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/).

## Arquitetura
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-architecture"></a>

O diagrama a seguir mostra como um usuário pode executar uma consulta SQL em uma tabela do DynamoDB do Athena.

![Fluxo de trabalho para conectar o Athena e o DynamoDB para executar uma consulta SQL.](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


O diagrama mostra o seguinte fluxo de trabalho:

1. Para consultar uma tabela do DynamoDB, um usuário executa uma consulta SQL do Athena.

1. O Athena inicia uma função do Lambda.

1. A função do Lambda consulta os dados solicitados na tabela do DynamoDB.

1. O DynamoDB retorna os dados solicitados para a função do Lambda. Em seguida, a função transfere os resultados da consulta para o usuário por meio do Athena.

1. A função do Lambda armazena dados no bucket do S3.

**Pilha de tecnologia**
+ Amazon Athena
+ Amazon DynamoDB
+ Amazon S3
+ AWS Lambda

## Ferramentas
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-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 no Amazon S3 usando SQL padrão.
+ O [Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) é uma ferramenta da AWS que permite que o Athena se conecte ao DynamoDB e acesse suas tabelas usando consultas SQL.
+ O [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) é um serviço de banco de dados NoSQL totalmente gerenciado que fornece performance rápida, previsível e escalável.
+ O [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) é um serviço de computação que ajuda você 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.

## Épicos
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-epics"></a>

### Criar exemplos de tabelas do DynamoDB
<a name="create-sample-dynamodb-tables"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Crie a primeira tabela de exemplo.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desenvolvedor | 
| Insira dados de exemplo na primeira tabela. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK1": "1234",<br />  "SK1": "info",<br />  "Salary": "5000"<br /> }</pre><pre>{<br />  "PK1": "1235",<br />  "SK1": "info",<br />  "Salary": "5200"<br /> }</pre> | Desenvolvedor | 
| Crie a segunda tabela de exemplo.  | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desenvolvedor | 
| Insira dados de exemplo na segunda tabela. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>{<br />  "PK2": "1234",<br /> "SK2": "bonus",<br /> "Bonus": "500"<br />}</pre><pre>{<br />  "PK2": "1235",<br /> "SK2": "bonus",<br /> "Bonus": "1000"<br />}</pre> | Desenvolvedor | 

### Crie uma fonte de dados no Athena para DynamoDB
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Configure o conector da fonte de dados. | Crie uma fonte de dados para o DynamoDB e, em seguida, uma função do Lambda para se conectar a essa fonte de dados.[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desenvolvedor | 
| Verifique se a função do Lambda pode acessar o bucket de vazamento do S3. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)Se ocorrerem erros, consulte a seção *Informações adicionais* neste padrão para obter orientação. | Desenvolvedor | 

### Acessar tabelas do DynamoDB a partir do Athena
<a name="access-dynamodb-tables-from-athena"></a>


| Tarefa | Description | Habilidades necessárias | 
| --- | --- | --- | 
| Consultar as tabelas do DynamoDB. | [See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desenvolvedor | 
| Unir duas tabelas do DynamoDB. | O DynamoDB é um armazenamento de dados NoSQL e não fornece suporte à operação de junção de SQL. Consequentemente, você deve realizar uma operação de junção em duas tabelas do DynamoDB:[See the AWS documentation website for more details](http://docs.aws.amazon.com/pt_br/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)<pre>SELECT pk1, salary, bonus FROM dydbtable1 t1<br /> JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;</pre> | Desenvolvedor | 

## Recursos relacionados
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ [Conector do Amazon Athena para o DynamoDB](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) (AWS Labs)
+ [Consulte qualquer fonte de dados com a nova consulta federada do Amazon Athena](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/) (blog do AWS Big Data)
+ [Referência da versão do mecanismo Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html) (Guia do usuário do Athena)
+ [Simplifique a extração e a análise de dados do Amazon DynamoDB usando o AWS Glue e o Amazon Athena](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) (blog do banco de dados da AWS)

## Mais informações
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

Se você executar uma consulta no Athena com `spill_bucket` no formato `{bucket_name}/folder_name/`, poderá receber a seguinte mensagem de erro:

```
"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/]
This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum  or contact customer support with Query Id: [query-id]"
```

Para solucionar esse erro, atualize a variável de ambiente da função do Lambda `spill_bucket` para `{bucket_name_only}` e, em seguida, atualize a seguinte política do IAM do Lambda para obter acesso de gravação no bucket:

```
{
             "Action": [
                 "s3:GetObject",
                 "s3:ListBucket",
                 "s3:GetBucketLocation",
                 "s3:GetObjectVersion",
                 "s3:PutObject",
                 "s3:PutObjectAcl",
                 "s3:GetLifecycleConfiguration",
                 "s3:PutLifecycleConfiguration",
                 "s3:DeleteObject"
            ],
             "Resource": [
                 "arn:aws:s3:::spill_bucket",
                 "arn:aws:s3:::spill_bucket/*"
            ],
             "Effect": "Allow"
        }
```

Como alternativa, você pode remover o conector da fonte de dados do Athena criado anteriormente e recriá-lo usando somente `{bucket_name}` para `spill_bucket`.