Использование вложенных полей в проекции GSI DynamoDB - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть таблица Динамо, в которой хранятся документы, которые выглядят следующим образом:

{
  "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 указывают, что индексные ключи должны быть верхнего уровня, но они ничего не упоминают о неключевых атрибутахв проекции должен быть на высшем уровне.Поэтому я бы предположил, что все, что работает в выражении проекции, должно работать в проекции индекса, но, похоже, это не так?

Я что-то не так делаю с этим определением индекса или запросом?Или «Динамо» просто не поддерживает вложенные неключевые атрибуты как часть проекции индекса?

...