我正在尝试编写一个简单的ruby脚本来删除DynamoDB表中的所有项,但是我在理解传递给"delete_items“的参数时遇到了麻烦,这就是我到目前为止所得到的:
dynamoDB = Aws::DynamoDB::Resource.new(region: 'us-west-2')
dynamoDB.tables.each do |table|
  puts "Table #{table.name}"
  scan_output = table.scan({
    select: "ALL_ATTRIBUTES"
    })
  scan_output.items.each do |item|
    keys = item.keys
    table.delete_item({
      key: ???
    })
  end
end 我试着传递项目,或者item.keys --两者都不起作用。
谢谢!
发布于 2016-12-22 02:08:29
下面是扫描和删除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}"
endhttps://stackoverflow.com/questions/41250670
复制相似问题