如何在DynamoDB的Datetime类型列上使用--filter-expression过滤数据
DynamoDB Scan时间范围过滤报错解决方案
报错原因
An error occurred (ValidationException) when calling the Scan operation: Invalid FilterExpression: Syntax error; token: "2021", near: "BETWEEN 2021-"
出现该错误的核心原因是:你在--filter-expression中直接写入的ISO格式时间字符串没有被标识为字符串类型,DynamoDB解析表达式时将2021识别为非法数值/标识符,触发语法校验失败。
正确查询写法
方案1:快速修复(直接包裹引号)
直接在过滤表达式中将两个时间值用单引号包裹,标记为字符串即可:
aws dynamodb scan \ --table-name <替换为你的表名> \ --filter-expression "Datecolumn BETWEEN '2021-06-01T12:00:00.000Z' AND '2021-06-30T12:00:00.000Z'"
方案2:规范写法(使用表达式属性值,推荐)
为了避免时间值含特殊字符、引号转义冲突等问题,更推荐用占位符+属性值定义的方式编写:
aws dynamodb scan \ --table-name <替换为你的表名> \ --filter-expression "Datecolumn BETWEEN :start_dt AND :end_dt" \ --expression-attribute-values '{ ":start_dt": {"S": "2021-06-01T12:00:00.000Z"}, ":end_dt": {"S": "2021-06-30T12:00:00.000Z"} }'
说明:{"S": "..."}表示该值为字符串类型,和你DynamoDB中存储的ISO时间格式的列类型完全匹配,兼容性更高。
内容的提问来源于stack exchange,提问作者Praveen Kumar
相关产品推荐
相关产品推荐

