Dynamodb-query-table

提供:Dev Guides
移動先:案内検索

DynamoDB-クエリテーブル

テーブルのクエリには、主にテーブルの選択、パーティションキーの指定、クエリの実行が必要です。セカンダリインデックスを使用し、スキャン操作でより深いフィルタリングを実行するオプションがあります。

GUIコンソール、Java、または別のオプションを使用してタスクを実行します。

GUIコンソールを使用したクエリテーブル

以前に作成したテーブルを使用していくつかの簡単なクエリを実行します。 まず、https://console.aws.amazon.com/dynamodb/[https://console.aws.amazon.com/dynamodb]でコンソールを開きます。

ナビゲーションペインから[テーブル]を選択し、テーブルリストから[返信]を選択します。 次に、 Items タブを選択して、ロードされたデータを表示します。

[アイテムの作成]ボタンの下のデータフィルタリングリンク(「スキャン:[テーブル]返信」)を選択します。

GUIコンソールを使用したクエリテーブル

フィルタリング画面で、操作の[クエリ]を選択します。 適切なパーティションキー値を入力し、[開始]をクリックします。

*Reply* テーブルは、一致するアイテムを返します。

返信テーブル

Javaを使用したクエリテーブル

Javaのクエリメソッドを使用して、データ取得操作を実行します。 パーティションキーの値を指定する必要があり、オプションとしてソートキーがあります。

最初にパラメーターを記述する* querySpecオブジェクト*を作成して、Javaクエリをコーディングします。 次に、オブジェクトをクエリメソッドに渡します。 前の例のパーティションキーを使用します。

次の例を確認できます-

import java.util.HashMap;
import java.util.Iterator;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.ItemCollection;
import com.amazonaws.services.dynamodbv2.document.QueryOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.QuerySpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;

public class ProductsQuery {
   public static void main(String[] args) throws Exception {
      AmazonDynamoDBClient client = new AmazonDynamoDBClient()
         .withEndpoint("http://localhost:8000");

      DynamoDB dynamoDB = new DynamoDB(client);
      Table table = dynamoDB.getTable("Products");
      HashMap<String, String> nameMap = new HashMap<String, String>();
      nameMap.put("#ID", "ID");
      HashMap<String, Object> valueMap = new HashMap<String, Object>();
      valueMap.put(":xxx", 122);
      QuerySpec querySpec = new QuerySpec()
         .withKeyConditionExpression("#ID = :xxx")
         .withNameMap(new NameMap().with("#ID", "ID"))
         .withValueMap(valueMap);

      ItemCollection<QueryOutcome> items = null;
      Iterator<Item> iterator = null;
      Item item = null;
      try {
         System.out.println("Product with the ID 122");
         items = table.query(querySpec);
         iterator = items.iterator();

         while (iterator.hasNext()) {
            item = iterator.next();
            System.out.println(item.getNumber("ID") + ": "
               + item.getString("Nomenclature"));
         }
      } catch (Exception e) {
         System.err.println("Cannot find products with the ID number 122");
         System.err.println(e.getMessage());
      }
   }
}

クエリはパーティションキーを使用しますが、セカンダリインデックスはクエリの別のオプションを提供することに注意してください。 この柔軟性により、非キー属性のクエリが可能になります。これについては、このチュートリアルの後半で説明します。

scanメソッドは、すべてのテーブルデータを収集することにより、取得操作もサポートします。 *オプションの.withFilterExpression *は、指定された基準外のアイテムが結果に表示されないようにします。

このチュートリアルの後半で、*スキャン*について詳しく説明します。 今、次の例を見てみましょう-

import java.util.Iterator;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.Item;
import com.amazonaws.services.dynamodbv2.document.ItemCollection;
import com.amazonaws.services.dynamodbv2.document.ScanOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;
import com.amazonaws.services.dynamodbv2.document.spec.ScanSpec;
import com.amazonaws.services.dynamodbv2.document.utils.NameMap;
import com.amazonaws.services.dynamodbv2.document.utils.ValueMap;

public class ProductsScan {
   public static void main(String[] args) throws Exception {
      AmazonDynamoDBClient client = new AmazonDynamoDBClient()
         .withEndpoint("http://localhost:8000");

      DynamoDB dynamoDB = new DynamoDB(client);
      Table table = dynamoDB.getTable("Products");
      ScanSpec scanSpec = new ScanSpec()
         .withProjectionExpression("#ID, Nomenclature , stat.sales")
         .withFilterExpression("#ID between :start_id and :end_id")
         .withNameMap(new NameMap().with("#ID",  "ID"))
         .withValueMap(new ValueMap().withNumber(":start_id", 120)
         .withNumber(":end_id", 129));

      try {
         ItemCollection<ScanOutcome> items = table.scan(scanSpec);
         Iterator<Item> iter = items.iterator();

         while (iter.hasNext()) {
            Item item = iter.next();
            System.out.println(item.toString());
         }
      } catch (Exception e) {
         System.err.println("Cannot perform a table scan:");
         System.err.println(e.getMessage());
      }
   }
}