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