0

我正在使用AWS CLI,並根據條件刪除行時出現問題在aws-cli中,如何根據條件從DynamoDB中刪除項目?

我有一個file_name鍵,我想刪除所有包含「20200322」的鍵。

命令

aws dynamodb delete-item \ 
    --table-name "logs" \ 
    --condition-expression "contains(file_name, :file_name)" \ 
    --expression-attribute-names file://expression.json \ 
    --key file://key.json 

expression.json - 變量使用在包含

{ 
    ":file_name": { 
     "S": "20200322" 
    } 
} 

key.json - 我不明白這個文件的點

{ 
    "file_name": { 
     "S": "20200322" 
    } 
} 

錯誤

參數驗證失敗:無效類型參數 ExpressionAttributeNames.:file_name,值:OrderedDict([(U'S」, u'202​​00322' )]),式:,有效類型:

問題

  • 如何根據包含條件刪除單個條目?
  • 爲什麼如果我使用--expression-attribute-names開關,密鑰是必需的?關鍵是什麼?
  • 是什麼--expression-attribute-values--expression-attribute-names

之間的差參考

回答

1

contains函數採用2參數:一個pathoperand

包含(路徑,操作數)

在這裏,我們缺少操作數。

aws dynamodb delete-item \ 
    --table-name "logs" \ 
    --key "{"file_name": {"S": "20200322"}}' 
    --condition-expression "contains(file_name, :file_name)" \ 
    --expression-attribute-values file://wvid_logs.json 

,並在JSON應該像

{ 
    ":file_name": { 
     "S": "20200322" 
    } 
} 

的事情是,你要運行條件刪除,所以關鍵需求是要刪除的項目的關鍵,並且表達式屬性值將是需要檢查的條件,我不完全確定您可以在密鑰本身上運行條件。

讓假設你有

{ 
    "Id": { 
     "N": "12345" 
    } 
    "file_name": { 
     "S": "20200322" 
    } 
} 

運行命令

aws dynamodb delete-item \ 
    --table-name "logs" \ 
    --key "{"Id": {"N": "12345"}}' 
    --condition-expression "contains(file_name, :file_name)" \ 
    --expression-attribute-values file://wvid_logs.json 

只有當從文件中的條件的項目相匹配的命令將刪除該項目。所以如果你有文件

{ 
    ":file_name": { 
     "S": "20200322" 
    } 
} 

它會刪除該項目,你的JSon文件中的任何其他值不會刪除該項目。

+0

Hi @frédéric-henri,你是對的,我沒有使用'--expression-attribute-values'。我正在使用'--key'。我更新了我上面運行的命令併產生了新的錯誤。如果我使用表達的值,我不確定'--key'的意義。 – SomeGuyOnAComputer