Как получить предметы из DynamoDB с неполным ключом или условием? - PullRequest
0 голосов
/ 02 апреля 2019

Таблица имеет два ключа: filename (ключ раздела) и eventTime (ключ сортировки). Мне нужно получить все предметы, имеющие filename='myfile' отношение eventTime или где eventTime<certain_ddate

Я пытаюсь сделать это так:

response = client.batch_get_item(
    RequestItems={
        tab_name:{
            "Keys":[
                {'filename':{'S':file}, 'eventTime':{'S':et}}
            ],
            "ExpressionAttributeNames": {":et":{'S':??????}}
            "ConsistentRead":False
         }
     },
     ReturnConsumedCapacity="TOTAL"
)

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

Что должно быть вместо ???? Должен ли я использовать что-то другое?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2019

«Запрос», https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html, - это именно та операция, которая вам нужна. Он вернет все элементы с заданным ключом раздела (в вашем примере, именем файла), отсортированные по ключу сортировки (eventtime), или, если хотите, только те элементы, где ключ сортировки находится в заданном диапазоне (например, eventTime).

0 голосов
/ 02 апреля 2019

GetItem даст вам ровно один элемент (не более), используя первичный ключ элемента. Где первичный ключ в вашем случае - это и хеш-ключ, и ключ сортировки.

Если в Запросе указан только хеш-ключ, вы можете вернуть несколько элементов. В вашем случае вы можете вернуть все элементы с заданным именем файла.

Если вы хотите отфильтровать результаты запроса с помощью ключа сортировки, вы можете применить KeyCondition . В вашем случае вы можете использовать оператор LT (меньше чем) для ключа сортировки.

РЕДАКТИРОВАТЬ: Вы не можете обновить весь раздел (имя файла) за один раз. Вы должны получить элементы с помощью запроса, затем выполнить итерацию и обновить их по одному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...