Paso 4: Consultar y examinar los datos
Puede utilizar el método query
para recuperar datos de una tabla. Debe especificar un valor de clave de partición;
la clave de ordenación es opcional.
La clave principal de la tabla Movies
consta de:
-
year
: clave de partición. El tipo de atributo es Number. -
title
: clave de ordenación. El tipo de atributo es String.
Para buscar todas las películas estrenadas durante un año, solo debe especificar el
valor de year
. También puede indicar el valor de title
si desea recuperar un subconjunto de películas basadas en una condición determinada
(la clave de ordenación). Por ejemplo, puede encontrar las películas estrenadas en
2014 cuyo título comienza por la "A".
Además del método query
, puede usar también el método scan
que puede recuperar todos los datos de la tabla.
Para obtener más información sobre cómo consultar y examinar datos, consulte Uso de consultas en DynamoDB y Uso de operaciones de examen en DynamoDB, respectivamente.
Temas
Paso 4.1: Consulta de todas las películas estrenadas durante un año
El programa incluido en este paso recupera todas las películas estrenadas en el año
(year
) 1985.
-
Copie el siguiente programa y péguelo en un archivo llamado
MoviesQuery01.js
./** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); console.log("Querying for movies from 1985."); var params = { TableName : "Movies", KeyConditionExpression: "#yr = :yyyy", ExpressionAttributeNames:{ "#yr": "year" }, ExpressionAttributeValues: { ":yyyy": 1985 } }; docClient.query(params, function(err, data) { if (err) { console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); } else { console.log("Query succeeded."); data.Items.forEach(function(item) { console.log(" -", item.year + ": " + item.title); }); } });
nota
ExpressionAttributeNames
permite sustituir nombres. Esto se usa porqueyear
es una palabra reservada en Amazon DynamoDB. No se puede usar directamente en ninguna expresión, incluidaKeyConditionExpression
. Para solucionar este problema se utiliza el nombre de atributo de expresión#yr
.ExpressionAttributeValues
permite sustituir valores. Se utiliza porque no se pueden utilizar literales en ninguna una expresión, lo que incluyeKeyConditionExpression
. Para solucionar este problema se utiliza el valor de atributo de expresión:yyyy
. -
Para ejecutar el programa, introduzca el siguiente comando.
node MoviesQuery01.js
nota
El programa anterior muestra cómo consultar una tabla según sus atributos de clave principal. En DynamoDB, puede crear si lo desea uno o varios índices secundarios en una tabla y consultarlos de la misma forma que se consulta una tabla. Los índices secundarios ofrecen a las aplicaciones mayor flexibilidad, porque permiten consultar atributos sin clave. Para obtener más información, consulte Uso de índices secundarios para mejorar el acceso a los datos.
Paso 4.2: Consulta de todas las películas estrenadas durante un año con unos títulos determinados
El programa incluido en este paso recupera todas las películas estrenadas el año (year
) 1992, cuyo título (title
) comienza por las letras de la "A" a la "L".
-
Copie el siguiente programa y péguelo en un archivo llamado
MoviesQuery02.js
./** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); console.log("Querying for movies from 1992 - titles A-L, with genres and lead actor"); var params = { TableName : "Movies", ProjectionExpression:"#yr, title, info.genres, info.actors[0]", KeyConditionExpression: "#yr = :yyyy and title between :letter1 and :letter2", ExpressionAttributeNames:{ "#yr": "year" }, ExpressionAttributeValues: { ":yyyy": 1992, ":letter1": "A", ":letter2": "L" } }; docClient.query(params, function(err, data) { if (err) { console.log("Unable to query. Error:", JSON.stringify(err, null, 2)); } else { console.log("Query succeeded."); data.Items.forEach(function(item) { console.log(" -", item.year + ": " + item.title + " ... " + item.info.genres + " ... " + item.info.actors[0]); }); } });
-
Para ejecutar el programa, introduzca el siguiente comando.
node MoviesQuery02.js
Paso 4.3: Examinar
El método scan
lee cada uno de los elementos de la tabla y devuelve todos los datos de la tabla.
Puede proporcionar una expresión filter_expression
opcional para que solamente se devuelvan los elementos que coinciden con los criterios.
No obstante, el filtro solo se aplica después de haber examinado toda la tabla.
El programa siguiente examina la tabla Movies
en su totalidad, que contiene aproximadamente 5000 elementos. El examen especifica
el filtro opcional que permite recuperar solamente las películas de la década de 1950
(aproximadamente 100 elementos) y descartar todas las demás.
-
Copie el siguiente programa y péguelo en un archivo llamado
MoviesScan.js
./** * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * This file is licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. A copy of * the License is located at * * http://aws.amazon.com/apache2.0/ * * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ var AWS = require("aws-sdk"); AWS.config.update({ region: "us-west-2", endpoint: "http://localhost:8000" }); var docClient = new AWS.DynamoDB.DocumentClient(); var params = { TableName: "Movies", ProjectionExpression: "#yr, title, info.rating", FilterExpression: "#yr between :start_yr and :end_yr", ExpressionAttributeNames: { "#yr": "year", }, ExpressionAttributeValues: { ":start_yr": 1950, ":end_yr": 1959 } }; console.log("Scanning Movies table."); docClient.scan(params, onScan); function onScan(err, data) { if (err) { console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2)); } else { // print all the movies console.log("Scan succeeded."); data.Items.forEach(function(movie) { console.log( movie.year + ": ", movie.title, "- rating:", movie.info.rating); }); // continue scanning if we have more movies, because // scan can retrieve a maximum of 1MB of data if (typeof data.LastEvaluatedKey != "undefined") { console.log("Scanning for more..."); params.ExclusiveStartKey = data.LastEvaluatedKey; docClient.scan(params, onScan); } } }
En el código, observe lo siguiente:
-
ProjectionExpression
especifica los atributos que se desea obtener en el resultado del examen. -
FilterExpression
especifica una condición que devuelve solamente los elementos que cumplen la condición. Todos los demás elementos se descartan.
-
-
Para ejecutar el programa, introduzca el siguiente comando.
node MoviesScan.js
nota
También puede usar la operación Scan
con cualesquiera índices secundarios que ha creado en la tabla. Para obtener más
información, consulte Uso de índices secundarios para mejorar el acceso a los datos.