ruby
  • amazon-web-services
  • amazon-simpledb
  • 2016-04-08 8 views 0 likes 
    0

    deleteメソッドをItemクラスのAWS Ruby SDK(v1)で使用して、AWS SimpleDBドメインのレコードを削除しようとしています。AWS SimpleDB Ruby v1 SDK削除メソッドが動作しない

    expected_total = # fetched using a count(*) query 
    actually_deleted = 0 
    
    query = "select * from MyDomain where Attr = '#{attr_value}'" 
    token = nil 
    begin 
        if token == nil then 
         resp = sdb.select(select_expression: query) 
        else 
         resp = sdb.select(
         select_expression: query, 
         next_token: token) 
        end 
        token = resp[:next_token] 
        resp[:items].each do |item| 
         item.delete({}) 
         actually_deleted += 1 
         print "\rDeleted #{actually_deleted} records..." if actually_deleted % 250 == 0 
        end 
    end while token != nil && token != '' 
    
    puts "\nComplete. Expected: #{expected_total} Actual: {actually_deleted}" 
    

    完了すると、予想されたレコード数が削除されたと報告されますが、それらのレコードは削除されていません。それらはまだすべてSimpleDBにあります。私は当初、レプリカの問題かもしれないと思っていました。しかし、何度スクリプトを実行しても、レコードを削除することはありません。

    Here's the docs私は使用しています。

    答えて

    0

    私が最後にしたいレコードを削除できましたが、代わりにv2 SDKを使用する必要がありました。

    item_batch = [] 
    token = nil 
    begin 
        if token == nil then 
         resp = sdb.select(select_expression: query) 
        else 
         resp = sdb.select(
         select_expression: query, 
         next_token: token) 
        end 
        token = resp[:next_token] 
        resp[:items].each do |item| 
         item_batch << { name: item[:name] } 
         if item_batch.size == 25 then 
         sdb.batch_delete_attributes({domain_name: domain_name, items: item_batch }) 
         item_batch = [] 
         actually_deleted += 25 
         end 
         print "\rDeleted #{actually_deleted} records..." if actually_deleted % 250 == 0 
        end 
    end while token != nil && token != '' 
    
    if not item_batch.empty? then 
        sdb.batch_delete_attributes({domain_name: domain_name, items: item_batch }) 
        actually_deleted += item_batch.size 
    end 
    

    また、クライアントはAws::SimpleDB::Client.new代わりのAWS::SimpleDB::Client.newのように初期化する必要があります:私はこのような何かをしました。

    これは、他の人に役立つかもしれませんが、v1 SDKが付いている可能性があります。私はこの答えを受け入れていない、それは私の質問の問題を解決しないためです。

    関連する問題