С учетом таблицы DynamoDB:
- ключ раздела:
tid
, тип строки - ключ сортировки:
timestamp
, тип строки
Вы можете запросить:
- tid = 5
- tid = 5, отметка времени между 2018-12-21T09: 00: 00Z и 2018-12-21T15: 00: 00Z
Попробуйте использовать awscli , например, чтобы запросить все элементы с помощью tid=5
:
aws dynamodb query \
--table-name mytable \
--key-condition-expression "tid = :tid" \
--expression-attribute-values '{":tid":{"S":"5"}}'
Чтобы запросить все элементы для tid=5
и timestamp between 09:00 and 15:00 on 2015-12-21
:
aws dynamodb query \
--table-name mytable \
--key-condition-expression "tid = :tid AND #ts BETWEEN :ts1 AND :ts2" \
--expression-attribute-values '{":tid":{"S":"5"}, ":ts1":{"S":"2015-12-21T09:00:00Z"}, ":ts2":{"S":"2015-12-21T15:00:00Z"}}' \
--expression-attribute-names '{"#ts":"timestamp"}'
Примечание: поскольку timestamp
является зарезервированным ключевым словом в DynamoDB, вы должны экранировать его, используя имена атрибутов выражения.
Вы также можете создать атрибут timestamp
как число, а затем сохранить время эпохи, если хотите.
Запросить все элементы с timestamp between 09:00 and 15:00 on 2015-12-21
, независимо от tid
, нельзя в одном разделе/ сортировать схему ключей.Вам необходимо добавить Глобальный вторичный индекс примерно так:
- Ключ раздела GSI:
yyyymmdd
, введите строку - Ключ сортировки GSI:
timestamp
, введите string
Теперь вы можете запрашивать элементы с заданным диапазоном временных отметок, если они находятся в один и тот же день (у них один и тот же YYYYMMDD, что может быть разумным ограничением).Или вы можете перейти к YYYYMM в качестве ключа разделения, позволяющего более широкий диапазон временных отметок.На этом этапе вам действительно необходимо понять варианты использования запросов, чтобы решить, является ли ГГГГММДД (ограничение запросов одним днем) правильным.См. Как запросить DynamoDB по дате без очевидного хеш-ключа , чтобы узнать больше об этой идее.