DynamoDB несколько условий сканирования с несколькими BeginsWith - PullRequest
0 голосов
/ 17 июня 2020

У меня есть таблица в DynamoDB с ключом раздела и ключом диапазона.

Структура таблицы

Subscriber ID (partition key) | Item Id (Range Key) | Date        |...
123                           | P_345               | some date 1 | ...
123                           | I_456               | some date 2 |
123                           | A_678               | some date 3 | ... 

Теперь я хочу получить данные из таблицы, используя QueryAsync C# библиотеку с несколькими условиями сканирования.

  • HashKey = 123
  • условие 1; Дата находится между "некоторая дата 1" и "некоторая дата 2"
  • условие 2. Ключ диапазона начинается с I_ и P_

Есть ли способ, которым я могу достичь этого, используя c# API-интерфейсы DynamoDB? Пожалуйста, помогите

1 Ответ

3 голосов
/ 17 июня 2020

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

  1. Поскольку вы ищете конкретный хэш-ключ c, это будет запрос Query, а не Scan.
  2. У вас есть условие begins_with() для ключа диапазона. Вы указываете это, используя параметр KeyConditionExpression для Query. KeyConditionExpression запросит HashKey = 123 И начинается_с (RangeKey, «P _»).
  3. Однако KeyConditionExpression не допускает «ИЛИ» (rangekey начинается с «P_» или «I_» ). Вам просто нужно выполнить два отдельных запроса - один с «I_» и один с «P_» (вы даже можете выполнить два запроса параллельно, если вы используете sh).
  4. Дата не один из ключевых столбцов, поэтому вам нужно будет отфильтровать его с помощью параметра FilterExpression запроса. Обратите внимание, что фильтрация происходит только на последнем шаге, после того как DynamoDB уже прочитал все элементы, соответствующие KeyConditionExpression выше (это может увеличить ваши расходы, если фильтрация удаляет много элементов, а вы все равно будете платить за них).
...