标签: dynamodb-queries

DynamoDB:查询的 1MB 限制何时适用

在DynamoDB的文档中,它说:

在查询操作中,DynamoDB 按排序顺序检索项目,然后使用可能存在的KeyConditionExpression任何项目处理这些项目FilterExpression

和:

单个查询操作最多可以检索 1 MB 的数据。此限制在任何FilterExpression应用于结果之前适用。

这是否意味着KeyConditionExpression在此 1MB 限制之前应用?

amazon-web-services amazon-dynamodb dynamodb-queries

5
推荐指数
1
解决办法
2839
查看次数

查询可以在控制台上运行,但不能在代码中运行

我的 DynamoDB 表alexas包含带有键“abc”的此项,如下面的 DynamoDB 控制台所示:

在此输入图像描述

但是,以下查询不返回结果:

const params = { TableName: "alexas",
  KeyConditionExpression: "deviceId = :deviceId",
  ExpressionAttributeValues: { ":deviceId": "abc"}
}
const docClient = new AWS.DynamoDB.DocumentClient();
docClient.query(params, (err, data) => {
  if (err) {
    console.error(err);
  } else {
    console.log(data);
  }
});
Run Code Online (Sandbox Code Playgroud)

上面的代码返回nullforerr和 in data

{ Items: [], Count: 0, ScannedCount: 0 }
Run Code Online (Sandbox Code Playgroud)

我对 DynamoDB 表达式风格不熟悉。我从这里获取的代码有什么问题吗?

query如果我不使用 ,而是使用该scan方法,只需使用TableNamein params,我就会得到表中的项目。这证实我正在对包含数据的正确表执行操作。

amazon-dynamodb dynamodb-queries

5
推荐指数
1
解决办法
1028
查看次数

Dynamodb BETWEEN 字符串操作

我找不到 dynamodb BETWEEN 运算符的任何详细文档,特别是它如何处理字符串。

例如,如果我进行诸如“... sort_key Between '100' and '150'”之类的查询并且排序键为“120”,那么它可以正确工作。但是,如果我创建“1224|67”或“6653|67”等字符串,然后在“3456|67”和“8968|67”​​之间查询,则它不起作用。如何获取这种比较内部如何运作的信息?

amazon-dynamodb dynamodb-queries

5
推荐指数
1
解决办法
8051
查看次数

DynamoDb:如何为每个给定的分区键列表检索第一项(按排序键)

我有一个 dynamodb 表,用于存储在我的服务器上运行的进程的历史运行数据,我需要一个可以汇总这些进程并查看其中每个进程的最新数据的地方。每个进程都有它自己的ProcessId,它是 dynamodb 表的分区键。排序键是StartDateTime

{
  ProcessId, // Partition Key
  StartDateTime, // Sort Key
  ... // More data
}
Run Code Online (Sandbox Code Playgroud)

本质上,我需要为我提供的每个 ProcessId 检索最新的 StartDateTime。我正在使用带有 aws-sdk 的 nodejs lambda 来检索数据。我已经研究过使用 BatchGetItem,但我的理解是,对于具有分区键和排序键的表,您需要同时提供两者来检索项目。我也研究过使用查询,但我需要为每个分区运行一个单独的查询,这不是理想的。有谁知道我可以在一次调用中发出此请求的方法,而不必为每个分区进行单独调用?

amazon-web-services amazon-dynamodb aws-sdk aws-sdk-nodejs dynamodb-queries

5
推荐指数
2
解决办法
2556
查看次数

DynamoDb“MissingRequiredParameter”和“意外密钥“M””

我很困惑为什么我会收到错误。似乎它只是忽略了我传入的项目。我已经尝试了下面的各种组合以及许多其他组合。尝试了 get、delete、put 方法等,但没有成功。

当然,尝试根据方法更改“项目”和“密钥”。不知道出了什么问题。主分区键是“uid”

'table' 是一个带有表名的变量

let params = {
    TableName:{"S":table},
    Item:{
        uid: "2"
    }
};
Run Code Online (Sandbox Code Playgroud)
let params = {
    TableName: table,
    Item:{
        uid: "2"
    }
};
Run Code Online (Sandbox Code Playgroud)

docClient.query(params, function(err, data) {

这是完整的错误。我认为“M”指的是一个对象,所以不确定为什么它也会出现。

“有 2 个验证错误:* MissingRequiredParameter:>params 中缺少必需的键“TableName”* UnexpectedParameter:在 params 中找到意外的键“M””,“code”:“MultipleValidationErrors”,>“errors”:{“message”: "参数中缺少必需的键 'TableName'","code":"MissingRequiredParameter",time": "2020-05-09T21:51:14.530Z"}, {message": "在参数中发现意外的键 'M'" , "code": "UnexpectedParameter", "time": "2020-05-09T21:51:14.530Z"} ],"time": "2020-05-09T21:51:14.530Z"\"}"

这是 lambda 函数

var AWS = require("aws-sdk");
const docClient = new AWS.DynamoDB.DocumentClient('us-east-1');

exports.handler = async event => {
    var tables = ['holdings','trades','userDetails'];
    var table = 'userDetails'//tables[2]
    var …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-dynamodb dynamodb-queries

5
推荐指数
1
解决办法
8236
查看次数

AWS dynamoDB / Update / UpdateExpression / 如何通过使用嵌套地图来绕过路径重叠限制?

我想使用嵌套映射更新 dynamoDB 项目,但我不知道这些项目是否已经存在。如果它已经存在那就好了。但如果该项目尚不存在,我会收到错误消息。我无法选择预先创建那些“空”项目/地图。所以我尝试通过在 UpdateExpression 中使用两个 SET 来解决这个问题:

UpdateExpression: "SET #info = if_not_exists(#info, :fullData), #info.#version = :shortData",
Run Code Online (Sandbox Code Playgroud)

这让我出现以下错误:

Two document paths overlap with each other; must remove or rewrite one of these paths; path one: [info], path two: [info, V202014]"
Run Code Online (Sandbox Code Playgroud)

有没有人找到了解决方案,而无需尝试使用 2 次调用来阻止(1 次更新 => 如果错误添加新的)?或者如何绕过这两条路径的限制?


amazon-dynamodb dynamodb-queries

5
推荐指数
0
解决办法
474
查看次数

DynamoDB 如何在 PartiQL 查询中使用排序键?

您好,我是 DynamoDB 的新手,我创建了一个表,其中分区键“pk”和排序键“id”

在项目资源管理器中,我可以使用 pk 和排序键值进行查询,它似乎有效。

在 PartiQL 编辑器中我这样做

SELECT * FROM "dev" WHERE "pk" = 'config' AND "id" = "7b733512cc98445891dcb07dc4299ace"
Run Code Online (Sandbox Code Playgroud)

我收到错误过滤器表达式只能包含非主键属性:主键属性:id

我不知道如何在关键条件中指定排序键,而不是使用 WHERE 子句指定过滤条件。

amazon-dynamodb dynamodb-queries partiql

5
推荐指数
1
解决办法
1509
查看次数

DynamoDB 查询性能 - 唯一分区键与唯一分区+排序键

假设我有一个名为“student_course”的 Dynamo DB 表。我想存储每个学生在大学学习的课程。一名学生可以同时选修多门课程,一门课程可以同时有多名学生。所以基本上它是一个多重映射。

我的数据访问模式只有一种用例 -

  1. 一次获取一名学生和一门课程的记录,即获取每个 StudentId 和 CourseId 组合的数据。保证对于学生 ID 和课程 ID 组合,只有一条可用记录。

为了实现这一点,我可以通过这两种方式存储数据 -

  1. 分区键 = {学生 ID},排序键 = {课程 ID}
  2. Partition-key = "studentId:{student-id}_courseId:{course-id}", sort-key 不存在

我的问题是 - 如果有任何差异,哪个查询会执行得更好?我应该选择哪一个而不是另一个,为什么?

amazon-dynamodb dynamodb-queries

5
推荐指数
1
解决办法
1967
查看次数

如何在更新时从 DynamoDB 中删除多个属性

我想从 DynamoDB 表中的项目中删除两个属性。在文档和互联网上的任何地方,它都显示仅删除一个属性。是否可以从 DynamoDB 表中的一个项目中一次删除多个属性。如果是这样,怎么办?下面是我尝试过的代码:

const params = {
  TableName: process.env.REPORTS_TABLE,
  Key: {
    ReportId: removeParams.reportId
  },
  UpdateExpression: 'REMOVE #param1, #param2',
  ExpressionAttributeValues: { '#param1': 'StartDate', '#param2': 'EndDate' },
  ReturnValues: 'UPDATED_NEW'
};
const res = await updateReport(params);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

ValidationException: ExpressionAttributeValues contains invalid key: Syntax error; key: "#param2"
Run Code Online (Sandbox Code Playgroud)

这是AWS的限制还是有其他方法可以做到这一点?

amazon-web-services node.js amazon-dynamodb dynamodb-queries

4
推荐指数
1
解决办法
1万
查看次数

Dynamodb 什么是 WCU 和 RCU?

即使读了很多文章,我仍然无法理解WCU和RCU的含义。Dynamo 提供以下免费套餐:

  • 25 个预配置写入容量单元 (WCU)
  • 25 个预配置读取容量单元 (RCU)

“每秒 25 次读写”是什么意思?我有一个带有 API 的 Web 应用程序,可以从 Dynamo 读取数据。这是否意味着它每秒只能处理 25 个查询和写入?如果是的话,如果我们在一秒钟内收到 26 个读请求会发生什么?

我很困惑,希望能通过使用网络应用程序的真实示例进行解释。

amazon-web-services amazon-dynamodb dynamodb-queries

4
推荐指数
1
解决办法
9112
查看次数