2014-02-06 4 views
3

Я начал использовать Amazon DynamoDB и имел проблему с запросом.AWS Код ошибки: ValidationException, AWS Сообщение об ошибке: согласованные чтения не поддерживаются в глобальных вторичных индексах

У меня есть таблица Dev_Testgame1_Mail с идентификатором в качестве первичного хэш-ключа и следующие три глобальных вторичных индексов,

  1. fromPlayerId (Хэш-ключ)
  2. toPlayerId (Хэш ключа) + isRead (Диапазон Key)
  3. toPlayerId (Hash Key) + ENDDATE (Range Key)

я выше кода, чтобы сделать запрос,

**DynamoDBMail hashKObject = new DynamoDBMail(); 
      hashKObject.setToPlayerId(playerId); 
Condition endDateRangeKeyCondition = new Condition(); 
      //endDateRangeKeyCondition.withComparisonOperator(ComparisonOperator.NULL).withAttributeValueList(new AttributeValue().withB(Utils.convertDateToByteBuffer(DateUtil.getUtcDateTime()))); 
      endDateRangeKeyCondition.withComparisonOperator(ComparisonOperator.NULL); 

      DynamoDBQueryExpression<DynamoDBMail> queryExpression = new DynamoDBQueryExpression<DynamoDBMail>(); 
      queryExpression.withHashKeyValues(hashKObject).withRangeKeyCondition("endDate", endDateRangeKeyCondition); 
      queryExpression.withIndexName("gsi_tp_enddt").withLimit(pageSize).withScanIndexForward(false); 
      return dynamodbMapper.queryPage(DynamoDBMail.class, queryExpression, new DynamoDBMapperConfig(TableNameOverride.withTableNamePrefix(Utils.getDynamoDBTableNamePrefix(gameId, env))));** 

И я получаю следующее сообщение об ошибке,

com.amazonaws.AmazonServiceException: Код состояния: 400, AWS служба: AmazonDynamoDBv2, AWS Запрос ID: GUUBV24K2O40T276R9NNN0EKB7VV4KQNSO5AEMVJF66Q9ASUAAJG, AWS Код ошибки: ValidationException, AWS Сообщение об ошибке: Последовательное чтение не поддерживаются по глобальным вторичным индексам

Ваша помощь очень ценится по этой проблеме.

Благодаря Arun

ответ

6

Установить последовательное чтение свойство queryExpression к false. Поместите эту строку:

queryExpression.withConsistentRead(false); 

или

queryExpression.setConsistentRead(false); 

перед вызовом

return dynamodbMapper.queryPage(DynamoDBMail.class, queryExpression, new DynamoDBMapperConfig(TableNameOverride.withTableNamePrefix(Utils.getDynamoDBTableNamePrefix(gameId, env)))); 

Как и в сторону, я не думаю, что ваш NULLRangeKeyCondition делает что-нибудь для вас.

Смежные вопросы