DynamoDB 中的 KeyConditionExpression 是否支持 IN 运算符?

Does `KeyConditionExpression` in DynamoDB support `IN` operator?

阅读“KeyConditionExpression”的概念https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression

我很好奇是否可以对“KeyConditionExpression”进行IN比较。

对应的 SQL 将是:

SELECT * FROM table WHERE primary_key IN ("a","b","c")

还是我应该使用 BatchGetItem?

如果两者都可以,有什么区别?我应该使用哪一个?

我对此的回应是:大部分情况下不会,但有时会 - 我会详细说明。

DynamoDB 中的主键实际上可以是两种东西,因为有两种键:

  • 分区键,这是强制性的,用于标识项目存储在哪个数据分区上,并且
  • 可选的排序键,您可以在创建 table 时启用它,它用于对给定分区键内的项目进行排序。

如果只有一个分区键,那就是您项目的主键。在具有排序键的 table 上,(复合)主键 是分区键和排序键的组合。

对于 tables where primary key = partition key,你不能使用 Query API 来构建类似的东西,因为你需要准确指定分区键并且可以对排序键(不存在)执行可选条件。在这种情况下,BatchGetItem API 可用于执行与您的 SQL 代码等效的选择。

如果设计得当,具有复合主键的表可能会更适合这样的情况。 Query 允许您根据排序键进行一些过滤,但不支持真正的 IN 查询。通过巧妙地设计密钥模式,您可以使用 begins_withbetween 子句或定期与限制进行比较,但这是非常特定于用例的。 BatchGetItem 也适用于这种情况,因此这是更好的选择。

哦, 有一些有用的答案,概述了更多差异和用例。