DynamoDB テーブルからすべてのアイテムをスキャンして削除するコードを次に示しますが、テーブルからすべてのアイテムを削除したい場合に、テーブルを削除して再作成できない理由はわかりません。
非常に具体的なユースケースがない限り、これは推奨されるアプローチではないことに注意してください。コードがテーブルからアイテムを読み取ってからアイテムを削除するため、これにはコストがかかります。
コード:-
以下のコードで、テーブル名とキー値を変更する必要がある場合があります。以下のコードでは、使用されるテーブル名は でfiles
あり、そのキー値はfileName
です。
パーティション キーとソート キーの両方がある場合は、両方の値を設定する必要があります。テーブルにはfiles
パーティション キーしかありません。
#! /usr/bin/ruby
require "aws-sdk-core"
# Configure SDK
# use credentials file at .aws/credentials
Aws.config[:credentials] = Aws::SharedCredentials.new
Aws.config[:region] = "us-west-2"
# point to DynamoDB Local, comment out this line to use real DynamoDB
Aws.config[:dynamodb] = { endpoint: "http://localhost:8000" }
dynamodb = Aws::DynamoDB::Client.new
tableName = "files"
scanParams = {
table_name: tableName
}
puts "Scanning files table."
begin
loop do
result = dynamodb.scan(scanParams)
result.items.each{|files|
puts "Item :" + "#{files}"
puts "Going to delete item :" + "#{files["fileName"]}"
deleteParams = {
table_name: tableName,
key: {
fileName: files["fileName"]
}
}
begin
deleteResult = dynamodb.delete_item(deleteParams)
puts "Deleted item." + files["fileName"]
rescue Aws::DynamoDB::Errors::ServiceError => error
puts "Unable to delete item:"
puts "#{error.message}"
end
}
break if result.last_evaluated_key.nil?
puts "Scanning for more..."
scanParams[:exclusive_start_key] = result.last_evaluated_key
end
rescue Aws::DynamoDB::Errors::ServiceError => error
puts "Unable to scan:"
puts "#{error.message}"
end