Столбец DynamoDB с тильдой и запрос с использованием JPA

у меня есть столбец таблицы со значением тильды, как показано ниже

             vendorAndDate              - Column name

             Chipotle~08-26-2020        - column value

Я хочу запросить месяц vendorAndPurchaseDate, например «% ~ 08% 2020», а год заканчивается с помощью vendorAndPurchaseDate 2020, например «% 2020». Я использую Spring Data JPA для запроса значений. Раньше я не работал со столбцом со значениями тильды. Пожалуйста, укажите мне правильное направление или несколько примеров


person SGN    schedule 01.09.2020    source источник


Ответы (2)


Вы не можете. Если vendorAndPurchaseDate является вашим ключом секции, вам нужно передать все значение. Если vendorAndPurchaseDate является ключом диапазона, вы можете выполнять только операцию = ,›,‹›=,‹=,between и begin_with вместе с ключом раздела.

ссылка: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html

person Mr Nobody    schedule 01.09.2020

DynamoDB не поддерживает этот тип запросов с подстановочными знаками.

Давайте рассмотрим другой способ DynamoDB для обработки запросов такого типа. Похоже, вы хотите поддерживать 2 шаблона доступа:

  1. Получить товар по месяцам
  2. Получить товар по годам

Вы не описываете свои первичные ключи (ключ раздела/ключ сортировки), поэтому я собираюсь сделать несколько предположений, чтобы проиллюстрировать один из способов решения этих шаблонов доступа.
Похоже, ваш атрибут представляет собой составной ключ, состоящий из <vendor>~<date>, где дата выражается MM-DD-YYYY. Я бы рекомендовал хранить ваши поля даты в формате YYYY-MM-DD, что позволит вам использовать возможности сортировки поля даты. Пример сделает это намного яснее. Представьте, что ваша таблица выглядит так:

введите здесь описание изображения

Я называю ваш атрибут vendorAndDate SK, так как я использую его в качестве ключа сортировки в этом примере. Эта структура таблицы позволяет мне реализовать два ваших шаблона доступа, выполнив следующие запросы (в псевдокоде, чтобы оставаться независимым от языка):

Схема доступа 1: получение всех записей Chipotle за август 2020 г.

  query from MyTable where PK = "Vendors" and SK between Chipotle~2020-08-00 and Chipotle~2020-08-31

Схема доступа 2: получить все записи Chipotle за 2020 год

  query from MyTable where PK = "Vendors" and SK between Chipotle~2020-01-01 and Chipotle~2020-12-31

Поскольку даты, хранящиеся в формате ISO8601 (например, ГГГГ-ММ-ДД...), можно лексикографически сортировать, таким образом вы можете выполнять запросы диапазона в DynamoDB.

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

person Seth Geoghegan    schedule 01.09.2020