DynamoDb 查询存储日期

Posted

技术标签:

【中文标题】DynamoDb 查询存储日期【英文标题】:DynamoDb query on stored date 【发布时间】:2020-09-21 08:05:12 【问题描述】:

我有解析模板,它将从 appsync 查询中获取开始日期作为日期。但是我保存在 Dynamo 中的日期带有日期时间戳。我们如何在没有时间的情况下比较这两个日期。以下是我的解析器模板查询:

 "version": "2018-05-29",
 "operation": "Query", 
 "query": 
  "expression": "Id = :Id and startDate =:date",
  "expressionValues": 
    #set( $Id = 
      $util.dynamodb.toDynamoDBJson("fixture#$ctx.args.input.Id") )
    ":Id": $Id,
    #set( $date = $util.dynamodb.toDynamoDBJson($ctx.args.input.date)
    ":date": $date
  

【问题讨论】:

【参考方案1】:

DynamoDB 不理解日期。根据您的要求,有两种方法可以实现此目的,具体取决于 DynamoDB 中时间戳的格式。

1 - 如果您将时间戳存储为“自纪元以来的毫秒/秒”,则可以使用将 AWSDate(即 ISO8601)转换为纪元毫秒/秒时间戳

$util.time.parseISO8601ToEpochMilliSeconds("2018-02-01T17:21:05.180+08:00")

然后使用带有BETWEEN :startDate AND :endDate 的过滤器根据输入日期查询您的表。 请注意,

endDate(秒) = startDate + 86400

endDate(毫秒) = startDate + 86400000

2 - 如果您使用时间戳的字符串表示,那么您可能需要添加具有日期字段的全局二级索引 (GSI) 作为键类型“范围”的属性。在this link、this link 和this link 上有一些很好的解释和建议的解决方案。

希望对你有帮助。

【讨论】:

以上是关于DynamoDb 查询存储日期的主要内容,如果未能解决你的问题,请参考以下文章

AWS dynamoDB按日期查询

带标签的 AWS S3、DynamoDB、Redshift?

如何按日期(范围键)查询 DynamoDB,没有明显的哈希键?

DynamoDB 最高效的日期类型

如何为 DynamoDB 创建 GraphQL 查询

DynamoDB:查询中的全局二级索引利用率