Учебники

DynamoDB — Запрос

Запросы определяют местонахождение предметов или вторичных индексов через первичные ключи. Выполнение запроса требует ключа раздела и определенного значения или ключа и значения сортировки; с возможностью фильтрации сравнений. Поведение запроса по умолчанию состоит в возврате каждого атрибута для элементов, связанных с предоставленным первичным ключом. Однако вы можете указать нужные атрибуты с помощью параметра ProjectionExpression .

Запрос использует параметры KeyConditionExpression для выбора элементов, что требует предоставления имени и значения ключа раздела в форме условия равенства. У вас также есть возможность предоставить дополнительное условие для любых имеющихся ключей сортировки.

Вот несколько примеров ключевых условий сортировки:

Sr.No Состояние и описание
1

х = у

Он принимает значение true, если атрибут x равен y.

2

х <у

Он оценивается как true, если x меньше y.

3

х <= у

Он принимает значение true, если x меньше или равно y.

4

х> у

Он оценивается как истина, если х больше, чем у.

5

х> = у

Он оценивается как истина, если х больше или равно у.

6

х между у и г

Он принимает значение true, если x равен и> = y, и <= z.

х = у

Он принимает значение true, если атрибут x равен y.

х <у

Он оценивается как true, если x меньше y.

х <= у

Он принимает значение true, если x меньше или равно y.

х> у

Он оценивается как истина, если х больше, чем у.

х> = у

Он оценивается как истина, если х больше или равно у.

х между у и г

Он принимает значение true, если x равен и> = y, и <= z.

DynamoDB также поддерживает следующие функции: begin_with (x, substr)

Значение true, если атрибут x начинается с указанной строки.

Следующие условия должны соответствовать определенным требованиям —

  • Имена атрибутов должны начинаться с символа в наборе az или AZ.

  • Второй символ имени атрибута должен находиться в наборе az, AZ или 0-9.

  • Имена атрибутов не могут использовать зарезервированные слова.

Имена атрибутов должны начинаться с символа в наборе az или AZ.

Второй символ имени атрибута должен находиться в наборе az, AZ или 0-9.

Имена атрибутов не могут использовать зарезервированные слова.

Имена атрибутов, не соответствующие указанным выше ограничениям, могут определять заполнитель.

Запрос обрабатывается путем выполнения поиска в порядке ключей сортировки и с использованием любых имеющихся условий и выражений фильтра. Запросы всегда возвращают набор результатов, и при отсутствии совпадений он возвращает пустой.

Результаты всегда возвращаются в порядке ключей сортировки и в порядке типов данных с изменяемым значением по умолчанию в порядке возрастания.

Запросы с Java

Запросы в Java позволяют запрашивать таблицы и вторичные индексы. Они требуют указания ключей разделения и условий равенства с возможностью указать ключи и условия сортировки.

Общие необходимые шаги для запроса в Java включают создание экземпляра класса DynamoDB, экземпляра класса Table для целевой таблицы и вызов метода запроса экземпляра Table для получения объекта запроса.

Ответ на запрос содержит объект ItemCollection, предоставляющий все возвращаемые элементы.

В следующем примере демонстрируются подробные запросы:

DynamoDB dynamoDB = new DynamoDB (
   new AmazonDynamoDBClient(new ProfileCredentialsProvider()));

Table table = dynamoDB.getTable("Response");  
   QuerySpec spec = new QuerySpec() 
   .withKeyConditionExpression("ID = :nn") 
.withValueMap(new ValueMap() 
   .withString(":nn", "Product Line 1#P1 Thread 1"));
   
ItemCollection<QueryOutcome> items = table.query(spec);  
Iterator<Item> iterator = items.iterator(); 
Item item = null; 

while (iterator.hasNext()) { 
   item = iterator.next(); 
   System.out.println(item.toJSONPretty());
}

Метод запроса поддерживает множество необязательных параметров. В следующем примере показано, как использовать эти параметры:

Table table = dynamoDB.getTable("Response");  
QuerySpec spec = new QuerySpec() 
   .withKeyConditionExpression("ID = :nn and ResponseTM > :nn_responseTM")  
   .withFilterExpression("Author = :nn_author") 
   .withValueMap(new ValueMap()
   .withString(":nn", "Product Line 1#P1 Thread 1") 
   .withString(":nn_responseTM", twoWeeksAgoStr) 
   .withString(":nn_author", "Member 123"))
   .withConsistentRead(true);
   
ItemCollection<QueryOutcome> items = table.query(spec);  
Iterator<Item> iterator = items.iterator(); 

while (iterator.hasNext()) { 
   System.out.println(iterator.next().toJSONPretty()); 
}

Вы также можете рассмотреть следующий более крупный пример.

Примечание. В следующей программе может использоваться ранее созданный источник данных. Прежде чем пытаться выполнить, приобретите вспомогательные библиотеки и создайте необходимые источники данных (таблицы с требуемыми характеристиками или другие ссылочные источники).

В этом примере также используются Eclipse IDE, файл учетных данных AWS и набор инструментов AWS в Java-проекте Eclipse AWS.