2016-12-20 30 views
2

我正在嘗試編寫一個簡單的ruby腳本來刪除DynamoDB表中的所有項目,但我無法理解要將哪個參數傳遞給「delete_items」,這就是我到目前爲止:使用Ruby刪除DynamoDB表中的所有項目

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 - 都沒有工作。

謝謝!

回答

1

最終我寫這個劇本從所有表中刪除所有記錄(在大多數情況下不是很有用,但是對於我的這正是我所需要的東西,因爲我用它在專用測試帳號):

#!/usr/bin/env ruby 

require 'aws-sdk' 

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| 
    item_key = Hash.new 
    table.key_schema.each do |k| 
     item_key[k.attribute_name] = item[k.attribute_name] 
    end 
    table.delete_item({ 
     key: item_key 
    }) 
    end 
end 
1

這是從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 
+0

你以爲我知道表名,而我想刪除所有表中的所有記錄。我將發佈我最終使用的腳本。 – duduamar

相關問題