Как исключить элементы в вашем GSI DynamoDB - PullRequest
0 голосов
/ 26 апреля 2020

Итак, я читаю о разреженных индексах, которые исключают элементы, основанные на наличии или отсутствии атрибута. Я пытаюсь сделать это в своем скрипте облачной информации с атрибутами: isTenant. Если этот атрибут присутствует, я хочу, чтобы элемент появился в моем GSI, если атрибут не существует, я не хочу его там, это моя таблица:

FooBar:
  Type: "AWS::DynamoDB::Table"
  Properties:
    BillingMode: PAY_PER_REQUEST
    TableName: FooBarTable

    AttributeDefinitions:
      -
        AttributeName: "pk"
        AttributeType: "S"
      -
        AttributeName: "sort"
        AttributeType: "S"
      -
        AttributeName: "runningFiles"
        AttributeType: "N"


    KeySchema:
      -
        AttributeName: "pk"
        KeyType: "HASH"
      -
        AttributeName: "sort"
        KeyType: "RANGE"

    LocalSecondaryIndexes:
      -
        IndexName: RunningJobsPerTenant
        Projection:
          ProjectionType:
            INCLUDE
          NonKeyAttributes:
            - "isTenant"
        KeySchema:
          -
            AttributeName: "pk"
            KeyType: "HASH"
          -
            AttributeName: "runningFiles"
            KeyType: "RANGE"


Что я делаю неправильно?

1 Ответ

1 голос
/ 26 апреля 2020

Для любого элемента в таблице DynamoDB записывает соответствующую запись индекса, только если в элементе присутствует значение ключа сортировки индекса. Если ключ сортировки присутствует не в каждом элементе таблицы, индекс считается разреженным.

На основе приведенного выше утверждения из AWS документации DynamoDB: https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/bp-indexes-general-sparse-indexes.html

В качестве ключа сортировки необходим атрибут isTenant, поэтому индекс заполняется только при наличии этого атрибута.

Проблема, с которой вы можете столкнуться сейчас, заключается в том, что делать с вашим runningFiles атрибут (в случае, если он нужен для запроса индекса). Я предлагаю перегрузить другой атрибут, например:

  • Создать новый перегруженный атрибут, состоящий из pk#runningFiles
  • Создать новый атрибут, который присутствует только в том случае, если isTenant имеет значение true , Например, runningFilesIfTenant, поэтому вы создаете индекс, используя его в качестве ключа сортировки, и получаете тот же результат.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...