단계 4: 에서 AWS SDK for JavaScript를 사용하여 데이터 쿼리 및 스캔DynamoDB - Amazon DynamoDB

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

단계 4: 에서 AWS SDK for JavaScript를 사용하여 데이터 쿼리 및 스캔DynamoDB

query 메서드를 사용하여 테이블에서 데이터를 조회할 수 있습니다. 파티션 키 값을 지정해야 하며, 정렬 키는 선택 사항입니다.

Movies 테이블의 기본 키는 다음과 같이 구성됩니다.

  • year – 파티션 키. 속성 유형은 숫자입니다. 

  • title – 정렬 키. 속성 유형은 문자열입니다.

1년 동안 개봉한 모든 영화를 찾으려면 year만 지정해야 합니다. 를 제공해 어떤 조건(정렬 키에서)을 기준으로 일부 영화를 검색할 수도 있습니다.title 예를 들어, 2014년에 개봉한 영화 중 제목이 "A"로 시작하는 영화를 찾을 수 있습니다.

query 메서드 이외에도 scan 메서드를 사용하여 모든 테이블 데이터를 검색할 수 있습니다.

데이터 쿼리 및 스캔에 대한 자세한 내용은 각각 DynamoDB에서 쿼리 작업DynamoDB에서 스캔 작업 단원을 참조하십시오.

단계 4.1: 쿼리 - 한 해 동안 개봉한 모든 영화

이 단계에 포함된 프로그램은 year 1985에 개봉한 모든 영화를 조회합니다.

  1. 다음 프로그램을 복사한 후 이름이 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); }); } });
    참고

    ExpressionAttributeNames는 이름을 교체합니다. 이는 year가 Amazon DynamoDB의 예약어이기 때문입니다. 이것을 KeyConditionExpression를 포함해 어떤 표현식에서도 직접 사용할 수 없습니다. 표현식 속성 이름인 #yr를 사용하여 이를 지칭합니다.

    ExpressionAttributeValues는 값을 교체합니다. 이것을 사용하는 이유는 KeyConditionExpression을 포함해 어떤 표현식에서도 리터럴을 사용할 수 없기 때문입니다. 표현식 속성 값인 :yyyy를 사용하여 이를 지칭합니다.

  2. 프로그램을 실행하려면 다음 명령을 입력합니다.

    node MoviesQuery01.js

참고

이전 프로그램은 기본 키 속성으로 테이블을 쿼리하는 방법을 보여줍니다. DynamoDB에서 1개 이상의 보조 인덱스를 테이블에 생성하여 그 인덱스를 테이블을 쿼리하는 것과 동일한 방식으로 쿼리 작업을 할 수 있습니다. 보조 인덱스는 키가 아닌 속성에 대한 쿼리를 허용함으로써 애플리케이션에 더 많은 유연성을 부여합니다. 자세한 내용은 보조 인덱스를 사용하여 데이터 액세스 향상 단원을 참조하십시오.

단계 4.2: 쿼리 - 1년 동안 개봉한 모든 영화 중에 특정 제목을 지닌 영화

이 단계에 포함된 프로그램은 year 1992에 개봉한 영화 중에 title이 "A"부터 "L"까지의 알파벳으로 시작하는 영화를 모두 조회합니다.

  1. 다음 프로그램을 복사한 후 이름이 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]); }); } });
  2. 프로그램을 실행하려면 다음 명령을 입력합니다.

    node MoviesQuery02.js

4.3단계: 스캔

scan 메서드는 테이블의 모든 항목을 읽고 테이블의 모든 데이터를 반환합니다. 선택 사항인 filter_expression을 제공할 수 있으며 그 결과 기준과 일치하는 항목만 반환됩니다. 그러나 필터는 테이블 전체를 스캔한 후에만 적용됩니다.

다음 프로그램은 항목이 약 5,000개인 Movies 테이블 전체를 스캔합니다. 스캔은 선택 사항인 필터를 지정하여 1950년대 이후의 영화(약 100개 항목)만 가져오고 그 외의 것들은 모두 무시합니다.

  1. 다음 프로그램을 복사한 후 이름이 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); } } }

    코드에서 다음 사항에 유의하십시오.

    • ProjectionExpression은 스캔 결과에서 원하는 속성만 지정합니다.

    • FilterExpression은 조건을 만족하는 항목만 반환하도록 조건을 지정합니다. 다른 항목들은 모두 무시됩니다.

  2. 프로그램을 실행하려면 다음 명령을 입력합니다.

    node MoviesScan.js

참고

또한 테이블에서 생성된 모든 보조 인덱스를 Scan 작업에 사용할 수 있습니다. 자세한 내용은 보조 인덱스를 사용하여 데이터 액세스 향상 단원을 참조하십시오.