DynamoDB выбирает определенные атрибуты с помощью boto3

#amazon-dynamodb #boto3

#amazon-dynamodb #boto3

Вопрос:

У меня есть таблица DynamoDB, вызываемая mydb в формате ниже, где id указан ключ раздела. Другими атрибутами этой таблицы являются Name, timestamp, Address and Sex . И мои контейнеры DB насчитывают 10 000 записей.

Теперь я хотел бы выбрать определенные атрибуты, такие как Id, Name and Address , поэтому я следую этим шагам, но ни один из них не показывает мне конкретные атрибуты. Может кто-нибудь указать, как это исправить?

 dynamodb_client = boto3.client('dynamodb', region_name='eu-west-1')
paginator = dynamodb_client.get_paginator('query')
 

Шаг 1 :

 for page in paginator.paginate(TableName='mydb',
                               Select='SPECIFIC_ATTRIBUTES',
                               AttributesToGet=[
                                   'Id',
                                   'Address',
                                   'Name'
                               ]):
     ....
 

жалуется botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the Query operation: Either the **KeyConditions** or **KeyConditionExpression** parameter must be specified in the request. на то, что я подумал, что это имеет смысл, и поэтому я перешел к шагу 2.

Шаг 2: поскольку для моего запроса нет условий, необходимых. Я подумал, что добавление условия id >= 1 поможет. Потому Id что в моей таблице начинается с 1 и продолжает увеличиваться.

 for page in paginator.paginate(TableName='mydb',
                               Select='SPECIFIC_ATTRIBUTES',
                               AttributesToGet=[
                                   'Id',
                                   'Name',
                                   'Address'
                               ],
                               KeyConditions={
                                   'Id': {
                                       'AttributeValueList': [{"N": str(1)}],
                                       'ComparisonOperator': 'GE'
                                   }
                               }):
        ......
Now, it throws me `botocore.exceptions.ClientError: An error occurred (ValidationException) when calling the Query operation: Query key condition not supported` 
 

Теперь я не понимаю, я добавил KeyConditions , потому что на шаге 1 предлагается добавить любой из них.

Итак, что я делаю не так и как это исправить?

Ответ №1:

В сообщении об ошибке сообщается, что проблема заключается when calling the Query operation в следующем. Действительно, Query операция — это операция, используемая для сканирования только одного раздела, и для нее требуется ключ этого раздела с KeyConditions KeyConditionExpression параметром или. Но вы не хотите сканировать отдельный раздел, вы хотите сканировать всю таблицу. Таким образом, вам нужно использовать Scan операцию, а не Query .

Итак, вам нужно передать scan , а не query в paginator, и все должно (надеюсь) работать так, как вы ожидали.