DynamoDb
は初めてです。 hashKey
とrangeKey
を使用してDynamoDBのテーブルにクエリを実行する方法を知りたいだけです。
テーブルがTestTable
で、スキーマが次のようなものだとします。
1.Id (HK of type String)
2 Date (RK of type String )
3 Name (attribute of type String)
ここで、ここでhashKey
であるId
に基づいてこのテーブルに対してクエリを実行する場合、query
を次のように作成します。
私のクエリがId ="123".
を持つすべてのアイテムを取得するとします
TestTable testTable = new TestTable();
testTable.setId("123");
DynamoDBQueryExpression<TestTable> queryExpression = new DynamoDBQueryExpression<TestTable>()
.withHashKeyValues(TestTable)
.withConsistentRead(false);
次に、Id ="123" and Date ="1234"
を持つすべてのアイテムを取得します。
DynamoDB
でこれをクエリするにはどうすればよいですか
プログラミング言語としてJava
を使用しています。
AWSを使用したDynamoDBクエリとインデックス作成についての記事を書きましたJava SDK少し前に:http://labs.journwe.com/ 2013/12/15/dynamodb-secondary-indexes /
あなたの場合、それはこのように機能するはずです( http://docs.aws.Amazon.com/amazondynamodb/latest/developerguide/JavaQueryScanORMModelExample.html を参照):
AmazonDynamoDBClient client = new AmazonDynamoDBClient(new ProfileCredentialsProvider());
DynamoDBMapper mapper = new DynamoDBMapper(client);
String hashKey = "123";
long twoWeeksAgoMilli = (new Date()).getTime() - (15L*24L*60L*60L*1000L);
Date twoWeeksAgo = new Date();
twoWeeksAgo.setTime(twoWeeksAgoMilli);
SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
dateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String twoWeeksAgoStr = dateFormatter.format(twoWeeksAgo);
Condition rangeKeyCondition = new Condition()
.withComparisonOperator(ComparisonOperator.GT.toString())
.withAttributeValueList(new AttributeValue().withS(twoWeeksAgoStr.toString()));
Reply replyKey = new Reply();
replyKey.setId(hashKey);
DynamoDBQueryExpression<Reply> queryExpression = new DynamoDBQueryExpression<Reply>()
.withHashKeyValues(replyKey)
.withRangeKeyCondition("ReplyDateTime", rangeKeyCondition);
List<Reply> latestReplies = mapper.query(Reply.class, queryExpression);
詳細については、DynamoDBドキュメントのJava Object Persistence Modelセクションをご覧ください。
次のようにdynamoDbMapper.load()を使用できます。
TestTable testTable = new TestTable();
testTable.setId("123");
testTable.setDate("1234");
TestTable result = dynamoDBMapper.load(testTable);