#amazon-web-services #amazon-dynamodb #boto3
Вопрос:
Я хочу извлечь все элементы с помощью запроса() из таблицы не с помощью сканирования, так как это очень дорого
, Могу ли я использовать .содержит() без table.scan()
dynamodb = boto3.resource('dynamodb')
table= dynamodb.Table('investors')
data = table.scan(
FilterExpression=Attr('groups_name').contains('person_name')
)
# Something like this
data = table.query(...
....
('groups_name').contains('person_name')
)
В моем DynamoDB -> инвесторы (таблица)>(у всех один и тот же ключ раздела=»фонд»)
-> пример элемента ->> имя группы [список]: имя человека (строка)
Ответ №1:
Если вы хотите извлечь все элементы из таблицы и иметь более одного значения ключа раздела, вам придется использовать Scan
. Query
API работает с одной коллекцией элементов (т. Е. со всеми элементами с одним и тем же ключом раздела), и фильтрация с помощью FilterExpression
этого также может быть выполнена там.
Фильтр содержит также недоступен для a KeyConditionExpression
или FilterExpression
в операции запроса, самое близкое совпадение было бы starts_with
, но это другое.
Чтобы эффективно обрабатывать этот шаблон доступа, вам необходимо пересмотреть свою модель данных.
Комментарии:
1. Да, у меня есть все элементы с одним и тем же ключом раздела (предположим, что имя ключа раздела= «фонд»). Как выполнить запрос с помощью выражения фильтра?
2. Как я пытался выразить:
contains
недоступно в aFilterExpression
ofQuery
. Вам нужно использоватьScan
для этого. Кроме того, выражения фильтра оцениваются после прочтения, это не сэкономит вам и деньгам, за исключением bandwitdh