我有从不同服务/来源填充的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数据库,所以现在我有数百万条难以查询或扫描的混合记录。据我所知,我的主要错误是错过了验证。
现在我必须抛出所有记录,如果它是不合适的类型 - 删除它并添加相同的数据,但格式正确。是否有可能以另一种优雅的方式做到?
答案 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