Som*_*ter 3 search conditional amazon-web-services amazon-dynamodb aws-cli
我正在使用 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
Run Code Online (Sandbox Code Playgroud)
expression.json - 在 contains 中使用的变量
{
":file_name": {
"S": "20200322"
}
}
Run Code Online (Sandbox Code Playgroud)
key.json - 我不明白这个文件的意义
{
"file_name": {
"S": "20200322"
}
}
Run Code Online (Sandbox Code Playgroud)
错误
参数验证失败:参数 ExpressionAttributeNames 的类型无效。:file_name,值:OrderedDict([(u'S', u'20200322')]),类型:,有效类型:
问题
--expression-attribute-names
开关,为什么密钥是强制性的?关键是什么?--expression-attribute-values
和--expression-attribute-names
参考
contains
函数有 2 个参数:apath
和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
Run Code Online (Sandbox Code Playgroud)
请注意,一对单引号中有双引号。
在 JSON 中应该是这样的
{
":file_name": {
"S": "20200322"
}
}
Run Code Online (Sandbox Code Playgroud)
问题是您要运行条件删除,因此键必须是要删除的项目的键,表达式属性值将是要检查的条件,我不完全确定您可以运行条件在钥匙本身上。
让我们假设你有
{
"Id": {
"N": "12345"
}
"file_name": {
"S": "20200322"
}
}
Run Code Online (Sandbox Code Playgroud)
运行命令
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
Run Code Online (Sandbox Code Playgroud)
仅当文件中的条件与项目匹配时,该命令才会删除该项目。所以如果在文件中你有
{
":file_name": {
"S": "20200322"
}
}
Run Code Online (Sandbox Code Playgroud)
它将删除该项目,您的 JSON 文件中的任何其他值都不会删除该项目。