Как получить данные за последние 30 дней из DynamoDB

#amazon-dynamodb

#amazon-dynamodb

Вопрос:

Я могу получить один элемент из своей таблицы, используя ExpressionAttribute и определенный идентификатор. Как я могу получить список элементов за последние 30 дней?

Эквивалентный SQL statment будет выглядеть следующим образом:

select * from tablename datetime >= DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH)

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

Ниже приведен код, который я пробовал:

 $sevenDaysAgo = date('Y-m-d H:i:s', strtotime('30 days')); 
echo $response = $dynamodb->query([ 'TableName' => 'notifications', 
                                    'KeyConditionExpression' => 'id = :id and date_time >= :datess', 
                                    'ExpressionAttributeValues' => [ 
                                       ':id' => ['S' => '350'],
                                       ':datess' => ['S' => $sevenDaysAgo] ], 
                                    'ProjectionExpression' => 'id',
                                    'ConsistentRead' => true ]);
  

Ответ №1:

Если в вашей таблице нет ключа раздела с именем id и ключа сортировки (также называемого диапазоном) с именем date_time , ваш запрос не будет работать так, как вы его написали.

С DynanoDB, в отличие от реляционной базы данных, вы можете запрашивать только ключ раздела и ключ сортировки.

Если вам нужно выполнить запрос на основе атрибута, который не является ключом сортировки или раздела, ваши варианты:

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

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