如何在AWS CLI中返回DynamoDB中的项目

71

所以,我有一个 DynamoDB 表 Users,我想返回这个表中所有内容,或者可能只是一部分。

我尝试过

aws dynamodb query --table-name Users 

它说我必须指定 key-conditionkey-condition-expression,因此我添加了以下内容:

aws dynamodb query --table-name Users --key-condition-expression Username = "test"

并且它返回一个错误消息" Unknown options: test "

5个回答

105

如果你想倾倒整个表格,只需使用

aws dynamodb scan --table-name Users

1
对于除了最小的表之外的所有表,似乎都会出现以下错误:"调用扫描操作时发生错误(已达到最大重试次数:2):超过了表的配置预配吞吐量级别。请考虑使用UpdateTable API增加您的预配级别。" - kloddant
1
显然,要解决这个错误,您可以将表的读写容量模式从预配改为按需。 - kloddant

50

尝试使用这种格式:

aws dynamodb get-item --table-name Users --key '{"Username": {"S": "test"}}'

如果在运行时出现“调用GetItem操作时发生验证异常错误:提供的键元素与模式不匹配”错误,请查看此问题 - D Malan
1
未知选项:test}}',{S: - kloddant

17

由于问题是关于使用 query 操作,下面是解答:

正如 AWS cli 文档 所解释的那样,您应该使用 --expression-attribute-values 参数将属性值与条件分离:

aws dynamodb query --table-name Users 
    --key-condition-expression "Username = :v1" 
    --expression-attribute-values "{ \":v1\" : { \"S\" : \"test\" } }"

此外,您可以在筛选器中组合更多属性(在我的情况下,我有一个日期时间排序键想要进行筛选):

aws dynamodb query 
  --table-name Users
  --key-condition-expression "Username = :v1 AND #Datetime BETWEEN :v2 AND :v3" 
  --expression-attribute-names "{ \"#Datetime\": \"Datetime\" }" 
  --expression-attribute-values "{ \":v1\" : { \"S\" : \"test\" }, \":v2\" : { \"S\" : \"2019-06-06\" }, \":v3\" : { \"S\" : \"2019-06-07\" } }" 

这里通过--expression-attribute-names参数进行#Datetime映射,因为Datetime是保留关键字,所以我不能在键条件表达式中使用它。


非常感谢!我忘记转义查询参数了 :) - KTM
这里的第一个查询产生了错误,"调用查询操作时发生错误(ValidationException):查询条件缺少关键模式元素:id"。 - kloddant
1
嘿@kloddant,我认为你正在尝试使用不包括主键(id)的条件运行查询。如果不知道你的查询是什么样子的,我猜你需要添加一个包含你查询属性的二级索引。或者,你可以运行Scan而不是Query。http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html - SebaGra
@SebaGra 谢谢,是的,我不得不运行扫描程序。 - kloddant
请@SebaGra更正您的语法错误:“通过使用--expression-atribute-values”,属性上需要额外的t。 - LearningPath

2
根据我的理解,您没有正确传递“key”(哈希或哈希/范围)。
创建一个包含您的键的文件: test.json
{
    "userName": {"S": "abc"},
    "anyRangeKey": {"S": "xyz"}  //optional
}

运行

aws dynamodb get-item --table-name users --key file://test.json

参考:http://docs.aws.amazon.com/cli/latest/reference/dynamodb/get-item.html
希望这有所帮助


1
aws dynamodb get-item --table-name ProductCatalog --key "{""Id"":{""N"":""205""}}" --no-verify-ssl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接