DynamoDB 分区键

DynamoDB partition key

我在 DynamoDb 中有一个属性 ObjectIdentifier,其值的形式为

{"Id":"testId","Version":"2020-09-03t16:29:51"}

我需要使用 Id+Version 为 GSI 创建分区键。是否可以创建和使用这样的键,因为 DynamoDb 提到只有字符串、二进制和数字类型可以用作分区键?

在 DynamoDB 的限制范围内,您可以将任何您想要的数据放入分区键中。听起来你想要自动设置 Id+Version 的东西,这是不可能的,但是,你可以做的是创建一个将作为你的分区键的字段,并将值设置为这些字段。您的数据可能看起来像这样(我使用管道来分隔值)。

{
  "pk": "testId|2020-09-03t16:29:51",
  "ObjectIdentifier": {
    "Id": "testId",
    "Version": "2020-09-03t16:29:51"
  }
}

在此示例中,pk 将是分区键。该值不是为您计算的,您必须自己计算。

如果我对你的问题的理解正确,听起来你有一个现有的 table,其中包含以下内容:

  • 一些分区键
  • 一个名为 ObjectIdentifier 的属性,其类型为 Map
  • 可能还有一些其他属性。

您询问是否可以在此 table 上创建 GSI,其中 ObjectIdentifier(Map 类型)将是新索引的分区键。

不,这不可能。

如您所述,分区键只能是字符串、二进制或数字类型。可以使用属性名称 ObjectIdentifier 创建字符串类型的 GSI;但是,在创建 GSI 之前已经在 table 中的项目不会被插入到 GSI 中,因为它们没有名为 ObjectIdentifier 的字符串类型的属性。请参阅下面的 test/example.

Table 视图:

在 String ObjectIdentifier 上创建 GSI 后的 GSI 视图