2017-05-07 9 views
1

私は、異なるサービス/ソースから充填されたDynamoDBテーブルを持っています。テーブルに次のスキーマがあります。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

とても簡単でした。 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

関連する問題