【问题标题】:Return Multiple Records AWS Lambda Function Query返回多条记录 AWS Lambda 函数查询
【发布时间】:2021-12-31 20:54:52
【问题描述】:

我正在 AWS 中学习 lambda 函数,并试图弄清楚如何使用我的 pk 和 sk 查询 dynamodb 表以返回所有匹配的记录。我已经能够返回一条记录,但我还没有弄清楚如何返回我可以更新的整个记录​​列表。

这可以通过 lambda 函数实现吗? Node.js 是我一直在使用的吗?

【问题讨论】:

  • 同时包含 PK 和 SK 的查询将总是返回一条记录。那是因为您正在查询主键值。我建议您尝试使用 AWS DynamoDB 控制台来执行不同的查询和扫描,并确定您要执行的操作。然后将其转换为 Boto3 代码将是微不足道的。

标签: amazon-web-services aws-lambda amazon-dynamodb


【解决方案1】:

如何使用我的 pk 和 sk 查询 dynamodb 表以返回所有匹配的记录。

我的回答是描述 pk 和 sk 的用例,以便您可以使用此原则。

  • 在 dynamodbDB 中,您可以拥有一个唯一的分区键(对于单个 PK)或分区键和排序键的组合。

根据文档(对于 Pk 和 sk 的组合)-> DynamoDB 使用分区键值作为内部散列函数的输入。哈希函数的输出决定了存储项目的分区(DynamoDB 内部的物理存储)。具有相同分区键值的所有项目存储在一起,按排序键值排序。 在具有分区键和排序键的表中,多个项目可能具有相同的分区键值。但是,这些项目必须具有不同的排序键值。

对于这样的复合键表设计,你可以有场景:-

  • 使用 get 查找 pk 和 sk 的单个记录(pk 和 sk 的组合将是唯一的)
  • 使用查询查找同一个 pk 的多条记录。

例如有一个名称为 pk 和序列号为排序键的表。 在这种情况下,您可以查询名称为“abc”的多条记录。

我正在使用 JavaScript。

const paramsForQuery = {
    TableName: tableName,
    KeyConditionExpression: 'name=:name',
    ExpressionAttributeValues: {
      ':ename': 'abc,
    },
  };
const dynamoDbQueryResults = await dynamoDb
      .query(paramsForQuery)
      .promise();

查询操作官方文档https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Query.html

【讨论】:

    【解决方案2】:

    您可以将 JSON 作为字符串返回并在客户端对其进行解析。实现可能会有所不同,具体取决于您使用的编程语言及其调用代码/应用程序。

    如果您计划同步调用 Lambda 函数(使用 RequestResponse 调用类型),您可以使用任何受支持的数据类型返回函数的输出。例如,如果您使用 Lambda 函数作为移动应用程序后端,那么您就是在同步调用它。您的输出数据类型将被序列化为 JSON。

    输出类型可以是对象或 void。运行时将返回值序列化为文本。如果输出是带有字段的对象,则运行时会将其序列化为 JSON 文档。如果它是包装原始值的类型,则运行时会返回该值的文本表示形式。

    一些示例java代码:

    public class HandlerString implements RequestHandler<String, Integer>{
      Gson gson = new GsonBuilder().setPrettyPrinting().create();
      @Override
      public Integer handleRequest(String event, Context context)
      {
        LambdaLogger logger = context.getLogger();
        // process event
        logger.log("EVENT: " + gson.toJson(event));
        logger.log("EVENT TYPE: " + event.getClass().toString());
        return context.getRemainingTimeInMillis() ;
      }
    }
    

    Python

    以下示例显示了一个名为 lambda_handler 的函数,该函数使用 python3.8 Lambda 运行时。该函数使用 Lambda 在运行时传递的事件数据。它解析 JSON 响应中返回的 AWS_REGION 中的环境变量。

    def lambda_handler(event, context):
        json_region = os.environ['AWS_REGION']
        return {
            "statusCode": 200,
            "headers": {
                "Content-Type": "application/json"
            },
            "body": json.dumps({
                "Region ": json_region
            })
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-25
      • 2020-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      相关资源
      最近更新 更多