在 aws-cli 中,如何根据条件从 DynamoDB 中删除项目?
In aws-cli, how to delete items from DynamoDB based on a condition?
我正在使用 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 - 在 contains
中使用的变量
{
":file_name": {
"S": "20200322"
}
}
key.json - 我不明白这个文件的意义
{
"file_name": {
"S": "20200322"
}
}
错误
Parameter validation failed: Invalid type for parameter
ExpressionAttributeNames.:file_name, value: OrderedDict([(u'S',
u'20200322')]), type: , valid types:
问题
- 如何根据包含条件删除单个条目?
- 如果我使用
--expression-attribute-names
开关,为什么密钥是强制性的?密钥需要是什么?
--expression-attribute-values
和--expression-attribute-names
有什么区别
参考
contains
函数有两个参数:一个 path
和 operand
contains (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"
}
}
问题是你想运行条件删除,所以key需要是你要删除的item的key,expression属性值将作为条件来检查,我我不完全确定你可以 运行 密钥本身的条件。
假设您有
{
"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 文件中的任何其他值都不会删除该项目。
我有一个类似的问题,在我的例子中,我发现(很长一段时间后)当直接在终端输入时,键 属性 (和所有地图属性)应该用单引号引起来
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"}}'
我正在使用 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 - 在 contains
中使用的变量{
":file_name": {
"S": "20200322"
}
}
key.json - 我不明白这个文件的意义
{
"file_name": {
"S": "20200322"
}
}
错误
Parameter validation failed: Invalid type for parameter ExpressionAttributeNames.:file_name, value: OrderedDict([(u'S', u'20200322')]), type: , valid types:
问题
- 如何根据包含条件删除单个条目?
- 如果我使用
--expression-attribute-names
开关,为什么密钥是强制性的?密钥需要是什么? --expression-attribute-values
和--expression-attribute-names
有什么区别
参考
contains
函数有两个参数:一个 path
和 operand
contains (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"
}
}
问题是你想运行条件删除,所以key需要是你要删除的item的key,expression属性值将作为条件来检查,我我不完全确定你可以 运行 密钥本身的条件。
假设您有
{
"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 文件中的任何其他值都不会删除该项目。
我有一个类似的问题,在我的例子中,我发现(很长一段时间后)当直接在终端输入时,键 属性 (和所有地图属性)应该用单引号引起来
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"}}'