根据另一个字段中的值选择 Dynamodb 中的数据

Posted

技术标签:

【中文标题】根据另一个字段中的值选择 Dynamodb 中的数据【英文标题】:Selecting data in Dynamodb based on values in another field 【发布时间】:2021-04-17 00:29:12 【问题描述】:

我在 DynamoDB 中有来自 Plaid API 的数据转储。每个事务都有 transaction_id、pending(bool) 和 pending_transaction_id(FK 基本上是它替换的旧的挂起事务)


 "account_id": "acct1", // partition key
 "transaction_id": "txn100", // sort key
 "category_id": "22001000",
 "pending": false,
 "pending_transaction_id": "txn1",
 "amount": 500,
,

 "account_id": "acct1",
 "transaction_id": "txn1",
 "category_id": "22001000",
 "pending": true,
 "pending_transaction_id": null,
 "amount": 500,
,

是否可以在单个查询中只查询尚未永久替换的待处理事务?

换句话说,如果它是关系型数据库,它将是这样的 select * from txn where pending == false and transaction_id not in (select pending_transaction_id from txn)(或任何你喜欢的 CTE 或左加入)。

如何在单个查询中在 dynamo db 中执行此操作?

【问题讨论】:

它没有任何帮助。你应该分享dynamodb表方案,以便我们分析。 DynamoDB 在设计时并未考虑比较(连接)文档(行)。 ***.com/questions/36753861/… @MatBailie 谢谢你,Mat,这也是我在看了无数教程后学到的。我将在代码中执行此操作或重新设计表格。谢谢 【参考方案1】:

我们可以在这里有一个 GSI 来解决这个问题。

PK (pending) SK (pending_transaction_id) ..
false txn1 ..
true null ..

然后我们可以查询哪些PK记录并获取我们的记录。

需要考虑/观察的要点:

    由于此处SK为空,因此不会创建记录。这对我们有用,因为我们不需要这些记录。 如果需要,我们可以在 GSI 中包含 pending = true 记录,但这意味着具有 "NULL" 属性值。

我在这里看到的 GSI 的优势是(仅考虑第 1 点),我们只保留我们在查询中需要的重复记录。

【讨论】:

以上是关于根据另一个字段中的值选择 Dynamodb 中的数据的主要内容,如果未能解决你的问题,请参考以下文章

根据另一个字段中的选择显示/隐藏 django 管理表单字段

如何根据oracle中另一个表中的值更新一个表中的字段[重复]

如何根据唯一值和另一个表单中的值自动填写表单中的字段

根据 Access DB 中另一个表中的多条记录计算字段的值

如何根据 django admin 中的另一个选择字段限制选择字段选项

在 Django 中,根据模型中其他字段中选择的值删除选择字段下拉列表中的选项