DynamoDB запрос / сканирование возвращает только поднабор элементов - PullRequest
1 голос
/ 21 мая 2019

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

Это означает, что мне нужно сделать отдельный Batch_Get, чтобы получить фактические документы, на которые ссылаетсяэти ключи.

Я не использую выражение проекции, и в соответствии с документацией это означает, что должен быть возвращен весь элемент. 1

Как получить запрос навернуть весь документ, чтобы мне не приходилось делать отдельный пакет get?

Один пример кода, который показывает, что это ниже.Он распечатывает найденные документы, но они содержат только первичный ключ, вторичный ключ и ключ сортировки.

t1 = db.Table(tname)

q = { 
    'IndexName': 'mysGSI',
    'KeyConditionExpression': "secKey= :val1 AND " \
                              "begins_with(sortKey,:status)",
    'ExpressionAttributeValues': {
        ":val1": 'XXX',
        ":status": 'active-',
    }
}
res = t1.query(**q)

for doc in res['Items']:
    print(json.dumps(doc))

1 Ответ

3 голосов
/ 21 мая 2019

Эта ситуация обсуждается в документации для параметра Выбор .Вам нужно прочитать немало, чтобы найти это, что не идеально.

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

В основном:

  • Если вы запрашиваете родительскую таблицу, тогда вы получаете все атрибуты по умолчанию.

  • Если вы запрашиваете LSI, то вы получаете все атрибуты по умолчанию - они извлекаются из проекции в LSI, если все атрибуты проецируются в индекс (так что ничего не стоит) илив противном случае из базовой таблицы (что будет стоить вам больше чтений).

  • Если вы запрашиваете или сканируете GSI, вы можете запрашивать только те атрибуты, которые проецируются в индекс.Запросы GSI не могут извлечь атрибуты из родительской таблицы.

...