

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Acceder, consultar y unirse a las tablas de Amazon DynamoDB con Athena
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena"></a>

*Moinul Al-Mamun, Amazon Web Services*

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

Este patrón muestra cómo configurar una conexión entre Amazon Athena y Amazon DynamoDB mediante el conector DynamoDB de Amazon Athena. El conector utiliza una función de AWS Lambda para consultar los datos en DynamoDB. No es necesario escribir ningún código para configurar la conexión. Una vez establecida la conexión, puede acceder y analizar rápidamente las tablas de DynamoDB mediante la [Consulta federada de Athena](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html) para ejecutar comandos SQL desde Athena. También puede unir una o más tablas de DynamoDB entre sí o con otros orígenes de datos, como Amazon Redshift o Amazon Aurora.

## Requisitos previos y limitaciones
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-prereqs"></a>

**Requisitos previos **
+ Una cuenta de AWS activa con permisos para gestionar tablas de DynamoDB, los orígenes de datos de Athena, Lambda y roles de (IAM) de AWS Identity and Access Management
+ Un bucket de Amazon Simple Storage Service (Amazon S3) en el que Athena puede almacenar resultados de consultas
+ Un bucket de S3 en el que el conector DynamoDB de Athena puede guardar los datos a corto plazo
+ Una región de AWS compatible con la [versión 2 del motor Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference-0002.html)
+ Permisos de IAM para acceder a Athena y a los buckets de S3 necesarios
+ [Conector Amazon Athena DynamoDB](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb), instalado

**Limitaciones**

La consulta de las tablas de DynamoDB conlleva un costo. Los tamaños de tabla que superen unos pocos gigabytes (GBs) pueden suponer un coste elevado. Le recomendamos que considere el costo antes de realizar cualquier operación de escaneo de una tabla completa. Para obtener más información, consulte los precios de [Amazon DynamoDB](https://aws.amazon.com/dynamodb/pricing/). Para reducir los costos y lograr un alto rendimiento, le recomendamos que utilice siempre LIMIT en la consulta (por ejemplo, `SELECT * FROM table1 LIMIT 10`). Además, antes de realizar una consulta JOIN (unirse a) o GROUP BY (agrupar por) en un entorno de producción, tenga en cuenta el tamaño de sus tablas. Si sus tablas son demasiado grandes, considere opciones alternativas, como [migrar la tabla a Amazon S3](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/).

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

En el siguiente diagrama se muestra la forma en que un usuario puede ejecutar una consulta SQL en una tabla de DynamoDB desde Athena.

![\[Flujo de trabajo para conectar Athena y DynamoDB para ejecutar una consulta SQL.\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/images/pattern-img/e6ff94af-d208-40c7-94e4-af257755a603/images/bc8e0132-b578-463b-bf55-3c39ce359c17.png)


En el diagrama, se muestra el siguiente flujo de trabajo:

1. Para consultar una tabla de DynamoDB, el usuario ejecuta una consulta SQL desde Athena.

1. Athena inicia una función de Lambda.

1. La función de Lambda consulta los datos solicitados en la tabla de DynamoDB.

1. DynamoDB regresa los datos solicitados a la función de Lambda. A continuación, la función transfiere los resultados de la consulta al usuario a través de Athena.

1. La función de Lambda almacena los datos en el bucket de S3.

**Pila de tecnología**
+ Amazon Athena
+ Amazon DynamoDB
+ Amazon S3
+ AWS Lambda

## Tools (Herramientas)
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-tools"></a>
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html) es un servicio de consultas interactivo que facilita el análisis de datos en Amazon S3 con SQL estándar.
+ El [Conector de DynamoDB de Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) es una herramienta de AWS que permite a Athena conectarse con DynamoDB y acceder a sus tablas mediante consultas SQL.
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) es un servicio de base de datos de NoSQL completamente administrado que ofrece un rendimiento rápido, predecible y escalable.
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) es un servicio de computación que ayuda a ejecutar código sin necesidad de aprovisionar ni administrar servidores. Ejecuta el código solo cuando es necesario y amplía la capacidad de manera automática, por lo que solo pagará por el tiempo de procesamiento que utilice.

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

### Crear tablas de DynamoDB de muestra
<a name="create-sample-dynamodb-tables"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Cree la primera tabla de muestra.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desarrollador | 
| Inserte datos de muestra en la primera tabla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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> | Desarrollador | 
| Cree la segunda tabla de muestra.  | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desarrollador | 
| Inserte datos de muestra en la segunda tabla. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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> | Desarrollador | 

### Crear un origen de datos en Athena para DynamoDB
<a name="create-a-data-source-in-athena-for-dynamodb"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Configure el conector del origen de datos. | Cree un origen de datos para DynamoDB y, a continuación, cree una función de Lambda para conectarse a ese origen de datos.[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desarrollador | 
| Compruebe que la función de Lambda pueda acceder al bucket para derrames de S3. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html)Si se producen errores, consulte la sección de *Información adicional* de este patrón como guía. | Desarrollador | 

### Acceso a las tablas de DynamoDB desde Athena
<a name="access-dynamodb-tables-from-athena"></a>


| Tarea | Descripción | Habilidades requeridas | 
| --- | --- | --- | 
| Consultar las tablas de DynamoDB. | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/prescriptive-guidance/latest/patterns/access-query-and-join-amazon-dynamodb-tables-using-athena.html) | Desarrollador | 
| Unir las dos tablas de DynamoDB. | DynamoDB es un almacén de datos NoSQL y no admite la operación de unión de SQL. En consecuencia, debe realizar una operación de unión en dos tablas de DynamoDB:[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/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> | Desarrollador | 

## Recursos relacionados
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-resources"></a>
+ [Conector para DynamoDB de Amazon Athena](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) (Laboratorios de AWS)
+ [Consulte cualquier origen de datos con la nueva consulta federada de Amazon Athena](https://aws.amazon.com/blogs/big-data/query-any-data-source-with-amazon-athenas-new-federated-query/) (blog sobre macrodatos de AWS)
+ [Referencia de la versión del motor Athena](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html) (Guía del usuario de Athena)
+ [Simplifique la extracción y el análisis de datos de Amazon DynamoDB con AWS Glue y Amazon Athena](https://aws.amazon.com/blogs/database/simplify-amazon-dynamodb-data-extraction-and-analysis-by-using-aws-glue-and-amazon-athena/) (blog sobre bases de datos de AWS)

## Información adicional
<a name="access-query-and-join-amazon-dynamodb-tables-using-athena-additional"></a>

Si ejecuta una consulta en Athena con `spill_bucket` en formato `{bucket_name}/folder_name/`, puede recibir el siguiente mensaje de error:

```
"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 resolver este error, actualice la variable de entorno de la función de Lambda de `spill_bucket` a `{bucket_name_only}` y, a continuación, actualice la siguiente política de IAM de Lambda para el acceso de escritura al 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, puede quitar el conector de origen de datos de Athena que creó anteriormente y volver a crearlo utilizando solo `{bucket_name}` para `spill_bucket`.