在dynamoDB中更改列类型的最佳方法

时间:2017-05-07 18:12:38

标签: python amazon-web-services amazon-dynamodb boto3

我有从不同服务/来源填充的DynamoDB表。该表具有下一个模式:

{
  "Id": 14782,
  "ExtId": 1478240974, //pay attention it is Number
  "Name": "name1"
}

有时,在服务开始工作后,我发现一个服务以不正确的格式发送数据。它看起来像:

{
  "Id": 14782,
  "ExtId": "1478240974", //pay attention it is String
  "Name": "name1"
}

DynamoDB是NoSQL数据库,所以现在我有数百万条难以查询或扫描的混合记录。据我所知,我的主要错误是错过了验证。

现在我必须抛出所有记录,如果它是不合适的类型 - 删除它并添加相同的数据,但格式正确。是否有可能以另一种优雅的方式做到?

1 个答案:

答案 0 :(得分:1)

所以这很容易。可以使用attribute_type方法。

首先,我添加了导入:

from boto3.dynamodb.conditions import Attr
import boto3

我的代码:

    attr = Attr('ExtId').attribute_type('S')
    response = table.scan(FilterExpression = attr)
    items = response['Items']

    while 'LastEvaluatedKey' in response:
        response = table.scan(FilterExpression = attr, ExclusiveStartKey = response['LastEvaluatedKey'])
        items.extend(response['Items'])

可以在下一篇文章中找到更多条件自定义 - DynamoDB Customization Reference