我正在使用AWS CLI并且在根据条件删除行时出现问题
我有一个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,value:OrderedDict([(你'', u'20200322')]),输入:,有效类型:
问题
--expression-attribute-names
开关,为什么键是强制性的?关键需要是什么?--expression-attribute-values
和--expression-attribute-names
参考
答案 0 :(得分:2)
contains
函数有2个参数:path
和operand
包含(路径,操作数)
这里你错过了操作数。
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文件中的任何其他值都不会删除该项目。
答案 1 :(得分:0)
我有一个类似的问题,在我的情况下,我发现(很长一段时间后)直接在终端输入时,键属性(和所有地图属性)应该用单引号括起来
aws dynamodb delete-item \
--table-name "logs" \
--condition-expression "contains(file_name, :file_name)" \
--expression-attribute-names file://expression.json \
--key '{":file_name": {"S": "20200322"}}'