如何获取 DynamoDB 列中的最大数量?

Posted

技术标签:

【中文标题】如何获取 DynamoDB 列中的最大数量?【英文标题】:How to get the maximum number in DynamoDB column? 【发布时间】:2021-01-28 06:31:38 【问题描述】:

我有一个名为 URLArray 的 DynamoDB 表,其中包含一个 URL 列表 (myURL) 和一个唯一的视频编号 (myNum)。

我使用 AWS Amplify 来查询我的表,例如:

URLData = await API.graphql(graphqlOperation(getUrlArray,  id: "173883db-9ff1-4...."));

myNum 也是一个 GSI,所以我也可以使用它查询行,例如:

URLData = await API.graphql(graphqlOperation(getURLinfofromMyNum,  myNum: 5 ));

我的问题是,我想简单地查询这个表来知道myNum 的最大数量是多少。所以在这张图片中它会返回myNum = 12。我如何查询我的表来得到这个?

【问题讨论】:

【参考方案1】:

DynamoDb 没有与 SQL 表达式 select MAX(myNum) 等效的功能,因此您无法按原样执行您所要求的操作。

一些建议:

在向表中插入项目时记录myNum 的最大值。例如,您可以使用 PK = "METADATA" 和名为 maxMyNum 的属性创建一个项目。如果您的值高于存储在 DDB 中的值,则可以有条件地更新 maxMyNum 属性。

您可以在单个分区中使用myNum 作为排序键来构建二级索引。这将允许您执行 query 操作并将 ScanIndexForward 设置为 false(降序),并选择第一个返回的条目(最大值)

如果您在应用程序代码中生成自动递增值,请考虑查看有关 atomic counters 的文档。

【讨论】:

感谢赛斯的建议。使用 GraphqQL API 调用 DynamoDB 的 AWS Amplify 似乎无法使用 ScanIndexForward、LastEvaluatedKey 或分页,因此我必须使用其他更基本的选项。我目前每次添加新行时都会保留一个单独的计数器,将 myNum 增加 +1。这给了我表中真正的最大行数。当条目被删除时,这显然会减少这个数字。但是,我决定保留多余的条目,并在实际使用数据时设置一个标志来忽略它们。

以上是关于如何获取 DynamoDB 列中的最大数量?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取熊猫数据框中的行,列中具有最大值并保留原始索引?

如何获取列中元素的 id 和数量,即使它们在 SQL 中为 0

如何从 Java 中的 DynamoDB getItem 中获取特定属性值

根据Excel中的逻辑从2列中检索最大数据

如何获取列中最频繁值的数量?

如何使用 Appsync 中的解析器获取 dynamodb 中存在的记录总数