8

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

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

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

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

4

1 回答 1

9

截断表功能在 DynamoDB 中不可用,因此请考虑删除表并再次创建

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

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

通过 AWS CLI 删除表

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

通过 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.DeleteTable 

{
    "TableName": "Reply"
}

通过 AmazonDynamoDB API 创建 DynamoDB 表

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
    }
}

摘要删除表并再次创建将是最好的解决方案。

于 2017-03-09T06:00:43.983 回答