У меня есть таблица Динамо, в которой хранятся документы, которые выглядят следующим образом:
{
"guid": "<some UUID>"
"created_at": 1550778260030,
"display_name": "person",
"updated_at": 1550778260030,
"info": {
"locked": false,
"confirmed": true,
"deactivated": false,
"email": "person@example.com"
}
}
Таблица имеет глобальный вторичный индекс, управляемый Terraform, который определен следующим образом:
global_secondary_index {
name = "display_name_index"
hash_key = "display_name"
projection_type = "INCLUDE"
non_key_attributes = [
"updated_at",
"info.email",
"created_at"
]
}
Однакокогда я запрашиваю таблицу, поле info.email
не возвращается:
aws dynamodb query \
--table-name "accounts" \
--index-name "display_name_index" \
--key-condition-expression "display_name = :display_name" \
--expression-attribute-values '{":display_name":{"S":"person"}}'
{
"Count": 1,
"Items": [
{
"created_at": {
"N": "1550778260030"
},
"display_name": {
"S": "person"
}
"updated_at": {
"N": "1550778260030"
}
}
],
"ScannedCount": 1,
"ConsumedCapacity": null
}
Если я изменю non_key_attributes
, чтобы включить info
, он прекрасно возвращает полный информационный блок, и я могу использоватьprojection-expression
из info.email
, чтобы получить это поле просто отлично:
{
"Count": 1,
"Items": [
{
"info": {
"M": {
"email": {
"S": "person@example.com"
}
}
}
}
],
"ScannedCount": 1,
"ConsumedCapacity": null
}
Документы Dynamo указывают, что индексные ключи должны быть верхнего уровня, но они ничего не упоминают о неключевых атрибутахв проекции должен быть на высшем уровне.Поэтому я бы предположил, что все, что работает в выражении проекции, должно работать в проекции индекса, но, похоже, это не так?
Я что-то не так делаю с этим определением индекса или запросом?Или «Динамо» просто не поддерживает вложенные неключевые атрибуты как часть проекции индекса?