1

我在使用 AWS SDK for Java 2.0 创建 dynamo DB 表时遇到错误。指定了哈希键但仍然出现错误

    @Bean
  ApplicationRunner applicationRunner(DynamoDbClient dynamoDbClient) {
    return args -> {
      dynamoDbClient.listTables().tableNames().forEach(System.out::println);

  CreateTableRequest createTableRequest =
      CreateTableRequest.builder()
          .keySchema(
              KeySchemaElement.builder().keyType(KeyType.HASH).attributeName("id").build())
          .attributeDefinitions(
              AttributeDefinition.builder()
                  .attributeName("campaign_name")
                  .attributeType(ScalarAttributeType.S)
                  .build())
          .provisionedThroughput(
              ProvisionedThroughput.builder()
                  .readCapacityUnits(5L)
                  .writeCapacityUnits(5L)
                  .build())
          .tableName("campaign")
          .build();
  try {
    dynamoDbClient.createTable(createTableRequest);
    dynamoDbClient.listTables().tableNames().forEach(System.out::println);
  } catch (DynamoDbException e) {
    System.err.println(e.getMessage());
  }
};

}

错误:

属性定义中未指定哈希键。类型未知。(服务:DynamoDb,状态代码:400,请求 ID:bed4b8c3-f312-4a9d-8d7b-a2184dacce54)

我正在尝试使用键和非键列创建表

@Bean
ApplicationRunner applicationRunner(DynamoDbClient dynamoDbClient) {
    return args -> {
      dynamoDbClient.listTables().tableNames().forEach(System.out::println);

      CreateTableRequest createTableRequest =
          CreateTableRequest.builder()
              .attributeDefinitions(
                  AttributeDefinition.builder()
                      .attributeName("id")
                      .attributeType(ScalarAttributeType.S)
                      .build(),
                  AttributeDefinition.builder()
                      .attributeName("name")
                      .attributeType(ScalarAttributeType.S)
                      .build())
              .keySchema(
                  KeySchemaElement.builder()
                      .keyType(KeyType.HASH)
                      .attributeName("campaign_id")
                      .build())
              .provisionedThroughput(
                  ProvisionedThroughput.builder()
                      .readCapacityUnits(5L)
                      .writeCapacityUnits(5L)
                      .build())
              .tableName("campaign")
              .build();
      try {
        dynamoDbClient.createTable(createTableRequest);
        dynamoDbClient.listTables().tableNames().forEach(System.out::println);
      } catch (DynamoDbException e) {
        System.err.println(e.getMessage());
      }
    };
  }

错误 - 键模式中的属性数必须与属性定义中定义的属性数相匹配。

4

2 回答 2

1

我相信你也需要AttributeDefinition为你添加一个KeySchemeElement

尝试将以下内容添加到您的attributeDefinitions通话中

AttributeDefinition.builder()
              .attributeName("campaign_id")
              .attributeType(ScalarAttributeType.S)
              .build()
于 2020-03-01T08:47:34.657 回答
0

我认为campaign_id 是HASH 键,它需要在AttributeDefinitions 中。

              AttributeDefinition.builder()
                  .attributeName("campaign_id")
                  .attributeType(ScalarAttributeType.S)
                  .build(),
于 2020-03-02T21:23:54.787 回答