通过 Data Pipeline 截断 DynamoDb 或重写数据

Truncate DynamoDb or rewrite data via Data Pipeline

可以通过数据管道转储 DynamoDb,也可以在 DynamoDb 中导入数据。导入进展顺利,但数据始终附加到 DynamoDb 中已经存在的数据。

现在我找到了扫描 DynamoDb 并逐个或通过批处理删除项目的工作示例。但无论如何,对于大量数据来说,它不是一个好的变体。

也可以完全删除 table 并创建它。但是随着变体索引将会丢失。

因此,最好的方法是通过 Data Pipeline 导入覆盖 DynamoDb 数据或以某种方式截断数据。有可能吗?如果是怎么可能?

截断 Table 功能在 DynamoDB 中不可用,因此 请考虑删除 table 并重新创建

原因 : DynamoDB 根据您使用的 ReadCapacityUnits & WriteCapacityUnits 向您收费。如果您使用 BatchWriteItem 函数删除所有项目,它将使用 WriteCapacityUnits。因此,要保存这些 WriteCapacityUnits 以用于删除项目,最好截断 table 并重新创建它。

删除和创建 DynamoDB Table 的步骤如下:

Delete Table via AWS CLI :

aws dynamodb delete-table --table-name *tableName*

Delete Table via AmazonDynamoDB API :

Sample Request

POST / HTTP/1.1
Host: dynamodb.<region>.<domain>;
Accept-Encoding: identity
Content-Length: <PayloadSizeBytes>     
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.0
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
X-Amz-Date: <Date> 
X-Amz-Target: DynamoDB_20120810.DeleteTable 

{
    "TableName": "Reply"
}

Creating DynamoDB Table via AmazonDynamoDB API :

POST / HTTP/1.1
Host: dynamodb.<region>.<domain>;
Accept-Encoding: identity
Content-Length: <PayloadSizeBytes>     
User-Agent: <UserAgentString>
Content-Type: application/x-amz-json-1.0
Authorization: AWS4-HMAC-SHA256 Credential=<Credential>, SignedHeaders=<Headers>, Signature=<Signature>
X-Amz-Date: <Date> 
X-Amz-Target: DynamoDB_20120810.CreateTable 

{
    "AttributeDefinitions": [
        {
            "AttributeName": "ForumName",
            "AttributeType": "S"
        },
        {
            "AttributeName": "Subject",
            "AttributeType": "S"
        },
        {
            "AttributeName": "LastPostDateTime",
            "AttributeType": "S"
        }
    ],
    "TableName": "Thread",
    "KeySchema": [
        {
            "AttributeName": "ForumName",
            "KeyType": "HASH"
        },
        {
            "AttributeName": "Subject",
            "KeyType": "RANGE"
        }
    ],
    "LocalSecondaryIndexes": [
        {
            "IndexName": "LastPostIndex",
            "KeySchema": [
                {
                    "AttributeName": "ForumName",
                    "KeyType": "HASH"
                },
                {
                    "AttributeName": "LastPostDateTime",
                    "KeyType": "RANGE"
                }
            ],
            "Projection": {
                "ProjectionType": "KEYS_ONLY"
            }
        }
    ],
    "ProvisionedThroughput": {
        "ReadCapacityUnits": 5,
        "WriteCapacityUnits": 5
    }
}

总结 : 删除 table 并重新创建 将是最好的解决方案。