当前位置: 首页 > 知识库问答 >
问题:

如何使用Lambda和DynamoDB扫描日期范围?

封永嘉
2023-03-14

我正在尝试使用Node Lambda函数在日期范围之间进行扫描。我正确扫描了数据,但我似乎无法让日期表达式正确工作。

var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = function(event, context) {
    var tableName = "MyDDBTable";
    dynamodb.scan({
        TableName : tableName,
        FilterExpression: "start_date < :start_date",
        ExpressionAttributeValues: {
            ":start_date": {
                "S": "2016-12-01"
            }
        }
    }, function(err, data) {
        context.succeed(data);
    });
};

这目前并没有试图在一个范围内返回,它只是现在查看一个日期。我不想在表达式中添加一个和,直到我知道这是可行的。

我的DynamoDB中的示例文档的结构如下:

{
    "end_date": {
        "S": "2016-12-02"
    },
    "name": {
        "S": "Name of document"
    },
    "start_date": {
        "S": "2016-10-10"
    },
    "document_id": {
        "N": "7"
    }
}

文档id是我的主键。我对Lamdba和DynamoDB的组合还很陌生,所以我可能把它完全设置错了,但这是我通过研究成功完成的。

我最终想要实现的是给定开始日期和结束日期,返回所有日期范围在该范围内的DynamoDB文档。非常感谢任何帮助。

共有1个答案

左丘边浩
2023-03-14

首先,扫描操作正确。发电机。应循环执行扫描,直到上次评估键不可用为止。请参考此博客。

lambda没有返回结果,因为它在第一次扫描中没有找到数据。如果可以将扫描延长到LastEvaluatedKey不可用,lambda可能会返回结果。

对于查询和扫描操作,DynamoDB根据项大小而不是返回给应用程序的数据量计算消耗的预配吞吐量。

如果查询或扫描与超过1 MB数据的值相匹配的特定属性,则需要对接下来的1 MB数据执行另一个查询或扫描请求。为此,从上一个请求中获取LastEvaluatedKey值,并在下一个请求中使用该值作为ExclusiveStartKey。这种方法将允许您以1 MB的增量逐步查询或扫描新数据。

操作员之间示例:-

FilterExpression: "start_date BETWEEN :date1 and :date2"
 类似资料:
  • 我正在使用DynamoDB,并通过将JSON传递给它来存储文档,所有这些都在Java中使用DynamoDBMapper类。 将数据放入表中已经足够简单了。还可以查询表中是否有可用的Hash或Range值。 但是我想用JSON文档对一个值进行扫描(我猜是这样)。我一直在四处寻找例子,但我找不到任何例子,或者至少在使用DynamoDBMapper方法做事时找不到。 那么我认为这是可以做到的,对吗?如果

  • DynamoDb文档中指定的查询操作: 查询操作仅搜索主键属性值,并支持对键属性值的比较运算符子集以优化搜索过程。 和扫描操作: 扫描操作扫描整个表。您可以指定要应用于结果的过滤器,以在完成扫描后优化返回给您的值。 这是基于性能和成本考虑的最佳选择。

  • 问题内容: Scanner.class 提供了许多有用的工具来分析数字,例如可以触发特定特征的 .hasNext ()和 .next_ _()方法。 在这样的某个地方,对于Date来说:第一次是要检测 String中的 日期,并根据格式调整响应( mm / dd / yy | dd / mm / yy | yyyymmdd ,是秒,是字母在里面,是四位数的年份,是负数…)。 编辑回应 扫描仪提供的

  • 表< code>events包含3700个项目。当我浏览它时,它只返回791个项目计数。这是为什么呢? 以下是 中的代码: {项目:[],计数:0,扫描计数:791,最后评估键:{日期:{N:'149987596175'}}}

  • 我们有一个设置,其中各种工作节点执行计算并更新DynamoDB表中的相对状态。该表充当工作节点活动的一种历史记录。看门狗节点需要定期扫描表,并构建一个表示工作节点及其作业的当前状态的对象。因此,我们的应用程序能够扫描表并按时间顺序检索数据(即按时间戳排序)是很重要的。表最终会太大,无法扫描到本地内存进行后期排序,所以我们扫描后无法排序。 从AWS留档读取主键: DynamoDB使用分区键值作为内部

  • 我创建了一个Lambda函数,它从DynamoDB检索一些数据,并输出一些JSON。我要做的是在中运行这个函数lambda@edge并生成一个我可以使用Cloudfront缓存的响应。 我面临的问题是,使用全局表和lambda@edge显然,这在许多地区都存在。 这使我无法从lambda环境中使用AWS_REGION。例如,如果一个请求在us-west-1中运行,环境变量将反映这一点,并且它将尝试